Home | History | Annotate | Download | only in info
      1 This is doc/gccint.info, produced by makeinfo version 4.8 from
      2 ../../../toolchain/android-toolchain/gcc-4.3.1/gcc/doc/gccint.texi.
      3 
      4  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
      5 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software
      6 Foundation, Inc.
      7 
      8  Permission is granted to copy, distribute and/or modify this document
      9 under the terms of the GNU Free Documentation License, Version 1.2 or
     10 any later version published by the Free Software Foundation; with the
     11 Invariant Sections being "GNU General Public License" and "Funding Free
     12 Software", the Front-Cover texts being (a) (see below), and with the
     13 Back-Cover Texts being (b) (see below).  A copy of the license is
     14 included in the section entitled "GNU Free Documentation License".
     15 
     16  (a) The FSF's Front-Cover Text is:
     17 
     18  A GNU Manual
     19 
     20  (b) The FSF's Back-Cover Text is:
     21 
     22  You have freedom to copy and modify this GNU Manual, like GNU
     23 software.  Copies published by the Free Software Foundation raise
     24 funds for GNU development.
     25 
     26 INFO-DIR-SECTION Software development
     27 START-INFO-DIR-ENTRY
     28 * gccint: (gccint).            Internals of the GNU Compiler Collection.
     29 END-INFO-DIR-ENTRY
     30  This file documents the internals of the GNU compilers.
     31 
     32  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
     33 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software
     34 Foundation, Inc.
     35 
     36  Permission is granted to copy, distribute and/or modify this document
     37 under the terms of the GNU Free Documentation License, Version 1.2 or
     38 any later version published by the Free Software Foundation; with the
     39 Invariant Sections being "GNU General Public License" and "Funding Free
     40 Software", the Front-Cover texts being (a) (see below), and with the
     41 Back-Cover Texts being (b) (see below).  A copy of the license is
     42 included in the section entitled "GNU Free Documentation License".
     43 
     44  (a) The FSF's Front-Cover Text is:
     45 
     46  A GNU Manual
     47 
     48  (b) The FSF's Back-Cover Text is:
     49 
     50  You have freedom to copy and modify this GNU Manual, like GNU
     51 software.  Copies published by the Free Software Foundation raise
     52 funds for GNU development.
     53 
     54 
     55 
     56 File: gccint.info,  Node: Top,  Next: Contributing,  Up: (DIR)
     57 
     58 Introduction
     59 ************
     60 
     61 This manual documents the internals of the GNU compilers, including how
     62 to port them to new targets and some information about how to write
     63 front ends for new languages.  It corresponds to the compilers
     64 (GCC) version 4.3.1.  The use of the GNU compilers is documented in a
     65 separate manual.  *Note Introduction: (gcc)Top.
     66 
     67  This manual is mainly a reference manual rather than a tutorial.  It
     68 discusses how to contribute to GCC (*note Contributing::), the
     69 characteristics of the machines supported by GCC as hosts and targets
     70 (*note Portability::), how GCC relates to the ABIs on such systems
     71 (*note Interface::), and the characteristics of the languages for which
     72 GCC front ends are written (*note Languages::).  It then describes the
     73 GCC source tree structure and build system, some of the interfaces to
     74 GCC front ends, and how support for a target system is implemented in
     75 GCC.
     76 
     77  Additional tutorial information is linked to from
     78 `http://gcc.gnu.org/readings.html'.
     79 
     80 * Menu:
     81 
     82 * Contributing::    How to contribute to testing and developing GCC.
     83 * Portability::     Goals of GCC's portability features.
     84 * Interface::       Function-call interface of GCC output.
     85 * Libgcc::          Low-level runtime library used by GCC.
     86 * Languages::       Languages for which GCC front ends are written.
     87 * Source Tree::     GCC source tree structure and build system.
     88 * Options::         Option specification files.
     89 * Passes::          Order of passes, what they do, and what each file is for.
     90 * Trees::           The source representation used by the C and C++ front ends.
     91 * RTL::             The intermediate representation that most passes work on.
     92 * Control Flow::    Maintaining and manipulating the control flow graph.
     93 * Tree SSA::        Analysis and optimization of the tree representation.
     94 * Loop Analysis and Representation:: Analysis and representation of loops
     95 * Machine Desc::    How to write machine description instruction patterns.
     96 * Target Macros::   How to write the machine description C macros and functions.
     97 * Host Config::     Writing the `xm-MACHINE.h' file.
     98 * Fragments::       Writing the `t-TARGET' and `x-HOST' files.
     99 * Collect2::        How `collect2' works; how it finds `ld'.
    100 * Header Dirs::     Understanding the standard header file directories.
    101 * Type Information:: GCC's memory management; generating type information.
    102 
    103 * Funding::         How to help assure funding for free software.
    104 * GNU Project::     The GNU Project and GNU/Linux.
    105 
    106 * Copying::         GNU General Public License says
    107                      how you can copy and share GCC.
    108 * GNU Free Documentation License:: How you can copy and share this manual.
    109 * Contributors::    People who have contributed to GCC.
    110 
    111 * Option Index::    Index to command line options.
    112 * Concept Index::   Index of concepts and symbol names.
    113 
    114 
    115 File: gccint.info,  Node: Contributing,  Next: Portability,  Prev: Top,  Up: Top
    116 
    117 1 Contributing to GCC Development
    118 *********************************
    119 
    120 If you would like to help pretest GCC releases to assure they work well,
    121 current development sources are available by SVN (see
    122 `http://gcc.gnu.org/svn.html').  Source and binary snapshots are also
    123 available for FTP; see `http://gcc.gnu.org/snapshots.html'.
    124 
    125  If you would like to work on improvements to GCC, please read the
    126 advice at these URLs:
    127 
    128      `http://gcc.gnu.org/contribute.html'
    129      `http://gcc.gnu.org/contributewhy.html'
    130 
    131 for information on how to make useful contributions and avoid
    132 duplication of effort.  Suggested projects are listed at
    133 `http://gcc.gnu.org/projects/'.
    134 
    135 
    136 File: gccint.info,  Node: Portability,  Next: Interface,  Prev: Contributing,  Up: Top
    137 
    138 2 GCC and Portability
    139 *********************
    140 
    141 GCC itself aims to be portable to any machine where `int' is at least a
    142 32-bit type.  It aims to target machines with a flat (non-segmented)
    143 byte addressed data address space (the code address space can be
    144 separate).  Target ABIs may have 8, 16, 32 or 64-bit `int' type.  `char'
    145 can be wider than 8 bits.
    146 
    147  GCC gets most of the information about the target machine from a
    148 machine description which gives an algebraic formula for each of the
    149 machine's instructions.  This is a very clean way to describe the
    150 target.  But when the compiler needs information that is difficult to
    151 express in this fashion, ad-hoc parameters have been defined for
    152 machine descriptions.  The purpose of portability is to reduce the
    153 total work needed on the compiler; it was not of interest for its own
    154 sake.
    155 
    156  GCC does not contain machine dependent code, but it does contain code
    157 that depends on machine parameters such as endianness (whether the most
    158 significant byte has the highest or lowest address of the bytes in a
    159 word) and the availability of autoincrement addressing.  In the
    160 RTL-generation pass, it is often necessary to have multiple strategies
    161 for generating code for a particular kind of syntax tree, strategies
    162 that are usable for different combinations of parameters.  Often, not
    163 all possible cases have been addressed, but only the common ones or
    164 only the ones that have been encountered.  As a result, a new target
    165 may require additional strategies.  You will know if this happens
    166 because the compiler will call `abort'.  Fortunately, the new
    167 strategies can be added in a machine-independent fashion, and will
    168 affect only the target machines that need them.
    169 
    170 
    171 File: gccint.info,  Node: Interface,  Next: Libgcc,  Prev: Portability,  Up: Top
    172 
    173 3 Interfacing to GCC Output
    174 ***************************
    175 
    176 GCC is normally configured to use the same function calling convention
    177 normally in use on the target system.  This is done with the
    178 machine-description macros described (*note Target Macros::).
    179 
    180  However, returning of structure and union values is done differently on
    181 some target machines.  As a result, functions compiled with PCC
    182 returning such types cannot be called from code compiled with GCC, and
    183 vice versa.  This does not cause trouble often because few Unix library
    184 routines return structures or unions.
    185 
    186  GCC code returns structures and unions that are 1, 2, 4 or 8 bytes
    187 long in the same registers used for `int' or `double' return values.
    188 (GCC typically allocates variables of such types in registers also.)
    189 Structures and unions of other sizes are returned by storing them into
    190 an address passed by the caller (usually in a register).  The target
    191 hook `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
    192 
    193  By contrast, PCC on most target machines returns structures and unions
    194 of any size by copying the data into an area of static storage, and then
    195 returning the address of that storage as if it were a pointer value.
    196 The caller must copy the data from that memory area to the place where
    197 the value is wanted.  This is slower than the method used by GCC, and
    198 fails to be reentrant.
    199 
    200  On some target machines, such as RISC machines and the 80386, the
    201 standard system convention is to pass to the subroutine the address of
    202 where to return the value.  On these machines, GCC has been configured
    203 to be compatible with the standard compiler, when this method is used.
    204 It may not be compatible for structures of 1, 2, 4 or 8 bytes.
    205 
    206  GCC uses the system's standard convention for passing arguments.  On
    207 some machines, the first few arguments are passed in registers; in
    208 others, all are passed on the stack.  It would be possible to use
    209 registers for argument passing on any machine, and this would probably
    210 result in a significant speedup.  But the result would be complete
    211 incompatibility with code that follows the standard convention.  So this
    212 change is practical only if you are switching to GCC as the sole C
    213 compiler for the system.  We may implement register argument passing on
    214 certain machines once we have a complete GNU system so that we can
    215 compile the libraries with GCC.
    216 
    217  On some machines (particularly the SPARC), certain types of arguments
    218 are passed "by invisible reference".  This means that the value is
    219 stored in memory, and the address of the memory location is passed to
    220 the subroutine.
    221 
    222  If you use `longjmp', beware of automatic variables.  ISO C says that
    223 automatic variables that are not declared `volatile' have undefined
    224 values after a `longjmp'.  And this is all GCC promises to do, because
    225 it is very difficult to restore register variables correctly, and one
    226 of GCC's features is that it can put variables in registers without
    227 your asking it to.
    228 
    229 
    230 File: gccint.info,  Node: Libgcc,  Next: Languages,  Prev: Interface,  Up: Top
    231 
    232 4 The GCC low-level runtime library
    233 ***********************************
    234 
    235 GCC provides a low-level runtime library, `libgcc.a' or `libgcc_s.so.1'
    236 on some platforms.  GCC generates calls to routines in this library
    237 automatically, whenever it needs to perform some operation that is too
    238 complicated to emit inline code for.
    239 
    240  Most of the routines in `libgcc' handle arithmetic operations that the
    241 target processor cannot perform directly.  This includes integer
    242 multiply and divide on some machines, and all floating-point and
    243 fixed-point operations on other machines.  `libgcc' also includes
    244 routines for exception handling, and a handful of miscellaneous
    245 operations.
    246 
    247  Some of these routines can be defined in mostly machine-independent C.
    248 Others must be hand-written in assembly language for each processor
    249 that needs them.
    250 
    251  GCC will also generate calls to C library routines, such as `memcpy'
    252 and `memset', in some cases.  The set of routines that GCC may possibly
    253 use is documented in *Note Other Builtins: (gcc)Other Builtins.
    254 
    255  These routines take arguments and return values of a specific machine
    256 mode, not a specific C type.  *Note Machine Modes::, for an explanation
    257 of this concept.  For illustrative purposes, in this chapter the
    258 floating point type `float' is assumed to correspond to `SFmode';
    259 `double' to `DFmode'; and `long double' to both `TFmode' and `XFmode'.
    260 Similarly, the integer types `int' and `unsigned int' correspond to
    261 `SImode'; `long' and `unsigned long' to `DImode'; and `long long' and
    262 `unsigned long long' to `TImode'.
    263 
    264 * Menu:
    265 
    266 * Integer library routines::
    267 * Soft float library routines::
    268 * Decimal float library routines::
    269 * Fixed-point fractional library routines::
    270 * Exception handling routines::
    271 * Miscellaneous routines::
    272 
    273 
    274 File: gccint.info,  Node: Integer library routines,  Next: Soft float library routines,  Up: Libgcc
    275 
    276 4.1 Routines for integer arithmetic
    277 ===================================
    278 
    279 The integer arithmetic routines are used on platforms that don't provide
    280 hardware support for arithmetic operations on some modes.
    281 
    282 4.1.1 Arithmetic functions
    283 --------------------------
    284 
    285  -- Runtime Function: int __ashlsi3 (int A, int B)
    286  -- Runtime Function: long __ashldi3 (long A, int B)
    287  -- Runtime Function: long long __ashlti3 (long long A, int B)
    288      These functions return the result of shifting A left by B bits.
    289 
    290  -- Runtime Function: int __ashrsi3 (int A, int B)
    291  -- Runtime Function: long __ashrdi3 (long A, int B)
    292  -- Runtime Function: long long __ashrti3 (long long A, int B)
    293      These functions return the result of arithmetically shifting A
    294      right by B bits.
    295 
    296  -- Runtime Function: int __divsi3 (int A, int B)
    297  -- Runtime Function: long __divdi3 (long A, long B)
    298  -- Runtime Function: long long __divti3 (long long A, long long B)
    299      These functions return the quotient of the signed division of A and
    300      B.
    301 
    302  -- Runtime Function: int __lshrsi3 (int A, int B)
    303  -- Runtime Function: long __lshrdi3 (long A, int B)
    304  -- Runtime Function: long long __lshrti3 (long long A, int B)
    305      These functions return the result of logically shifting A right by
    306      B bits.
    307 
    308  -- Runtime Function: int __modsi3 (int A, int B)
    309  -- Runtime Function: long __moddi3 (long A, long B)
    310  -- Runtime Function: long long __modti3 (long long A, long long B)
    311      These functions return the remainder of the signed division of A
    312      and B.
    313 
    314  -- Runtime Function: int __mulsi3 (int A, int B)
    315  -- Runtime Function: long __muldi3 (long A, long B)
    316  -- Runtime Function: long long __multi3 (long long A, long long B)
    317      These functions return the product of A and B.
    318 
    319  -- Runtime Function: long __negdi2 (long A)
    320  -- Runtime Function: long long __negti2 (long long A)
    321      These functions return the negation of A.
    322 
    323  -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned
    324           int B)
    325  -- Runtime Function: unsigned long __udivdi3 (unsigned long A,
    326           unsigned long B)
    327  -- Runtime Function: unsigned long long __udivti3 (unsigned long long
    328           A, unsigned long long B)
    329      These functions return the quotient of the unsigned division of A
    330      and B.
    331 
    332  -- Runtime Function: unsigned long __udivmoddi3 (unsigned long A,
    333           unsigned long B, unsigned long *C)
    334  -- Runtime Function: unsigned long long __udivti3 (unsigned long long
    335           A, unsigned long long B, unsigned long long *C)
    336      These functions calculate both the quotient and remainder of the
    337      unsigned division of A and B.  The return value is the quotient,
    338      and the remainder is placed in variable pointed to by C.
    339 
    340  -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned
    341           int B)
    342  -- Runtime Function: unsigned long __umoddi3 (unsigned long A,
    343           unsigned long B)
    344  -- Runtime Function: unsigned long long __umodti3 (unsigned long long
    345           A, unsigned long long B)
    346      These functions return the remainder of the unsigned division of A
    347      and B.
    348 
    349 4.1.2 Comparison functions
    350 --------------------------
    351 
    352 The following functions implement integral comparisons.  These functions
    353 implement a low-level compare, upon which the higher level comparison
    354 operators (such as less than and greater than or equal to) can be
    355 constructed.  The returned values lie in the range zero to two, to allow
    356 the high-level operators to be implemented by testing the returned
    357 result using either signed or unsigned comparison.
    358 
    359  -- Runtime Function: int __cmpdi2 (long A, long B)
    360  -- Runtime Function: int __cmpti2 (long long A, long long B)
    361      These functions perform a signed comparison of A and B.  If A is
    362      less than B, they return 0; if A is greater than B, they return 2;
    363      and if A and B are equal they return 1.
    364 
    365  -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B)
    366  -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned
    367           long long B)
    368      These functions perform an unsigned comparison of A and B.  If A
    369      is less than B, they return 0; if A is greater than B, they return
    370      2; and if A and B are equal they return 1.
    371 
    372 4.1.3 Trapping arithmetic functions
    373 -----------------------------------
    374 
    375 The following functions implement trapping arithmetic.  These functions
    376 call the libc function `abort' upon signed arithmetic overflow.
    377 
    378  -- Runtime Function: int __absvsi2 (int A)
    379  -- Runtime Function: long __absvdi2 (long A)
    380      These functions return the absolute value of A.
    381 
    382  -- Runtime Function: int __addvsi3 (int A, int B)
    383  -- Runtime Function: long __addvdi3 (long A, long B)
    384      These functions return the sum of A and B; that is `A + B'.
    385 
    386  -- Runtime Function: int __mulvsi3 (int A, int B)
    387  -- Runtime Function: long __mulvdi3 (long A, long B)
    388      The functions return the product of A and B; that is `A * B'.
    389 
    390  -- Runtime Function: int __negvsi2 (int A)
    391  -- Runtime Function: long __negvdi2 (long A)
    392      These functions return the negation of A; that is `-A'.
    393 
    394  -- Runtime Function: int __subvsi3 (int A, int B)
    395  -- Runtime Function: long __subvdi3 (long A, long B)
    396      These functions return the difference between B and A; that is `A
    397      - B'.
    398 
    399 4.1.4 Bit operations
    400 --------------------
    401 
    402  -- Runtime Function: int __clzsi2 (int A)
    403  -- Runtime Function: int __clzdi2 (long A)
    404  -- Runtime Function: int __clzti2 (long long A)
    405      These functions return the number of leading 0-bits in A, starting
    406      at the most significant bit position.  If A is zero, the result is
    407      undefined.
    408 
    409  -- Runtime Function: int __ctzsi2 (int A)
    410  -- Runtime Function: int __ctzdi2 (long A)
    411  -- Runtime Function: int __ctzti2 (long long A)
    412      These functions return the number of trailing 0-bits in A, starting
    413      at the least significant bit position.  If A is zero, the result is
    414      undefined.
    415 
    416  -- Runtime Function: int __ffsdi2 (long A)
    417  -- Runtime Function: int __ffsti2 (long long A)
    418      These functions return the index of the least significant 1-bit in
    419      A, or the value zero if A is zero.  The least significant bit is
    420      index one.
    421 
    422  -- Runtime Function: int __paritysi2 (int A)
    423  -- Runtime Function: int __paritydi2 (long A)
    424  -- Runtime Function: int __parityti2 (long long A)
    425      These functions return the value zero if the number of bits set in
    426      A is even, and the value one otherwise.
    427 
    428  -- Runtime Function: int __popcountsi2 (int A)
    429  -- Runtime Function: int __popcountdi2 (long A)
    430  -- Runtime Function: int __popcountti2 (long long A)
    431      These functions return the number of bits set in A.
    432 
    433  -- Runtime Function: int32_t __bswapsi2 (int32_t A)
    434  -- Runtime Function: int64_t __bswapdi2 (int64_t A)
    435      These functions return the A byteswapped.
    436 
    437 
    438 File: gccint.info,  Node: Soft float library routines,  Next: Decimal float library routines,  Prev: Integer library routines,  Up: Libgcc
    439 
    440 4.2 Routines for floating point emulation
    441 =========================================
    442 
    443 The software floating point library is used on machines which do not
    444 have hardware support for floating point.  It is also used whenever
    445 `-msoft-float' is used to disable generation of floating point
    446 instructions.  (Not all targets support this switch.)
    447 
    448  For compatibility with other compilers, the floating point emulation
    449 routines can be renamed with the `DECLARE_LIBRARY_RENAMES' macro (*note
    450 Library Calls::).  In this section, the default names are used.
    451 
    452  Presently the library does not support `XFmode', which is used for
    453 `long double' on some architectures.
    454 
    455 4.2.1 Arithmetic functions
    456 --------------------------
    457 
    458  -- Runtime Function: float __addsf3 (float A, float B)
    459  -- Runtime Function: double __adddf3 (double A, double B)
    460  -- Runtime Function: long double __addtf3 (long double A, long double
    461           B)
    462  -- Runtime Function: long double __addxf3 (long double A, long double
    463           B)
    464      These functions return the sum of A and B.
    465 
    466  -- Runtime Function: float __subsf3 (float A, float B)
    467  -- Runtime Function: double __subdf3 (double A, double B)
    468  -- Runtime Function: long double __subtf3 (long double A, long double
    469           B)
    470  -- Runtime Function: long double __subxf3 (long double A, long double
    471           B)
    472      These functions return the difference between B and A; that is,
    473      A - B.
    474 
    475  -- Runtime Function: float __mulsf3 (float A, float B)
    476  -- Runtime Function: double __muldf3 (double A, double B)
    477  -- Runtime Function: long double __multf3 (long double A, long double
    478           B)
    479  -- Runtime Function: long double __mulxf3 (long double A, long double
    480           B)
    481      These functions return the product of A and B.
    482 
    483  -- Runtime Function: float __divsf3 (float A, float B)
    484  -- Runtime Function: double __divdf3 (double A, double B)
    485  -- Runtime Function: long double __divtf3 (long double A, long double
    486           B)
    487  -- Runtime Function: long double __divxf3 (long double A, long double
    488           B)
    489      These functions return the quotient of A and B; that is, A / B.
    490 
    491  -- Runtime Function: float __negsf2 (float A)
    492  -- Runtime Function: double __negdf2 (double A)
    493  -- Runtime Function: long double __negtf2 (long double A)
    494  -- Runtime Function: long double __negxf2 (long double A)
    495      These functions return the negation of A.  They simply flip the
    496      sign bit, so they can produce negative zero and negative NaN.
    497 
    498 4.2.2 Conversion functions
    499 --------------------------
    500 
    501  -- Runtime Function: double __extendsfdf2 (float A)
    502  -- Runtime Function: long double __extendsftf2 (float A)
    503  -- Runtime Function: long double __extendsfxf2 (float A)
    504  -- Runtime Function: long double __extenddftf2 (double A)
    505  -- Runtime Function: long double __extenddfxf2 (double A)
    506      These functions extend A to the wider mode of their return type.
    507 
    508  -- Runtime Function: double __truncxfdf2 (long double A)
    509  -- Runtime Function: double __trunctfdf2 (long double A)
    510  -- Runtime Function: float __truncxfsf2 (long double A)
    511  -- Runtime Function: float __trunctfsf2 (long double A)
    512  -- Runtime Function: float __truncdfsf2 (double A)
    513      These functions truncate A to the narrower mode of their return
    514      type, rounding toward zero.
    515 
    516  -- Runtime Function: int __fixsfsi (float A)
    517  -- Runtime Function: int __fixdfsi (double A)
    518  -- Runtime Function: int __fixtfsi (long double A)
    519  -- Runtime Function: int __fixxfsi (long double A)
    520      These functions convert A to a signed integer, rounding toward
    521      zero.
    522 
    523  -- Runtime Function: long __fixsfdi (float A)
    524  -- Runtime Function: long __fixdfdi (double A)
    525  -- Runtime Function: long __fixtfdi (long double A)
    526  -- Runtime Function: long __fixxfdi (long double A)
    527      These functions convert A to a signed long, rounding toward zero.
    528 
    529  -- Runtime Function: long long __fixsfti (float A)
    530  -- Runtime Function: long long __fixdfti (double A)
    531  -- Runtime Function: long long __fixtfti (long double A)
    532  -- Runtime Function: long long __fixxfti (long double A)
    533      These functions convert A to a signed long long, rounding toward
    534      zero.
    535 
    536  -- Runtime Function: unsigned int __fixunssfsi (float A)
    537  -- Runtime Function: unsigned int __fixunsdfsi (double A)
    538  -- Runtime Function: unsigned int __fixunstfsi (long double A)
    539  -- Runtime Function: unsigned int __fixunsxfsi (long double A)
    540      These functions convert A to an unsigned integer, rounding toward
    541      zero.  Negative values all become zero.
    542 
    543  -- Runtime Function: unsigned long __fixunssfdi (float A)
    544  -- Runtime Function: unsigned long __fixunsdfdi (double A)
    545  -- Runtime Function: unsigned long __fixunstfdi (long double A)
    546  -- Runtime Function: unsigned long __fixunsxfdi (long double A)
    547      These functions convert A to an unsigned long, rounding toward
    548      zero.  Negative values all become zero.
    549 
    550  -- Runtime Function: unsigned long long __fixunssfti (float A)
    551  -- Runtime Function: unsigned long long __fixunsdfti (double A)
    552  -- Runtime Function: unsigned long long __fixunstfti (long double A)
    553  -- Runtime Function: unsigned long long __fixunsxfti (long double A)
    554      These functions convert A to an unsigned long long, rounding
    555      toward zero.  Negative values all become zero.
    556 
    557  -- Runtime Function: float __floatsisf (int I)
    558  -- Runtime Function: double __floatsidf (int I)
    559  -- Runtime Function: long double __floatsitf (int I)
    560  -- Runtime Function: long double __floatsixf (int I)
    561      These functions convert I, a signed integer, to floating point.
    562 
    563  -- Runtime Function: float __floatdisf (long I)
    564  -- Runtime Function: double __floatdidf (long I)
    565  -- Runtime Function: long double __floatditf (long I)
    566  -- Runtime Function: long double __floatdixf (long I)
    567      These functions convert I, a signed long, to floating point.
    568 
    569  -- Runtime Function: float __floattisf (long long I)
    570  -- Runtime Function: double __floattidf (long long I)
    571  -- Runtime Function: long double __floattitf (long long I)
    572  -- Runtime Function: long double __floattixf (long long I)
    573      These functions convert I, a signed long long, to floating point.
    574 
    575  -- Runtime Function: float __floatunsisf (unsigned int I)
    576  -- Runtime Function: double __floatunsidf (unsigned int I)
    577  -- Runtime Function: long double __floatunsitf (unsigned int I)
    578  -- Runtime Function: long double __floatunsixf (unsigned int I)
    579      These functions convert I, an unsigned integer, to floating point.
    580 
    581  -- Runtime Function: float __floatundisf (unsigned long I)
    582  -- Runtime Function: double __floatundidf (unsigned long I)
    583  -- Runtime Function: long double __floatunditf (unsigned long I)
    584  -- Runtime Function: long double __floatundixf (unsigned long I)
    585      These functions convert I, an unsigned long, to floating point.
    586 
    587  -- Runtime Function: float __floatuntisf (unsigned long long I)
    588  -- Runtime Function: double __floatuntidf (unsigned long long I)
    589  -- Runtime Function: long double __floatuntitf (unsigned long long I)
    590  -- Runtime Function: long double __floatuntixf (unsigned long long I)
    591      These functions convert I, an unsigned long long, to floating
    592      point.
    593 
    594 4.2.3 Comparison functions
    595 --------------------------
    596 
    597 There are two sets of basic comparison functions.
    598 
    599  -- Runtime Function: int __cmpsf2 (float A, float B)
    600  -- Runtime Function: int __cmpdf2 (double A, double B)
    601  -- Runtime Function: int __cmptf2 (long double A, long double B)
    602      These functions calculate a <=> b.  That is, if A is less than B,
    603      they return -1; if A is greater than B, they return 1; and if A
    604      and B are equal they return 0.  If either argument is NaN they
    605      return 1, but you should not rely on this; if NaN is a
    606      possibility, use one of the higher-level comparison functions.
    607 
    608  -- Runtime Function: int __unordsf2 (float A, float B)
    609  -- Runtime Function: int __unorddf2 (double A, double B)
    610  -- Runtime Function: int __unordtf2 (long double A, long double B)
    611      These functions return a nonzero value if either argument is NaN,
    612      otherwise 0.
    613 
    614  There is also a complete group of higher level functions which
    615 correspond directly to comparison operators.  They implement the ISO C
    616 semantics for floating-point comparisons, taking NaN into account.  Pay
    617 careful attention to the return values defined for each set.  Under the
    618 hood, all of these routines are implemented as
    619 
    620        if (__unordXf2 (a, b))
    621          return E;
    622        return __cmpXf2 (a, b);
    623 
    624 where E is a constant chosen to give the proper behavior for NaN.
    625 Thus, the meaning of the return value is different for each set.  Do
    626 not rely on this implementation; only the semantics documented below
    627 are guaranteed.
    628 
    629  -- Runtime Function: int __eqsf2 (float A, float B)
    630  -- Runtime Function: int __eqdf2 (double A, double B)
    631  -- Runtime Function: int __eqtf2 (long double A, long double B)
    632      These functions return zero if neither argument is NaN, and A and
    633      B are equal.
    634 
    635  -- Runtime Function: int __nesf2 (float A, float B)
    636  -- Runtime Function: int __nedf2 (double A, double B)
    637  -- Runtime Function: int __netf2 (long double A, long double B)
    638      These functions return a nonzero value if either argument is NaN,
    639      or if A and B are unequal.
    640 
    641  -- Runtime Function: int __gesf2 (float A, float B)
    642  -- Runtime Function: int __gedf2 (double A, double B)
    643  -- Runtime Function: int __getf2 (long double A, long double B)
    644      These functions return a value greater than or equal to zero if
    645      neither argument is NaN, and A is greater than or equal to B.
    646 
    647  -- Runtime Function: int __ltsf2 (float A, float B)
    648  -- Runtime Function: int __ltdf2 (double A, double B)
    649  -- Runtime Function: int __lttf2 (long double A, long double B)
    650      These functions return a value less than zero if neither argument
    651      is NaN, and A is strictly less than B.
    652 
    653  -- Runtime Function: int __lesf2 (float A, float B)
    654  -- Runtime Function: int __ledf2 (double A, double B)
    655  -- Runtime Function: int __letf2 (long double A, long double B)
    656      These functions return a value less than or equal to zero if
    657      neither argument is NaN, and A is less than or equal to B.
    658 
    659  -- Runtime Function: int __gtsf2 (float A, float B)
    660  -- Runtime Function: int __gtdf2 (double A, double B)
    661  -- Runtime Function: int __gttf2 (long double A, long double B)
    662      These functions return a value greater than zero if neither
    663      argument is NaN, and A is strictly greater than B.
    664 
    665 4.2.4 Other floating-point functions
    666 ------------------------------------
    667 
    668  -- Runtime Function: float __powisf2 (float A, int B)
    669  -- Runtime Function: double __powidf2 (double A, int B)
    670  -- Runtime Function: long double __powitf2 (long double A, int B)
    671  -- Runtime Function: long double __powixf2 (long double A, int B)
    672      These functions convert raise A to the power B.
    673 
    674  -- Runtime Function: complex float __mulsc3 (float A, float B, float
    675           C, float D)
    676  -- Runtime Function: complex double __muldc3 (double A, double B,
    677           double C, double D)
    678  -- Runtime Function: complex long double __multc3 (long double A, long
    679           double B, long double C, long double D)
    680  -- Runtime Function: complex long double __mulxc3 (long double A, long
    681           double B, long double C, long double D)
    682      These functions return the product of A + iB and C + iD, following
    683      the rules of C99 Annex G.
    684 
    685  -- Runtime Function: complex float __divsc3 (float A, float B, float
    686           C, float D)
    687  -- Runtime Function: complex double __divdc3 (double A, double B,
    688           double C, double D)
    689  -- Runtime Function: complex long double __divtc3 (long double A, long
    690           double B, long double C, long double D)
    691  -- Runtime Function: complex long double __divxc3 (long double A, long
    692           double B, long double C, long double D)
    693      These functions return the quotient of A + iB and C + iD (i.e., (A
    694      + iB) / (C + iD)), following the rules of C99 Annex G.
    695 
    696 
    697 File: gccint.info,  Node: Decimal float library routines,  Next: Fixed-point fractional library routines,  Prev: Soft float library routines,  Up: Libgcc
    698 
    699 4.3 Routines for decimal floating point emulation
    700 =================================================
    701 
    702 The software decimal floating point library implements IEEE 754R
    703 decimal floating point arithmetic and is only activated on selected
    704 targets.
    705 
    706  The software decimal floating point library supports either DPD
    707 (Densely Packed Decimal) or BID (Binary Integer Decimal) encoding as
    708 selected at configure time.
    709 
    710 4.3.1 Arithmetic functions
    711 --------------------------
    712 
    713  -- Runtime Function: _Decimal32 __dpd_addsd3 (_Decimal32 A, _Decimal32
    714           B)
    715  -- Runtime Function: _Decimal32 __bid_addsd3 (_Decimal32 A, _Decimal32
    716           B)
    717  -- Runtime Function: _Decimal64 __dpd_adddd3 (_Decimal64 A, _Decimal64
    718           B)
    719  -- Runtime Function: _Decimal64 __bid_adddd3 (_Decimal64 A, _Decimal64
    720           B)
    721  -- Runtime Function: _Decimal128 __dpd_addtd3 (_Decimal128 A,
    722           _Decimal128 B)
    723  -- Runtime Function: _Decimal128 __bid_addtd3 (_Decimal128 A,
    724           _Decimal128 B)
    725      These functions return the sum of A and B.
    726 
    727  -- Runtime Function: _Decimal32 __dpd_subsd3 (_Decimal32 A, _Decimal32
    728           B)
    729  -- Runtime Function: _Decimal32 __bid_subsd3 (_Decimal32 A, _Decimal32
    730           B)
    731  -- Runtime Function: _Decimal64 __dpd_subdd3 (_Decimal64 A, _Decimal64
    732           B)
    733  -- Runtime Function: _Decimal64 __bid_subdd3 (_Decimal64 A, _Decimal64
    734           B)
    735  -- Runtime Function: _Decimal128 __dpd_subtd3 (_Decimal128 A,
    736           _Decimal128 B)
    737  -- Runtime Function: _Decimal128 __bid_subtd3 (_Decimal128 A,
    738           _Decimal128 B)
    739      These functions return the difference between B and A; that is,
    740      A - B.
    741 
    742  -- Runtime Function: _Decimal32 __dpd_mulsd3 (_Decimal32 A, _Decimal32
    743           B)
    744  -- Runtime Function: _Decimal32 __bid_mulsd3 (_Decimal32 A, _Decimal32
    745           B)
    746  -- Runtime Function: _Decimal64 __dpd_muldd3 (_Decimal64 A, _Decimal64
    747           B)
    748  -- Runtime Function: _Decimal64 __bid_muldd3 (_Decimal64 A, _Decimal64
    749           B)
    750  -- Runtime Function: _Decimal128 __dpd_multd3 (_Decimal128 A,
    751           _Decimal128 B)
    752  -- Runtime Function: _Decimal128 __bid_multd3 (_Decimal128 A,
    753           _Decimal128 B)
    754      These functions return the product of A and B.
    755 
    756  -- Runtime Function: _Decimal32 __dpd_divsd3 (_Decimal32 A, _Decimal32
    757           B)
    758  -- Runtime Function: _Decimal32 __bid_divsd3 (_Decimal32 A, _Decimal32
    759           B)
    760  -- Runtime Function: _Decimal64 __dpd_divdd3 (_Decimal64 A, _Decimal64
    761           B)
    762  -- Runtime Function: _Decimal64 __bid_divdd3 (_Decimal64 A, _Decimal64
    763           B)
    764  -- Runtime Function: _Decimal128 __dpd_divtd3 (_Decimal128 A,
    765           _Decimal128 B)
    766  -- Runtime Function: _Decimal128 __bid_divtd3 (_Decimal128 A,
    767           _Decimal128 B)
    768      These functions return the quotient of A and B; that is, A / B.
    769 
    770  -- Runtime Function: _Decimal32 __dpd_negsd2 (_Decimal32 A)
    771  -- Runtime Function: _Decimal32 __bid_negsd2 (_Decimal32 A)
    772  -- Runtime Function: _Decimal64 __dpd_negdd2 (_Decimal64 A)
    773  -- Runtime Function: _Decimal64 __bid_negdd2 (_Decimal64 A)
    774  -- Runtime Function: _Decimal128 __dpd_negtd2 (_Decimal128 A)
    775  -- Runtime Function: _Decimal128 __bid_negtd2 (_Decimal128 A)
    776      These functions return the negation of A.  They simply flip the
    777      sign bit, so they can produce negative zero and negative NaN.
    778 
    779 4.3.2 Conversion functions
    780 --------------------------
    781 
    782  -- Runtime Function: _Decimal64 __dpd_extendsddd2 (_Decimal32 A)
    783  -- Runtime Function: _Decimal64 __bid_extendsddd2 (_Decimal32 A)
    784  -- Runtime Function: _Decimal128 __dpd_extendsdtd2 (_Decimal32 A)
    785  -- Runtime Function: _Decimal128 __bid_extendsdtd2 (_Decimal32 A)
    786  -- Runtime Function: _Decimal128 __dpd_extendddtd2 (_Decimal64 A)
    787  -- Runtime Function: _Decimal128 __bid_extendddtd2 (_Decimal64 A)
    788  -- Runtime Function: _Decimal32 __dpd_truncddsd2 (_Decimal64 A)
    789  -- Runtime Function: _Decimal32 __bid_truncddsd2 (_Decimal64 A)
    790  -- Runtime Function: _Decimal32 __dpd_trunctdsd2 (_Decimal128 A)
    791  -- Runtime Function: _Decimal32 __bid_trunctdsd2 (_Decimal128 A)
    792  -- Runtime Function: _Decimal64 __dpd_trunctddd2 (_Decimal128 A)
    793  -- Runtime Function: _Decimal64 __bid_trunctddd2 (_Decimal128 A)
    794      These functions convert the value A from one decimal floating type
    795      to another.
    796 
    797  -- Runtime Function: _Decimal64 __dpd_extendsfdd (float A)
    798  -- Runtime Function: _Decimal64 __bid_extendsfdd (float A)
    799  -- Runtime Function: _Decimal128 __dpd_extendsftd (float A)
    800  -- Runtime Function: _Decimal128 __bid_extendsftd (float A)
    801  -- Runtime Function: _Decimal128 __dpd_extenddftd (double A)
    802  -- Runtime Function: _Decimal128 __bid_extenddftd (double A)
    803  -- Runtime Function: _Decimal128 __dpd_extendxftd (long double A)
    804  -- Runtime Function: _Decimal128 __bid_extendxftd (long double A)
    805  -- Runtime Function: _Decimal32 __dpd_truncdfsd (double A)
    806  -- Runtime Function: _Decimal32 __bid_truncdfsd (double A)
    807  -- Runtime Function: _Decimal32 __dpd_truncxfsd (long double A)
    808  -- Runtime Function: _Decimal32 __bid_truncxfsd (long double A)
    809  -- Runtime Function: _Decimal32 __dpd_trunctfsd (long double A)
    810  -- Runtime Function: _Decimal32 __bid_trunctfsd (long double A)
    811  -- Runtime Function: _Decimal64 __dpd_truncxfdd (long double A)
    812  -- Runtime Function: _Decimal64 __bid_truncxfdd (long double A)
    813  -- Runtime Function: _Decimal64 __dpd_trunctfdd (long double A)
    814  -- Runtime Function: _Decimal64 __bid_trunctfdd (long double A)
    815      These functions convert the value of A from a binary floating type
    816      to a decimal floating type of a different size.
    817 
    818  -- Runtime Function: float __dpd_truncddsf (_Decimal64 A)
    819  -- Runtime Function: float __bid_truncddsf (_Decimal64 A)
    820  -- Runtime Function: float __dpd_trunctdsf (_Decimal128 A)
    821  -- Runtime Function: float __bid_trunctdsf (_Decimal128 A)
    822  -- Runtime Function: double __dpd_extendsddf (_Decimal32 A)
    823  -- Runtime Function: double __bid_extendsddf (_Decimal32 A)
    824  -- Runtime Function: double __dpd_trunctddf (_Decimal128 A)
    825  -- Runtime Function: double __bid_trunctddf (_Decimal128 A)
    826  -- Runtime Function: long double __dpd_extendsdxf (_Decimal32 A)
    827  -- Runtime Function: long double __bid_extendsdxf (_Decimal32 A)
    828  -- Runtime Function: long double __dpd_extendddxf (_Decimal64 A)
    829  -- Runtime Function: long double __bid_extendddxf (_Decimal64 A)
    830  -- Runtime Function: long double __dpd_trunctdxf (_Decimal128 A)
    831  -- Runtime Function: long double __bid_trunctdxf (_Decimal128 A)
    832  -- Runtime Function: long double __dpd_extendsdtf (_Decimal32 A)
    833  -- Runtime Function: long double __bid_extendsdtf (_Decimal32 A)
    834  -- Runtime Function: long double __dpd_extendddtf (_Decimal64 A)
    835  -- Runtime Function: long double __bid_extendddtf (_Decimal64 A)
    836      These functions convert the value of A from a decimal floating type
    837      to a binary floating type of a different size.
    838 
    839  -- Runtime Function: _Decimal32 __dpd_extendsfsd (float A)
    840  -- Runtime Function: _Decimal32 __bid_extendsfsd (float A)
    841  -- Runtime Function: _Decimal64 __dpd_extenddfdd (double A)
    842  -- Runtime Function: _Decimal64 __bid_extenddfdd (double A)
    843  -- Runtime Function: _Decimal128 __dpd_extendtftd (long double A)
    844  -- Runtime Function: _Decimal128 __bid_extendtftd (long double A)
    845  -- Runtime Function: float __dpd_truncsdsf (_Decimal32 A)
    846  -- Runtime Function: float __bid_truncsdsf (_Decimal32 A)
    847  -- Runtime Function: double __dpd_truncdddf (_Decimal64 A)
    848  -- Runtime Function: double __bid_truncdddf (_Decimal64 A)
    849  -- Runtime Function: long double __dpd_trunctdtf (_Decimal128 A)
    850  -- Runtime Function: long double __bid_trunctdtf (_Decimal128 A)
    851      These functions convert the value of A between decimal and binary
    852      floating types of the same size.
    853 
    854  -- Runtime Function: int __dpd_fixsdsi (_Decimal32 A)
    855  -- Runtime Function: int __bid_fixsdsi (_Decimal32 A)
    856  -- Runtime Function: int __dpd_fixddsi (_Decimal64 A)
    857  -- Runtime Function: int __bid_fixddsi (_Decimal64 A)
    858  -- Runtime Function: int __dpd_fixtdsi (_Decimal128 A)
    859  -- Runtime Function: int __bid_fixtdsi (_Decimal128 A)
    860      These functions convert A to a signed integer.
    861 
    862  -- Runtime Function: long __dpd_fixsddi (_Decimal32 A)
    863  -- Runtime Function: long __bid_fixsddi (_Decimal32 A)
    864  -- Runtime Function: long __dpd_fixdddi (_Decimal64 A)
    865  -- Runtime Function: long __bid_fixdddi (_Decimal64 A)
    866  -- Runtime Function: long __dpd_fixtddi (_Decimal128 A)
    867  -- Runtime Function: long __bid_fixtddi (_Decimal128 A)
    868      These functions convert A to a signed long.
    869 
    870  -- Runtime Function: unsigned int __dpd_fixunssdsi (_Decimal32 A)
    871  -- Runtime Function: unsigned int __bid_fixunssdsi (_Decimal32 A)
    872  -- Runtime Function: unsigned int __dpd_fixunsddsi (_Decimal64 A)
    873  -- Runtime Function: unsigned int __bid_fixunsddsi (_Decimal64 A)
    874  -- Runtime Function: unsigned int __dpd_fixunstdsi (_Decimal128 A)
    875  -- Runtime Function: unsigned int __bid_fixunstdsi (_Decimal128 A)
    876      These functions convert A to an unsigned integer.  Negative values
    877      all become zero.
    878 
    879  -- Runtime Function: unsigned long __dpd_fixunssddi (_Decimal32 A)
    880  -- Runtime Function: unsigned long __bid_fixunssddi (_Decimal32 A)
    881  -- Runtime Function: unsigned long __dpd_fixunsdddi (_Decimal64 A)
    882  -- Runtime Function: unsigned long __bid_fixunsdddi (_Decimal64 A)
    883  -- Runtime Function: unsigned long __dpd_fixunstddi (_Decimal128 A)
    884  -- Runtime Function: unsigned long __bid_fixunstddi (_Decimal128 A)
    885      These functions convert A to an unsigned long.  Negative values
    886      all become zero.
    887 
    888  -- Runtime Function: _Decimal32 __dpd_floatsisd (int I)
    889  -- Runtime Function: _Decimal32 __bid_floatsisd (int I)
    890  -- Runtime Function: _Decimal64 __dpd_floatsidd (int I)
    891  -- Runtime Function: _Decimal64 __bid_floatsidd (int I)
    892  -- Runtime Function: _Decimal128 __dpd_floatsitd (int I)
    893  -- Runtime Function: _Decimal128 __bid_floatsitd (int I)
    894      These functions convert I, a signed integer, to decimal floating
    895      point.
    896 
    897  -- Runtime Function: _Decimal32 __dpd_floatdisd (long I)
    898  -- Runtime Function: _Decimal32 __bid_floatdisd (long I)
    899  -- Runtime Function: _Decimal64 __dpd_floatdidd (long I)
    900  -- Runtime Function: _Decimal64 __bid_floatdidd (long I)
    901  -- Runtime Function: _Decimal128 __dpd_floatditd (long I)
    902  -- Runtime Function: _Decimal128 __bid_floatditd (long I)
    903      These functions convert I, a signed long, to decimal floating
    904      point.
    905 
    906  -- Runtime Function: _Decimal32 __dpd_floatunssisd (unsigned int I)
    907  -- Runtime Function: _Decimal32 __bid_floatunssisd (unsigned int I)
    908  -- Runtime Function: _Decimal64 __dpd_floatunssidd (unsigned int I)
    909  -- Runtime Function: _Decimal64 __bid_floatunssidd (unsigned int I)
    910  -- Runtime Function: _Decimal128 __dpd_floatunssitd (unsigned int I)
    911  -- Runtime Function: _Decimal128 __bid_floatunssitd (unsigned int I)
    912      These functions convert I, an unsigned integer, to decimal
    913      floating point.
    914 
    915  -- Runtime Function: _Decimal32 __dpd_floatunsdisd (unsigned long I)
    916  -- Runtime Function: _Decimal32 __bid_floatunsdisd (unsigned long I)
    917  -- Runtime Function: _Decimal64 __dpd_floatunsdidd (unsigned long I)
    918  -- Runtime Function: _Decimal64 __bid_floatunsdidd (unsigned long I)
    919  -- Runtime Function: _Decimal128 __dpd_floatunsditd (unsigned long I)
    920  -- Runtime Function: _Decimal128 __bid_floatunsditd (unsigned long I)
    921      These functions convert I, an unsigned long, to decimal floating
    922      point.
    923 
    924 4.3.3 Comparison functions
    925 --------------------------
    926 
    927  -- Runtime Function: int __dpd_unordsd2 (_Decimal32 A, _Decimal32 B)
    928  -- Runtime Function: int __bid_unordsd2 (_Decimal32 A, _Decimal32 B)
    929  -- Runtime Function: int __dpd_unorddd2 (_Decimal64 A, _Decimal64 B)
    930  -- Runtime Function: int __bid_unorddd2 (_Decimal64 A, _Decimal64 B)
    931  -- Runtime Function: int __dpd_unordtd2 (_Decimal128 A, _Decimal128 B)
    932  -- Runtime Function: int __bid_unordtd2 (_Decimal128 A, _Decimal128 B)
    933      These functions return a nonzero value if either argument is NaN,
    934      otherwise 0.
    935 
    936  There is also a complete group of higher level functions which
    937 correspond directly to comparison operators.  They implement the ISO C
    938 semantics for floating-point comparisons, taking NaN into account.  Pay
    939 careful attention to the return values defined for each set.  Under the
    940 hood, all of these routines are implemented as
    941 
    942        if (__bid_unordXd2 (a, b))
    943          return E;
    944        return __bid_cmpXd2 (a, b);
    945 
    946 where E is a constant chosen to give the proper behavior for NaN.
    947 Thus, the meaning of the return value is different for each set.  Do
    948 not rely on this implementation; only the semantics documented below
    949 are guaranteed.
    950 
    951  -- Runtime Function: int __dpd_eqsd2 (_Decimal32 A, _Decimal32 B)
    952  -- Runtime Function: int __bid_eqsd2 (_Decimal32 A, _Decimal32 B)
    953  -- Runtime Function: int __dpd_eqdd2 (_Decimal64 A, _Decimal64 B)
    954  -- Runtime Function: int __bid_eqdd2 (_Decimal64 A, _Decimal64 B)
    955  -- Runtime Function: int __dpd_eqtd2 (_Decimal128 A, _Decimal128 B)
    956  -- Runtime Function: int __bid_eqtd2 (_Decimal128 A, _Decimal128 B)
    957      These functions return zero if neither argument is NaN, and A and
    958      B are equal.
    959 
    960  -- Runtime Function: int __dpd_nesd2 (_Decimal32 A, _Decimal32 B)
    961  -- Runtime Function: int __bid_nesd2 (_Decimal32 A, _Decimal32 B)
    962  -- Runtime Function: int __dpd_nedd2 (_Decimal64 A, _Decimal64 B)
    963  -- Runtime Function: int __bid_nedd2 (_Decimal64 A, _Decimal64 B)
    964  -- Runtime Function: int __dpd_netd2 (_Decimal128 A, _Decimal128 B)
    965  -- Runtime Function: int __bid_netd2 (_Decimal128 A, _Decimal128 B)
    966      These functions return a nonzero value if either argument is NaN,
    967      or if A and B are unequal.
    968 
    969  -- Runtime Function: int __dpd_gesd2 (_Decimal32 A, _Decimal32 B)
    970  -- Runtime Function: int __bid_gesd2 (_Decimal32 A, _Decimal32 B)
    971  -- Runtime Function: int __dpd_gedd2 (_Decimal64 A, _Decimal64 B)
    972  -- Runtime Function: int __bid_gedd2 (_Decimal64 A, _Decimal64 B)
    973  -- Runtime Function: int __dpd_getd2 (_Decimal128 A, _Decimal128 B)
    974  -- Runtime Function: int __bid_getd2 (_Decimal128 A, _Decimal128 B)
    975      These functions return a value greater than or equal to zero if
    976      neither argument is NaN, and A is greater than or equal to B.
    977 
    978  -- Runtime Function: int __dpd_ltsd2 (_Decimal32 A, _Decimal32 B)
    979  -- Runtime Function: int __bid_ltsd2 (_Decimal32 A, _Decimal32 B)
    980  -- Runtime Function: int __dpd_ltdd2 (_Decimal64 A, _Decimal64 B)
    981  -- Runtime Function: int __bid_ltdd2 (_Decimal64 A, _Decimal64 B)
    982  -- Runtime Function: int __dpd_lttd2 (_Decimal128 A, _Decimal128 B)
    983  -- Runtime Function: int __bid_lttd2 (_Decimal128 A, _Decimal128 B)
    984      These functions return a value less than zero if neither argument
    985      is NaN, and A is strictly less than B.
    986 
    987  -- Runtime Function: int __dpd_lesd2 (_Decimal32 A, _Decimal32 B)
    988  -- Runtime Function: int __bid_lesd2 (_Decimal32 A, _Decimal32 B)
    989  -- Runtime Function: int __dpd_ledd2 (_Decimal64 A, _Decimal64 B)
    990  -- Runtime Function: int __bid_ledd2 (_Decimal64 A, _Decimal64 B)
    991  -- Runtime Function: int __dpd_letd2 (_Decimal128 A, _Decimal128 B)
    992  -- Runtime Function: int __bid_letd2 (_Decimal128 A, _Decimal128 B)
    993      These functions return a value less than or equal to zero if
    994      neither argument is NaN, and A is less than or equal to B.
    995 
    996  -- Runtime Function: int __dpd_gtsd2 (_Decimal32 A, _Decimal32 B)
    997  -- Runtime Function: int __bid_gtsd2 (_Decimal32 A, _Decimal32 B)
    998  -- Runtime Function: int __dpd_gtdd2 (_Decimal64 A, _Decimal64 B)
    999  -- Runtime Function: int __bid_gtdd2 (_Decimal64 A, _Decimal64 B)
   1000  -- Runtime Function: int __dpd_gttd2 (_Decimal128 A, _Decimal128 B)
   1001  -- Runtime Function: int __bid_gttd2 (_Decimal128 A, _Decimal128 B)
   1002      These functions return a value greater than zero if neither
   1003      argument is NaN, and A is strictly greater than B.
   1004 
   1005 
   1006 File: gccint.info,  Node: Fixed-point fractional library routines,  Next: Exception handling routines,  Prev: Decimal float library routines,  Up: Libgcc
   1007 
   1008 4.4 Routines for fixed-point fractional emulation
   1009 =================================================
   1010 
   1011 The software fixed-point library implements fixed-point fractional
   1012 arithmetic, and is only activated on selected targets.
   1013 
   1014  For ease of comprehension `fract' is an alias for the `_Fract' type,
   1015 `accum' an alias for `_Accum', and `sat' an alias for `_Sat'.
   1016 
   1017  For illustrative purposes, in this section the fixed-point fractional
   1018 type `short fract' is assumed to correspond to machine mode `QQmode';
   1019 `unsigned short fract' to `UQQmode'; `fract' to `HQmode';
   1020 `unsigned fract' to `UHQmode'; `long fract' to `SQmode';
   1021 `unsigned long fract' to `USQmode'; `long long fract' to `DQmode'; and
   1022 `unsigned long long fract' to `UDQmode'.  Similarly the fixed-point
   1023 accumulator type `short accum' corresponds to `HAmode';
   1024 `unsigned short accum' to `UHAmode'; `accum' to `SAmode';
   1025 `unsigned accum' to `USAmode'; `long accum' to `DAmode';
   1026 `unsigned long accum' to `UDAmode'; `long long accum' to `TAmode'; and
   1027 `unsigned long long accum' to `UTAmode'.
   1028 
   1029 4.4.1 Arithmetic functions
   1030 --------------------------
   1031 
   1032  -- Runtime Function: short fract __addqq3 (short fract A, short fract
   1033           B)
   1034  -- Runtime Function: fract __addhq3 (fract A, fract B)
   1035  -- Runtime Function: long fract __addsq3 (long fract A, long fract B)
   1036  -- Runtime Function: long long fract __adddq3 (long long fract A, long
   1037           long fract B)
   1038  -- Runtime Function: unsigned short fract __adduqq3 (unsigned short
   1039           fract A, unsigned short fract B)
   1040  -- Runtime Function: unsigned fract __adduhq3 (unsigned fract A,
   1041           unsigned fract B)
   1042  -- Runtime Function: unsigned long fract __addusq3 (unsigned long
   1043           fract A, unsigned long fract B)
   1044  -- Runtime Function: unsigned long long fract __addudq3 (unsigned long
   1045           long fract A, unsigned long long fract B)
   1046  -- Runtime Function: short accum __addha3 (short accum A, short accum
   1047           B)
   1048  -- Runtime Function: accum __addsa3 (accum A, accum B)
   1049  -- Runtime Function: long accum __addda3 (long accum A, long accum B)
   1050  -- Runtime Function: long long accum __addta3 (long long accum A, long
   1051           long accum B)
   1052  -- Runtime Function: unsigned short accum __adduha3 (unsigned short
   1053           accum A, unsigned short accum B)
   1054  -- Runtime Function: unsigned accum __addusa3 (unsigned accum A,
   1055           unsigned accum B)
   1056  -- Runtime Function: unsigned long accum __adduda3 (unsigned long
   1057           accum A, unsigned long accum B)
   1058  -- Runtime Function: unsigned long long accum __adduta3 (unsigned long
   1059           long accum A, unsigned long long accum B)
   1060      These functions return the sum of A and B.
   1061 
   1062  -- Runtime Function: short fract __ssaddqq3 (short fract A, short
   1063           fract B)
   1064  -- Runtime Function: fract __ssaddhq3 (fract A, fract B)
   1065  -- Runtime Function: long fract __ssaddsq3 (long fract A, long fract B)
   1066  -- Runtime Function: long long fract __ssadddq3 (long long fract A,
   1067           long long fract B)
   1068  -- Runtime Function: short accum __ssaddha3 (short accum A, short
   1069           accum B)
   1070  -- Runtime Function: accum __ssaddsa3 (accum A, accum B)
   1071  -- Runtime Function: long accum __ssaddda3 (long accum A, long accum B)
   1072  -- Runtime Function: long long accum __ssaddta3 (long long accum A,
   1073           long long accum B)
   1074      These functions return the sum of A and B with signed saturation.
   1075 
   1076  -- Runtime Function: unsigned short fract __usadduqq3 (unsigned short
   1077           fract A, unsigned short fract B)
   1078  -- Runtime Function: unsigned fract __usadduhq3 (unsigned fract A,
   1079           unsigned fract B)
   1080  -- Runtime Function: unsigned long fract __usaddusq3 (unsigned long
   1081           fract A, unsigned long fract B)
   1082  -- Runtime Function: unsigned long long fract __usaddudq3 (unsigned
   1083           long long fract A, unsigned long long fract B)
   1084  -- Runtime Function: unsigned short accum __usadduha3 (unsigned short
   1085           accum A, unsigned short accum B)
   1086  -- Runtime Function: unsigned accum __usaddusa3 (unsigned accum A,
   1087           unsigned accum B)
   1088  -- Runtime Function: unsigned long accum __usadduda3 (unsigned long
   1089           accum A, unsigned long accum B)
   1090  -- Runtime Function: unsigned long long accum __usadduta3 (unsigned
   1091           long long accum A, unsigned long long accum B)
   1092      These functions return the sum of A and B with unsigned saturation.
   1093 
   1094  -- Runtime Function: short fract __subqq3 (short fract A, short fract
   1095           B)
   1096  -- Runtime Function: fract __subhq3 (fract A, fract B)
   1097  -- Runtime Function: long fract __subsq3 (long fract A, long fract B)
   1098  -- Runtime Function: long long fract __subdq3 (long long fract A, long
   1099           long fract B)
   1100  -- Runtime Function: unsigned short fract __subuqq3 (unsigned short
   1101           fract A, unsigned short fract B)
   1102  -- Runtime Function: unsigned fract __subuhq3 (unsigned fract A,
   1103           unsigned fract B)
   1104  -- Runtime Function: unsigned long fract __subusq3 (unsigned long
   1105           fract A, unsigned long fract B)
   1106  -- Runtime Function: unsigned long long fract __subudq3 (unsigned long
   1107           long fract A, unsigned long long fract B)
   1108  -- Runtime Function: short accum __subha3 (short accum A, short accum
   1109           B)
   1110  -- Runtime Function: accum __subsa3 (accum A, accum B)
   1111  -- Runtime Function: long accum __subda3 (long accum A, long accum B)
   1112  -- Runtime Function: long long accum __subta3 (long long accum A, long
   1113           long accum B)
   1114  -- Runtime Function: unsigned short accum __subuha3 (unsigned short
   1115           accum A, unsigned short accum B)
   1116  -- Runtime Function: unsigned accum __subusa3 (unsigned accum A,
   1117           unsigned accum B)
   1118  -- Runtime Function: unsigned long accum __subuda3 (unsigned long
   1119           accum A, unsigned long accum B)
   1120  -- Runtime Function: unsigned long long accum __subuta3 (unsigned long
   1121           long accum A, unsigned long long accum B)
   1122      These functions return the difference of A and B; that is, `A - B'.
   1123 
   1124  -- Runtime Function: short fract __sssubqq3 (short fract A, short
   1125           fract B)
   1126  -- Runtime Function: fract __sssubhq3 (fract A, fract B)
   1127  -- Runtime Function: long fract __sssubsq3 (long fract A, long fract B)
   1128  -- Runtime Function: long long fract __sssubdq3 (long long fract A,
   1129           long long fract B)
   1130  -- Runtime Function: short accum __sssubha3 (short accum A, short
   1131           accum B)
   1132  -- Runtime Function: accum __sssubsa3 (accum A, accum B)
   1133  -- Runtime Function: long accum __sssubda3 (long accum A, long accum B)
   1134  -- Runtime Function: long long accum __sssubta3 (long long accum A,
   1135           long long accum B)
   1136      These functions return the difference of A and B with signed
   1137      saturation;  that is, `A - B'.
   1138 
   1139  -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short
   1140           fract A, unsigned short fract B)
   1141  -- Runtime Function: unsigned fract __ussubuhq3 (unsigned fract A,
   1142           unsigned fract B)
   1143  -- Runtime Function: unsigned long fract __ussubusq3 (unsigned long
   1144           fract A, unsigned long fract B)
   1145  -- Runtime Function: unsigned long long fract __ussubudq3 (unsigned
   1146           long long fract A, unsigned long long fract B)
   1147  -- Runtime Function: unsigned short accum __ussubuha3 (unsigned short
   1148           accum A, unsigned short accum B)
   1149  -- Runtime Function: unsigned accum __ussubusa3 (unsigned accum A,
   1150           unsigned accum B)
   1151  -- Runtime Function: unsigned long accum __ussubuda3 (unsigned long
   1152           accum A, unsigned long accum B)
   1153  -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned
   1154           long long accum A, unsigned long long accum B)
   1155      These functions return the difference of A and B with unsigned
   1156      saturation;  that is, `A - B'.
   1157 
   1158  -- Runtime Function: short fract __mulqq3 (short fract A, short fract
   1159           B)
   1160  -- Runtime Function: fract __mulhq3 (fract A, fract B)
   1161  -- Runtime Function: long fract __mulsq3 (long fract A, long fract B)
   1162  -- Runtime Function: long long fract __muldq3 (long long fract A, long
   1163           long fract B)
   1164  -- Runtime Function: unsigned short fract __muluqq3 (unsigned short
   1165           fract A, unsigned short fract B)
   1166  -- Runtime Function: unsigned fract __muluhq3 (unsigned fract A,
   1167           unsigned fract B)
   1168  -- Runtime Function: unsigned long fract __mulusq3 (unsigned long
   1169           fract A, unsigned long fract B)
   1170  -- Runtime Function: unsigned long long fract __muludq3 (unsigned long
   1171           long fract A, unsigned long long fract B)
   1172  -- Runtime Function: short accum __mulha3 (short accum A, short accum
   1173           B)
   1174  -- Runtime Function: accum __mulsa3 (accum A, accum B)
   1175  -- Runtime Function: long accum __mulda3 (long accum A, long accum B)
   1176  -- Runtime Function: long long accum __multa3 (long long accum A, long
   1177           long accum B)
   1178  -- Runtime Function: unsigned short accum __muluha3 (unsigned short
   1179           accum A, unsigned short accum B)
   1180  -- Runtime Function: unsigned accum __mulusa3 (unsigned accum A,
   1181           unsigned accum B)
   1182  -- Runtime Function: unsigned long accum __muluda3 (unsigned long
   1183           accum A, unsigned long accum B)
   1184  -- Runtime Function: unsigned long long accum __muluta3 (unsigned long
   1185           long accum A, unsigned long long accum B)
   1186      These functions return the product of A and B.
   1187 
   1188  -- Runtime Function: short fract __ssmulqq3 (short fract A, short
   1189           fract B)
   1190  -- Runtime Function: fract __ssmulhq3 (fract A, fract B)
   1191  -- Runtime Function: long fract __ssmulsq3 (long fract A, long fract B)
   1192  -- Runtime Function: long long fract __ssmuldq3 (long long fract A,
   1193           long long fract B)
   1194  -- Runtime Function: short accum __ssmulha3 (short accum A, short
   1195           accum B)
   1196  -- Runtime Function: accum __ssmulsa3 (accum A, accum B)
   1197  -- Runtime Function: long accum __ssmulda3 (long accum A, long accum B)
   1198  -- Runtime Function: long long accum __ssmulta3 (long long accum A,
   1199           long long accum B)
   1200      These functions return the product of A and B with signed
   1201      saturation.
   1202 
   1203  -- Runtime Function: unsigned short fract __usmuluqq3 (unsigned short
   1204           fract A, unsigned short fract B)
   1205  -- Runtime Function: unsigned fract __usmuluhq3 (unsigned fract A,
   1206           unsigned fract B)
   1207  -- Runtime Function: unsigned long fract __usmulusq3 (unsigned long
   1208           fract A, unsigned long fract B)
   1209  -- Runtime Function: unsigned long long fract __usmuludq3 (unsigned
   1210           long long fract A, unsigned long long fract B)
   1211  -- Runtime Function: unsigned short accum __usmuluha3 (unsigned short
   1212           accum A, unsigned short accum B)
   1213  -- Runtime Function: unsigned accum __usmulusa3 (unsigned accum A,
   1214           unsigned accum B)
   1215  -- Runtime Function: unsigned long accum __usmuluda3 (unsigned long
   1216           accum A, unsigned long accum B)
   1217  -- Runtime Function: unsigned long long accum __usmuluta3 (unsigned
   1218           long long accum A, unsigned long long accum B)
   1219      These functions return the product of A and B with unsigned
   1220      saturation.
   1221 
   1222  -- Runtime Function: short fract __divqq3 (short fract A, short fract
   1223           B)
   1224  -- Runtime Function: fract __divhq3 (fract A, fract B)
   1225  -- Runtime Function: long fract __divsq3 (long fract A, long fract B)
   1226  -- Runtime Function: long long fract __divdq3 (long long fract A, long
   1227           long fract B)
   1228  -- Runtime Function: short accum __divha3 (short accum A, short accum
   1229           B)
   1230  -- Runtime Function: accum __divsa3 (accum A, accum B)
   1231  -- Runtime Function: long accum __divda3 (long accum A, long accum B)
   1232  -- Runtime Function: long long accum __divta3 (long long accum A, long
   1233           long accum B)
   1234      These functions return the quotient of the signed division of A
   1235      and B.
   1236 
   1237  -- Runtime Function: unsigned short fract __udivuqq3 (unsigned short
   1238           fract A, unsigned short fract B)
   1239  -- Runtime Function: unsigned fract __udivuhq3 (unsigned fract A,
   1240           unsigned fract B)
   1241  -- Runtime Function: unsigned long fract __udivusq3 (unsigned long
   1242           fract A, unsigned long fract B)
   1243  -- Runtime Function: unsigned long long fract __udivudq3 (unsigned
   1244           long long fract A, unsigned long long fract B)
   1245  -- Runtime Function: unsigned short accum __udivuha3 (unsigned short
   1246           accum A, unsigned short accum B)
   1247  -- Runtime Function: unsigned accum __udivusa3 (unsigned accum A,
   1248           unsigned accum B)
   1249  -- Runtime Function: unsigned long accum __udivuda3 (unsigned long
   1250           accum A, unsigned long accum B)
   1251  -- Runtime Function: unsigned long long accum __udivuta3 (unsigned
   1252           long long accum A, unsigned long long accum B)
   1253      These functions return the quotient of the unsigned division of A
   1254      and B.
   1255 
   1256  -- Runtime Function: short fract __ssdivqq3 (short fract A, short
   1257           fract B)
   1258  -- Runtime Function: fract __ssdivhq3 (fract A, fract B)
   1259  -- Runtime Function: long fract __ssdivsq3 (long fract A, long fract B)
   1260  -- Runtime Function: long long fract __ssdivdq3 (long long fract A,
   1261           long long fract B)
   1262  -- Runtime Function: short accum __ssdivha3 (short accum A, short
   1263           accum B)
   1264  -- Runtime Function: accum __ssdivsa3 (accum A, accum B)
   1265  -- Runtime Function: long accum __ssdivda3 (long accum A, long accum B)
   1266  -- Runtime Function: long long accum __ssdivta3 (long long accum A,
   1267           long long accum B)
   1268      These functions return the quotient of the signed division of A
   1269      and B with signed saturation.
   1270 
   1271  -- Runtime Function: unsigned short fract __usdivuqq3 (unsigned short
   1272           fract A, unsigned short fract B)
   1273  -- Runtime Function: unsigned fract __usdivuhq3 (unsigned fract A,
   1274           unsigned fract B)
   1275  -- Runtime Function: unsigned long fract __usdivusq3 (unsigned long
   1276           fract A, unsigned long fract B)
   1277  -- Runtime Function: unsigned long long fract __usdivudq3 (unsigned
   1278           long long fract A, unsigned long long fract B)
   1279  -- Runtime Function: unsigned short accum __usdivuha3 (unsigned short
   1280           accum A, unsigned short accum B)
   1281  -- Runtime Function: unsigned accum __usdivusa3 (unsigned accum A,
   1282           unsigned accum B)
   1283  -- Runtime Function: unsigned long accum __usdivuda3 (unsigned long
   1284           accum A, unsigned long accum B)
   1285  -- Runtime Function: unsigned long long accum __usdivuta3 (unsigned
   1286           long long accum A, unsigned long long accum B)
   1287      These functions return the quotient of the unsigned division of A
   1288      and B with unsigned saturation.
   1289 
   1290  -- Runtime Function: short fract __negqq2 (short fract A)
   1291  -- Runtime Function: fract __neghq2 (fract A)
   1292  -- Runtime Function: long fract __negsq2 (long fract A)
   1293  -- Runtime Function: long long fract __negdq2 (long long fract A)
   1294  -- Runtime Function: unsigned short fract __neguqq2 (unsigned short
   1295           fract A)
   1296  -- Runtime Function: unsigned fract __neguhq2 (unsigned fract A)
   1297  -- Runtime Function: unsigned long fract __negusq2 (unsigned long
   1298           fract A)
   1299  -- Runtime Function: unsigned long long fract __negudq2 (unsigned long
   1300           long fract A)
   1301  -- Runtime Function: short accum __negha2 (short accum A)
   1302  -- Runtime Function: accum __negsa2 (accum A)
   1303  -- Runtime Function: long accum __negda2 (long accum A)
   1304  -- Runtime Function: long long accum __negta2 (long long accum A)
   1305  -- Runtime Function: unsigned short accum __neguha2 (unsigned short
   1306           accum A)
   1307  -- Runtime Function: unsigned accum __negusa2 (unsigned accum A)
   1308  -- Runtime Function: unsigned long accum __neguda2 (unsigned long
   1309           accum A)
   1310  -- Runtime Function: unsigned long long accum __neguta2 (unsigned long
   1311           long accum A)
   1312      These functions return the negation of A.
   1313 
   1314  -- Runtime Function: short fract __ssnegqq2 (short fract A)
   1315  -- Runtime Function: fract __ssneghq2 (fract A)
   1316  -- Runtime Function: long fract __ssnegsq2 (long fract A)
   1317  -- Runtime Function: long long fract __ssnegdq2 (long long fract A)
   1318  -- Runtime Function: short accum __ssnegha2 (short accum A)
   1319  -- Runtime Function: accum __ssnegsa2 (accum A)
   1320  -- Runtime Function: long accum __ssnegda2 (long accum A)
   1321  -- Runtime Function: long long accum __ssnegta2 (long long accum A)
   1322      These functions return the negation of A with signed saturation.
   1323 
   1324  -- Runtime Function: unsigned short fract __usneguqq2 (unsigned short
   1325           fract A)
   1326  -- Runtime Function: unsigned fract __usneguhq2 (unsigned fract A)
   1327  -- Runtime Function: unsigned long fract __usnegusq2 (unsigned long
   1328           fract A)
   1329  -- Runtime Function: unsigned long long fract __usnegudq2 (unsigned
   1330           long long fract A)
   1331  -- Runtime Function: unsigned short accum __usneguha2 (unsigned short
   1332           accum A)
   1333  -- Runtime Function: unsigned accum __usnegusa2 (unsigned accum A)
   1334  -- Runtime Function: unsigned long accum __usneguda2 (unsigned long
   1335           accum A)
   1336  -- Runtime Function: unsigned long long accum __usneguta2 (unsigned
   1337           long long accum A)
   1338      These functions return the negation of A with unsigned saturation.
   1339 
   1340  -- Runtime Function: short fract __ashlqq3 (short fract A, int B)
   1341  -- Runtime Function: fract __ashlhq3 (fract A, int B)
   1342  -- Runtime Function: long fract __ashlsq3 (long fract A, int B)
   1343  -- Runtime Function: long long fract __ashldq3 (long long fract A, int
   1344           B)
   1345  -- Runtime Function: unsigned short fract __ashluqq3 (unsigned short
   1346           fract A, int B)
   1347  -- Runtime Function: unsigned fract __ashluhq3 (unsigned fract A, int
   1348           B)
   1349  -- Runtime Function: unsigned long fract __ashlusq3 (unsigned long
   1350           fract A, int B)
   1351  -- Runtime Function: unsigned long long fract __ashludq3 (unsigned
   1352           long long fract A, int B)
   1353  -- Runtime Function: short accum __ashlha3 (short accum A, int B)
   1354  -- Runtime Function: accum __ashlsa3 (accum A, int B)
   1355  -- Runtime Function: long accum __ashlda3 (long accum A, int B)
   1356  -- Runtime Function: long long accum __ashlta3 (long long accum A, int
   1357           B)
   1358  -- Runtime Function: unsigned short accum __ashluha3 (unsigned short
   1359           accum A, int B)
   1360  -- Runtime Function: unsigned accum __ashlusa3 (unsigned accum A, int
   1361           B)
   1362  -- Runtime Function: unsigned long accum __ashluda3 (unsigned long
   1363           accum A, int B)
   1364  -- Runtime Function: unsigned long long accum __ashluta3 (unsigned
   1365           long long accum A, int B)
   1366      These functions return the result of shifting A left by B bits.
   1367 
   1368  -- Runtime Function: short fract __ashrqq3 (short fract A, int B)
   1369  -- Runtime Function: fract __ashrhq3 (fract A, int B)
   1370  -- Runtime Function: long fract __ashrsq3 (long fract A, int B)
   1371  -- Runtime Function: long long fract __ashrdq3 (long long fract A, int
   1372           B)
   1373  -- Runtime Function: short accum __ashrha3 (short accum A, int B)
   1374  -- Runtime Function: accum __ashrsa3 (accum A, int B)
   1375  -- Runtime Function: long accum __ashrda3 (long accum A, int B)
   1376  -- Runtime Function: long long accum __ashrta3 (long long accum A, int
   1377           B)
   1378      These functions return the result of arithmetically shifting A
   1379      right by B bits.
   1380 
   1381  -- Runtime Function: unsigned short fract __lshruqq3 (unsigned short
   1382           fract A, int B)
   1383  -- Runtime Function: unsigned fract __lshruhq3 (unsigned fract A, int
   1384           B)
   1385  -- Runtime Function: unsigned long fract __lshrusq3 (unsigned long
   1386           fract A, int B)
   1387  -- Runtime Function: unsigned long long fract __lshrudq3 (unsigned
   1388           long long fract A, int B)
   1389  -- Runtime Function: unsigned short accum __lshruha3 (unsigned short
   1390           accum A, int B)
   1391  -- Runtime Function: unsigned accum __lshrusa3 (unsigned accum A, int
   1392           B)
   1393  -- Runtime Function: unsigned long accum __lshruda3 (unsigned long
   1394           accum A, int B)
   1395  -- Runtime Function: unsigned long long accum __lshruta3 (unsigned
   1396           long long accum A, int B)
   1397      These functions return the result of logically shifting A right by
   1398      B bits.
   1399 
   1400  -- Runtime Function: fract __ssashlhq3 (fract A, int B)
   1401  -- Runtime Function: long fract __ssashlsq3 (long fract A, int B)
   1402  -- Runtime Function: long long fract __ssashldq3 (long long fract A,
   1403           int B)
   1404  -- Runtime Function: short accum __ssashlha3 (short accum A, int B)
   1405  -- Runtime Function: accum __ssashlsa3 (accum A, int B)
   1406  -- Runtime Function: long accum __ssashlda3 (long accum A, int B)
   1407  -- Runtime Function: long long accum __ssashlta3 (long long accum A,
   1408           int B)
   1409      These functions return the result of shifting A left by B bits
   1410      with signed saturation.
   1411 
   1412  -- Runtime Function: unsigned short fract __usashluqq3 (unsigned short
   1413           fract A, int B)
   1414  -- Runtime Function: unsigned fract __usashluhq3 (unsigned fract A,
   1415           int B)
   1416  -- Runtime Function: unsigned long fract __usashlusq3 (unsigned long
   1417           fract A, int B)
   1418  -- Runtime Function: unsigned long long fract __usashludq3 (unsigned
   1419           long long fract A, int B)
   1420  -- Runtime Function: unsigned short accum __usashluha3 (unsigned short
   1421           accum A, int B)
   1422  -- Runtime Function: unsigned accum __usashlusa3 (unsigned accum A,
   1423           int B)
   1424  -- Runtime Function: unsigned long accum __usashluda3 (unsigned long
   1425           accum A, int B)
   1426  -- Runtime Function: unsigned long long accum __usashluta3 (unsigned
   1427           long long accum A, int B)
   1428      These functions return the result of shifting A left by B bits
   1429      with unsigned saturation.
   1430 
   1431 4.4.2 Comparison functions
   1432 --------------------------
   1433 
   1434 The following functions implement fixed-point comparisons.  These
   1435 functions implement a low-level compare, upon which the higher level
   1436 comparison operators (such as less than and greater than or equal to)
   1437 can be constructed.  The returned values lie in the range zero to two,
   1438 to allow the high-level operators to be implemented by testing the
   1439 returned result using either signed or unsigned comparison.
   1440 
   1441  -- Runtime Function: int __cmpqq2 (short fract A, short fract B)
   1442  -- Runtime Function: int __cmphq2 (fract A, fract B)
   1443  -- Runtime Function: int __cmpsq2 (long fract A, long fract B)
   1444  -- Runtime Function: int __cmpdq2 (long long fract A, long long fract
   1445           B)
   1446  -- Runtime Function: int __cmpuqq2 (unsigned short fract A, unsigned
   1447           short fract B)
   1448  -- Runtime Function: int __cmpuhq2 (unsigned fract A, unsigned fract B)
   1449  -- Runtime Function: int __cmpusq2 (unsigned long fract A, unsigned
   1450           long fract B)
   1451  -- Runtime Function: int __cmpudq2 (unsigned long long fract A,
   1452           unsigned long long fract B)
   1453  -- Runtime Function: int __cmpha2 (short accum A, short accum B)
   1454  -- Runtime Function: int __cmpsa2 (accum A, accum B)
   1455  -- Runtime Function: int __cmpda2 (long accum A, long accum B)
   1456  -- Runtime Function: int __cmpta2 (long long accum A, long long accum
   1457           B)
   1458  -- Runtime Function: int __cmpuha2 (unsigned short accum A, unsigned
   1459           short accum B)
   1460  -- Runtime Function: int __cmpusa2 (unsigned accum A, unsigned accum B)
   1461  -- Runtime Function: int __cmpuda2 (unsigned long accum A, unsigned
   1462           long accum B)
   1463  -- Runtime Function: int __cmputa2 (unsigned long long accum A,
   1464           unsigned long long accum B)
   1465      These functions perform a signed or unsigned comparison of A and B
   1466      (depending on the selected machine mode).  If A is less than B,
   1467      they return 0; if A is greater than B, they return 2; and if A and
   1468      B are equal they return 1.
   1469 
   1470 4.4.3 Conversion functions
   1471 --------------------------
   1472 
   1473  -- Runtime Function: fract __fractqqhq2 (short fract A)
   1474  -- Runtime Function: long fract __fractqqsq2 (short fract A)
   1475  -- Runtime Function: long long fract __fractqqdq2 (short fract A)
   1476  -- Runtime Function: short accum __fractqqha (short fract A)
   1477  -- Runtime Function: accum __fractqqsa (short fract A)
   1478  -- Runtime Function: long accum __fractqqda (short fract A)
   1479  -- Runtime Function: long long accum __fractqqta (short fract A)
   1480  -- Runtime Function: unsigned short fract __fractqquqq (short fract A)
   1481  -- Runtime Function: unsigned fract __fractqquhq (short fract A)
   1482  -- Runtime Function: unsigned long fract __fractqqusq (short fract A)
   1483  -- Runtime Function: unsigned long long fract __fractqqudq (short
   1484           fract A)
   1485  -- Runtime Function: unsigned short accum __fractqquha (short fract A)
   1486  -- Runtime Function: unsigned accum __fractqqusa (short fract A)
   1487  -- Runtime Function: unsigned long accum __fractqquda (short fract A)
   1488  -- Runtime Function: unsigned long long accum __fractqquta (short
   1489           fract A)
   1490  -- Runtime Function: signed char __fractqqqi (short fract A)
   1491  -- Runtime Function: short __fractqqhi (short fract A)
   1492  -- Runtime Function: int __fractqqsi (short fract A)
   1493  -- Runtime Function: long __fractqqdi (short fract A)
   1494  -- Runtime Function: long long __fractqqti (short fract A)
   1495  -- Runtime Function: float __fractqqsf (short fract A)
   1496  -- Runtime Function: double __fractqqdf (short fract A)
   1497  -- Runtime Function: short fract __fracthqqq2 (fract A)
   1498  -- Runtime Function: long fract __fracthqsq2 (fract A)
   1499  -- Runtime Function: long long fract __fracthqdq2 (fract A)
   1500  -- Runtime Function: short accum __fracthqha (fract A)
   1501  -- Runtime Function: accum __fracthqsa (fract A)
   1502  -- Runtime Function: long accum __fracthqda (fract A)
   1503  -- Runtime Function: long long accum __fracthqta (fract A)
   1504  -- Runtime Function: unsigned short fract __fracthquqq (fract A)
   1505  -- Runtime Function: unsigned fract __fracthquhq (fract A)
   1506  -- Runtime Function: unsigned long fract __fracthqusq (fract A)
   1507  -- Runtime Function: unsigned long long fract __fracthqudq (fract A)
   1508  -- Runtime Function: unsigned short accum __fracthquha (fract A)
   1509  -- Runtime Function: unsigned accum __fracthqusa (fract A)
   1510  -- Runtime Function: unsigned long accum __fracthquda (fract A)
   1511  -- Runtime Function: unsigned long long accum __fracthquta (fract A)
   1512  -- Runtime Function: signed char __fracthqqi (fract A)
   1513  -- Runtime Function: short __fracthqhi (fract A)
   1514  -- Runtime Function: int __fracthqsi (fract A)
   1515  -- Runtime Function: long __fracthqdi (fract A)
   1516  -- Runtime Function: long long __fracthqti (fract A)
   1517  -- Runtime Function: float __fracthqsf (fract A)
   1518  -- Runtime Function: double __fracthqdf (fract A)
   1519  -- Runtime Function: short fract __fractsqqq2 (long fract A)
   1520  -- Runtime Function: fract __fractsqhq2 (long fract A)
   1521  -- Runtime Function: long long fract __fractsqdq2 (long fract A)
   1522  -- Runtime Function: short accum __fractsqha (long fract A)
   1523  -- Runtime Function: accum __fractsqsa (long fract A)
   1524  -- Runtime Function: long accum __fractsqda (long fract A)
   1525  -- Runtime Function: long long accum __fractsqta (long fract A)
   1526  -- Runtime Function: unsigned short fract __fractsquqq (long fract A)
   1527  -- Runtime Function: unsigned fract __fractsquhq (long fract A)
   1528  -- Runtime Function: unsigned long fract __fractsqusq (long fract A)
   1529  -- Runtime Function: unsigned long long fract __fractsqudq (long fract
   1530           A)
   1531  -- Runtime Function: unsigned short accum __fractsquha (long fract A)
   1532  -- Runtime Function: unsigned accum __fractsqusa (long fract A)
   1533  -- Runtime Function: unsigned long accum __fractsquda (long fract A)
   1534  -- Runtime Function: unsigned long long accum __fractsquta (long fract
   1535           A)
   1536  -- Runtime Function: signed char __fractsqqi (long fract A)
   1537  -- Runtime Function: short __fractsqhi (long fract A)
   1538  -- Runtime Function: int __fractsqsi (long fract A)
   1539  -- Runtime Function: long __fractsqdi (long fract A)
   1540  -- Runtime Function: long long __fractsqti (long fract A)
   1541  -- Runtime Function: float __fractsqsf (long fract A)
   1542  -- Runtime Function: double __fractsqdf (long fract A)
   1543  -- Runtime Function: short fract __fractdqqq2 (long long fract A)
   1544  -- Runtime Function: fract __fractdqhq2 (long long fract A)
   1545  -- Runtime Function: long fract __fractdqsq2 (long long fract A)
   1546  -- Runtime Function: short accum __fractdqha (long long fract A)
   1547  -- Runtime Function: accum __fractdqsa (long long fract A)
   1548  -- Runtime Function: long accum __fractdqda (long long fract A)
   1549  -- Runtime Function: long long accum __fractdqta (long long fract A)
   1550  -- Runtime Function: unsigned short fract __fractdquqq (long long
   1551           fract A)
   1552  -- Runtime Function: unsigned fract __fractdquhq (long long fract A)
   1553  -- Runtime Function: unsigned long fract __fractdqusq (long long fract
   1554           A)
   1555  -- Runtime Function: unsigned long long fract __fractdqudq (long long
   1556           fract A)
   1557  -- Runtime Function: unsigned short accum __fractdquha (long long
   1558           fract A)
   1559  -- Runtime Function: unsigned accum __fractdqusa (long long fract A)
   1560  -- Runtime Function: unsigned long accum __fractdquda (long long fract
   1561           A)
   1562  -- Runtime Function: unsigned long long accum __fractdquta (long long
   1563           fract A)
   1564  -- Runtime Function: signed char __fractdqqi (long long fract A)
   1565  -- Runtime Function: short __fractdqhi (long long fract A)
   1566  -- Runtime Function: int __fractdqsi (long long fract A)
   1567  -- Runtime Function: long __fractdqdi (long long fract A)
   1568  -- Runtime Function: long long __fractdqti (long long fract A)
   1569  -- Runtime Function: float __fractdqsf (long long fract A)
   1570  -- Runtime Function: double __fractdqdf (long long fract A)
   1571  -- Runtime Function: short fract __fracthaqq (short accum A)
   1572  -- Runtime Function: fract __fracthahq (short accum A)
   1573  -- Runtime Function: long fract __fracthasq (short accum A)
   1574  -- Runtime Function: long long fract __fracthadq (short accum A)
   1575  -- Runtime Function: accum __fracthasa2 (short accum A)
   1576  -- Runtime Function: long accum __fracthada2 (short accum A)
   1577  -- Runtime Function: long long accum __fracthata2 (short accum A)
   1578  -- Runtime Function: unsigned short fract __fracthauqq (short accum A)
   1579  -- Runtime Function: unsigned fract __fracthauhq (short accum A)
   1580  -- Runtime Function: unsigned long fract __fracthausq (short accum A)
   1581  -- Runtime Function: unsigned long long fract __fracthaudq (short
   1582           accum A)
   1583  -- Runtime Function: unsigned short accum __fracthauha (short accum A)
   1584  -- Runtime Function: unsigned accum __fracthausa (short accum A)
   1585  -- Runtime Function: unsigned long accum __fracthauda (short accum A)
   1586  -- Runtime Function: unsigned long long accum __fracthauta (short
   1587           accum A)
   1588  -- Runtime Function: signed char __fracthaqi (short accum A)
   1589  -- Runtime Function: short __fracthahi (short accum A)
   1590  -- Runtime Function: int __fracthasi (short accum A)
   1591  -- Runtime Function: long __fracthadi (short accum A)
   1592  -- Runtime Function: long long __fracthati (short accum A)
   1593  -- Runtime Function: float __fracthasf (short accum A)
   1594  -- Runtime Function: double __fracthadf (short accum A)
   1595  -- Runtime Function: short fract __fractsaqq (accum A)
   1596  -- Runtime Function: fract __fractsahq (accum A)
   1597  -- Runtime Function: long fract __fractsasq (accum A)
   1598  -- Runtime Function: long long fract __fractsadq (accum A)
   1599  -- Runtime Function: short accum __fractsaha2 (accum A)
   1600  -- Runtime Function: long accum __fractsada2 (accum A)
   1601  -- Runtime Function: long long accum __fractsata2 (accum A)
   1602  -- Runtime Function: unsigned short fract __fractsauqq (accum A)
   1603  -- Runtime Function: unsigned fract __fractsauhq (accum A)
   1604  -- Runtime Function: unsigned long fract __fractsausq (accum A)
   1605  -- Runtime Function: unsigned long long fract __fractsaudq (accum A)
   1606  -- Runtime Function: unsigned short accum __fractsauha (accum A)
   1607  -- Runtime Function: unsigned accum __fractsausa (accum A)
   1608  -- Runtime Function: unsigned long accum __fractsauda (accum A)
   1609  -- Runtime Function: unsigned long long accum __fractsauta (accum A)
   1610  -- Runtime Function: signed char __fractsaqi (accum A)
   1611  -- Runtime Function: short __fractsahi (accum A)
   1612  -- Runtime Function: int __fractsasi (accum A)
   1613  -- Runtime Function: long __fractsadi (accum A)
   1614  -- Runtime Function: long long __fractsati (accum A)
   1615  -- Runtime Function: float __fractsasf (accum A)
   1616  -- Runtime Function: double __fractsadf (accum A)
   1617  -- Runtime Function: short fract __fractdaqq (long accum A)
   1618  -- Runtime Function: fract __fractdahq (long accum A)
   1619  -- Runtime Function: long fract __fractdasq (long accum A)
   1620  -- Runtime Function: long long fract __fractdadq (long accum A)
   1621  -- Runtime Function: short accum __fractdaha2 (long accum A)
   1622  -- Runtime Function: accum __fractdasa2 (long accum A)
   1623  -- Runtime Function: long long accum __fractdata2 (long accum A)
   1624  -- Runtime Function: unsigned short fract __fractdauqq (long accum A)
   1625  -- Runtime Function: unsigned fract __fractdauhq (long accum A)
   1626  -- Runtime Function: unsigned long fract __fractdausq (long accum A)
   1627  -- Runtime Function: unsigned long long fract __fractdaudq (long accum
   1628           A)
   1629  -- Runtime Function: unsigned short accum __fractdauha (long accum A)
   1630  -- Runtime Function: unsigned accum __fractdausa (long accum A)
   1631  -- Runtime Function: unsigned long accum __fractdauda (long accum A)
   1632  -- Runtime Function: unsigned long long accum __fractdauta (long accum
   1633           A)
   1634  -- Runtime Function: signed char __fractdaqi (long accum A)
   1635  -- Runtime Function: short __fractdahi (long accum A)
   1636  -- Runtime Function: int __fractdasi (long accum A)
   1637  -- Runtime Function: long __fractdadi (long accum A)
   1638  -- Runtime Function: long long __fractdati (long accum A)
   1639  -- Runtime Function: float __fractdasf (long accum A)
   1640  -- Runtime Function: double __fractdadf (long accum A)
   1641  -- Runtime Function: short fract __fracttaqq (long long accum A)
   1642  -- Runtime Function: fract __fracttahq (long long accum A)
   1643  -- Runtime Function: long fract __fracttasq (long long accum A)
   1644  -- Runtime Function: long long fract __fracttadq (long long accum A)
   1645  -- Runtime Function: short accum __fracttaha2 (long long accum A)
   1646  -- Runtime Function: accum __fracttasa2 (long long accum A)
   1647  -- Runtime Function: long accum __fracttada2 (long long accum A)
   1648  -- Runtime Function: unsigned short fract __fracttauqq (long long
   1649           accum A)
   1650  -- Runtime Function: unsigned fract __fracttauhq (long long accum A)
   1651  -- Runtime Function: unsigned long fract __fracttausq (long long accum
   1652           A)
   1653  -- Runtime Function: unsigned long long fract __fracttaudq (long long
   1654           accum A)
   1655  -- Runtime Function: unsigned short accum __fracttauha (long long
   1656           accum A)
   1657  -- Runtime Function: unsigned accum __fracttausa (long long accum A)
   1658  -- Runtime Function: unsigned long accum __fracttauda (long long accum
   1659           A)
   1660  -- Runtime Function: unsigned long long accum __fracttauta (long long
   1661           accum A)
   1662  -- Runtime Function: signed char __fracttaqi (long long accum A)
   1663  -- Runtime Function: short __fracttahi (long long accum A)
   1664  -- Runtime Function: int __fracttasi (long long accum A)
   1665  -- Runtime Function: long __fracttadi (long long accum A)
   1666  -- Runtime Function: long long __fracttati (long long accum A)
   1667  -- Runtime Function: float __fracttasf (long long accum A)
   1668  -- Runtime Function: double __fracttadf (long long accum A)
   1669  -- Runtime Function: short fract __fractuqqqq (unsigned short fract A)
   1670  -- Runtime Function: fract __fractuqqhq (unsigned short fract A)
   1671  -- Runtime Function: long fract __fractuqqsq (unsigned short fract A)
   1672  -- Runtime Function: long long fract __fractuqqdq (unsigned short
   1673           fract A)
   1674  -- Runtime Function: short accum __fractuqqha (unsigned short fract A)
   1675  -- Runtime Function: accum __fractuqqsa (unsigned short fract A)
   1676  -- Runtime Function: long accum __fractuqqda (unsigned short fract A)
   1677  -- Runtime Function: long long accum __fractuqqta (unsigned short
   1678           fract A)
   1679  -- Runtime Function: unsigned fract __fractuqquhq2 (unsigned short
   1680           fract A)
   1681  -- Runtime Function: unsigned long fract __fractuqqusq2 (unsigned
   1682           short fract A)
   1683  -- Runtime Function: unsigned long long fract __fractuqqudq2 (unsigned
   1684           short fract A)
   1685  -- Runtime Function: unsigned short accum __fractuqquha (unsigned
   1686           short fract A)
   1687  -- Runtime Function: unsigned accum __fractuqqusa (unsigned short
   1688           fract A)
   1689  -- Runtime Function: unsigned long accum __fractuqquda (unsigned short
   1690           fract A)
   1691  -- Runtime Function: unsigned long long accum __fractuqquta (unsigned
   1692           short fract A)
   1693  -- Runtime Function: signed char __fractuqqqi (unsigned short fract A)
   1694  -- Runtime Function: short __fractuqqhi (unsigned short fract A)
   1695  -- Runtime Function: int __fractuqqsi (unsigned short fract A)
   1696  -- Runtime Function: long __fractuqqdi (unsigned short fract A)
   1697  -- Runtime Function: long long __fractuqqti (unsigned short fract A)
   1698  -- Runtime Function: float __fractuqqsf (unsigned short fract A)
   1699  -- Runtime Function: double __fractuqqdf (unsigned short fract A)
   1700  -- Runtime Function: short fract __fractuhqqq (unsigned fract A)
   1701  -- Runtime Function: fract __fractuhqhq (unsigned fract A)
   1702  -- Runtime Function: long fract __fractuhqsq (unsigned fract A)
   1703  -- Runtime Function: long long fract __fractuhqdq (unsigned fract A)
   1704  -- Runtime Function: short accum __fractuhqha (unsigned fract A)
   1705  -- Runtime Function: accum __fractuhqsa (unsigned fract A)
   1706  -- Runtime Function: long accum __fractuhqda (unsigned fract A)
   1707  -- Runtime Function: long long accum __fractuhqta (unsigned fract A)
   1708  -- Runtime Function: unsigned short fract __fractuhquqq2 (unsigned
   1709           fract A)
   1710  -- Runtime Function: unsigned long fract __fractuhqusq2 (unsigned
   1711           fract A)
   1712  -- Runtime Function: unsigned long long fract __fractuhqudq2 (unsigned
   1713           fract A)
   1714  -- Runtime Function: unsigned short accum __fractuhquha (unsigned
   1715           fract A)
   1716  -- Runtime Function: unsigned accum __fractuhqusa (unsigned fract A)
   1717  -- Runtime Function: unsigned long accum __fractuhquda (unsigned fract
   1718           A)
   1719  -- Runtime Function: unsigned long long accum __fractuhquta (unsigned
   1720           fract A)
   1721  -- Runtime Function: signed char __fractuhqqi (unsigned fract A)
   1722  -- Runtime Function: short __fractuhqhi (unsigned fract A)
   1723  -- Runtime Function: int __fractuhqsi (unsigned fract A)
   1724  -- Runtime Function: long __fractuhqdi (unsigned fract A)
   1725  -- Runtime Function: long long __fractuhqti (unsigned fract A)
   1726  -- Runtime Function: float __fractuhqsf (unsigned fract A)
   1727  -- Runtime Function: double __fractuhqdf (unsigned fract A)
   1728  -- Runtime Function: short fract __fractusqqq (unsigned long fract A)
   1729  -- Runtime Function: fract __fractusqhq (unsigned long fract A)
   1730  -- Runtime Function: long fract __fractusqsq (unsigned long fract A)
   1731  -- Runtime Function: long long fract __fractusqdq (unsigned long fract
   1732           A)
   1733  -- Runtime Function: short accum __fractusqha (unsigned long fract A)
   1734  -- Runtime Function: accum __fractusqsa (unsigned long fract A)
   1735  -- Runtime Function: long accum __fractusqda (unsigned long fract A)
   1736  -- Runtime Function: long long accum __fractusqta (unsigned long fract
   1737           A)
   1738  -- Runtime Function: unsigned short fract __fractusquqq2 (unsigned
   1739           long fract A)
   1740  -- Runtime Function: unsigned fract __fractusquhq2 (unsigned long
   1741           fract A)
   1742  -- Runtime Function: unsigned long long fract __fractusqudq2 (unsigned
   1743           long fract A)
   1744  -- Runtime Function: unsigned short accum __fractusquha (unsigned long
   1745           fract A)
   1746  -- Runtime Function: unsigned accum __fractusqusa (unsigned long fract
   1747           A)
   1748  -- Runtime Function: unsigned long accum __fractusquda (unsigned long
   1749           fract A)
   1750  -- Runtime Function: unsigned long long accum __fractusquta (unsigned
   1751           long fract A)
   1752  -- Runtime Function: signed char __fractusqqi (unsigned long fract A)
   1753  -- Runtime Function: short __fractusqhi (unsigned long fract A)
   1754  -- Runtime Function: int __fractusqsi (unsigned long fract A)
   1755  -- Runtime Function: long __fractusqdi (unsigned long fract A)
   1756  -- Runtime Function: long long __fractusqti (unsigned long fract A)
   1757  -- Runtime Function: float __fractusqsf (unsigned long fract A)
   1758  -- Runtime Function: double __fractusqdf (unsigned long fract A)
   1759  -- Runtime Function: short fract __fractudqqq (unsigned long long
   1760           fract A)
   1761  -- Runtime Function: fract __fractudqhq (unsigned long long fract A)
   1762  -- Runtime Function: long fract __fractudqsq (unsigned long long fract
   1763           A)
   1764  -- Runtime Function: long long fract __fractudqdq (unsigned long long
   1765           fract A)
   1766  -- Runtime Function: short accum __fractudqha (unsigned long long
   1767           fract A)
   1768  -- Runtime Function: accum __fractudqsa (unsigned long long fract A)
   1769  -- Runtime Function: long accum __fractudqda (unsigned long long fract
   1770           A)
   1771  -- Runtime Function: long long accum __fractudqta (unsigned long long
   1772           fract A)
   1773  -- Runtime Function: unsigned short fract __fractudquqq2 (unsigned
   1774           long long fract A)
   1775  -- Runtime Function: unsigned fract __fractudquhq2 (unsigned long long
   1776           fract A)
   1777  -- Runtime Function: unsigned long fract __fractudqusq2 (unsigned long
   1778           long fract A)
   1779  -- Runtime Function: unsigned short accum __fractudquha (unsigned long
   1780           long fract A)
   1781  -- Runtime Function: unsigned accum __fractudqusa (unsigned long long
   1782           fract A)
   1783  -- Runtime Function: unsigned long accum __fractudquda (unsigned long
   1784           long fract A)
   1785  -- Runtime Function: unsigned long long accum __fractudquta (unsigned
   1786           long long fract A)
   1787  -- Runtime Function: signed char __fractudqqi (unsigned long long
   1788           fract A)
   1789  -- Runtime Function: short __fractudqhi (unsigned long long fract A)
   1790  -- Runtime Function: int __fractudqsi (unsigned long long fract A)
   1791  -- Runtime Function: long __fractudqdi (unsigned long long fract A)
   1792  -- Runtime Function: long long __fractudqti (unsigned long long fract
   1793           A)
   1794  -- Runtime Function: float __fractudqsf (unsigned long long fract A)
   1795  -- Runtime Function: double __fractudqdf (unsigned long long fract A)
   1796  -- Runtime Function: short fract __fractuhaqq (unsigned short accum A)
   1797  -- Runtime Function: fract __fractuhahq (unsigned short accum A)
   1798  -- Runtime Function: long fract __fractuhasq (unsigned short accum A)
   1799  -- Runtime Function: long long fract __fractuhadq (unsigned short
   1800           accum A)
   1801  -- Runtime Function: short accum __fractuhaha (unsigned short accum A)
   1802  -- Runtime Function: accum __fractuhasa (unsigned short accum A)
   1803  -- Runtime Function: long accum __fractuhada (unsigned short accum A)
   1804  -- Runtime Function: long long accum __fractuhata (unsigned short
   1805           accum A)
   1806  -- Runtime Function: unsigned short fract __fractuhauqq (unsigned
   1807           short accum A)
   1808  -- Runtime Function: unsigned fract __fractuhauhq (unsigned short
   1809           accum A)
   1810  -- Runtime Function: unsigned long fract __fractuhausq (unsigned short
   1811           accum A)
   1812  -- Runtime Function: unsigned long long fract __fractuhaudq (unsigned
   1813           short accum A)
   1814  -- Runtime Function: unsigned accum __fractuhausa2 (unsigned short
   1815           accum A)
   1816  -- Runtime Function: unsigned long accum __fractuhauda2 (unsigned
   1817           short accum A)
   1818  -- Runtime Function: unsigned long long accum __fractuhauta2 (unsigned
   1819           short accum A)
   1820  -- Runtime Function: signed char __fractuhaqi (unsigned short accum A)
   1821  -- Runtime Function: short __fractuhahi (unsigned short accum A)
   1822  -- Runtime Function: int __fractuhasi (unsigned short accum A)
   1823  -- Runtime Function: long __fractuhadi (unsigned short accum A)
   1824  -- Runtime Function: long long __fractuhati (unsigned short accum A)
   1825  -- Runtime Function: float __fractuhasf (unsigned short accum A)
   1826  -- Runtime Function: double __fractuhadf (unsigned short accum A)
   1827  -- Runtime Function: short fract __fractusaqq (unsigned accum A)
   1828  -- Runtime Function: fract __fractusahq (unsigned accum A)
   1829  -- Runtime Function: long fract __fractusasq (unsigned accum A)
   1830  -- Runtime Function: long long fract __fractusadq (unsigned accum A)
   1831  -- Runtime Function: short accum __fractusaha (unsigned accum A)
   1832  -- Runtime Function: accum __fractusasa (unsigned accum A)
   1833  -- Runtime Function: long accum __fractusada (unsigned accum A)
   1834  -- Runtime Function: long long accum __fractusata (unsigned accum A)
   1835  -- Runtime Function: unsigned short fract __fractusauqq (unsigned
   1836           accum A)
   1837  -- Runtime Function: unsigned fract __fractusauhq (unsigned accum A)
   1838  -- Runtime Function: unsigned long fract __fractusausq (unsigned accum
   1839           A)
   1840  -- Runtime Function: unsigned long long fract __fractusaudq (unsigned
   1841           accum A)
   1842  -- Runtime Function: unsigned short accum __fractusauha2 (unsigned
   1843           accum A)
   1844  -- Runtime Function: unsigned long accum __fractusauda2 (unsigned
   1845           accum A)
   1846  -- Runtime Function: unsigned long long accum __fractusauta2 (unsigned
   1847           accum A)
   1848  -- Runtime Function: signed char __fractusaqi (unsigned accum A)
   1849  -- Runtime Function: short __fractusahi (unsigned accum A)
   1850  -- Runtime Function: int __fractusasi (unsigned accum A)
   1851  -- Runtime Function: long __fractusadi (unsigned accum A)
   1852  -- Runtime Function: long long __fractusati (unsigned accum A)
   1853  -- Runtime Function: float __fractusasf (unsigned accum A)
   1854  -- Runtime Function: double __fractusadf (unsigned accum A)
   1855  -- Runtime Function: short fract __fractudaqq (unsigned long accum A)
   1856  -- Runtime Function: fract __fractudahq (unsigned long accum A)
   1857  -- Runtime Function: long fract __fractudasq (unsigned long accum A)
   1858  -- Runtime Function: long long fract __fractudadq (unsigned long accum
   1859           A)
   1860  -- Runtime Function: short accum __fractudaha (unsigned long accum A)
   1861  -- Runtime Function: accum __fractudasa (unsigned long accum A)
   1862  -- Runtime Function: long accum __fractudada (unsigned long accum A)
   1863  -- Runtime Function: long long accum __fractudata (unsigned long accum
   1864           A)
   1865  -- Runtime Function: unsigned short fract __fractudauqq (unsigned long
   1866           accum A)
   1867  -- Runtime Function: unsigned fract __fractudauhq (unsigned long accum
   1868           A)
   1869  -- Runtime Function: unsigned long fract __fractudausq (unsigned long
   1870           accum A)
   1871  -- Runtime Function: unsigned long long fract __fractudaudq (unsigned
   1872           long accum A)
   1873  -- Runtime Function: unsigned short accum __fractudauha2 (unsigned
   1874           long accum A)
   1875  -- Runtime Function: unsigned accum __fractudausa2 (unsigned long
   1876           accum A)
   1877  -- Runtime Function: unsigned long long accum __fractudauta2 (unsigned
   1878           long accum A)
   1879  -- Runtime Function: signed char __fractudaqi (unsigned long accum A)
   1880  -- Runtime Function: short __fractudahi (unsigned long accum A)
   1881  -- Runtime Function: int __fractudasi (unsigned long accum A)
   1882  -- Runtime Function: long __fractudadi (unsigned long accum A)
   1883  -- Runtime Function: long long __fractudati (unsigned long accum A)
   1884  -- Runtime Function: float __fractudasf (unsigned long accum A)
   1885  -- Runtime Function: double __fractudadf (unsigned long accum A)
   1886  -- Runtime Function: short fract __fractutaqq (unsigned long long
   1887           accum A)
   1888  -- Runtime Function: fract __fractutahq (unsigned long long accum A)
   1889  -- Runtime Function: long fract __fractutasq (unsigned long long accum
   1890           A)
   1891  -- Runtime Function: long long fract __fractutadq (unsigned long long
   1892           accum A)
   1893  -- Runtime Function: short accum __fractutaha (unsigned long long
   1894           accum A)
   1895  -- Runtime Function: accum __fractutasa (unsigned long long accum A)
   1896  -- Runtime Function: long accum __fractutada (unsigned long long accum
   1897           A)
   1898  -- Runtime Function: long long accum __fractutata (unsigned long long
   1899           accum A)
   1900  -- Runtime Function: unsigned short fract __fractutauqq (unsigned long
   1901           long accum A)
   1902  -- Runtime Function: unsigned fract __fractutauhq (unsigned long long
   1903           accum A)
   1904  -- Runtime Function: unsigned long fract __fractutausq (unsigned long
   1905           long accum A)
   1906  -- Runtime Function: unsigned long long fract __fractutaudq (unsigned
   1907           long long accum A)
   1908  -- Runtime Function: unsigned short accum __fractutauha2 (unsigned
   1909           long long accum A)
   1910  -- Runtime Function: unsigned accum __fractutausa2 (unsigned long long
   1911           accum A)
   1912  -- Runtime Function: unsigned long accum __fractutauda2 (unsigned long
   1913           long accum A)
   1914  -- Runtime Function: signed char __fractutaqi (unsigned long long
   1915           accum A)
   1916  -- Runtime Function: short __fractutahi (unsigned long long accum A)
   1917  -- Runtime Function: int __fractutasi (unsigned long long accum A)
   1918  -- Runtime Function: long __fractutadi (unsigned long long accum A)
   1919  -- Runtime Function: long long __fractutati (unsigned long long accum
   1920           A)
   1921  -- Runtime Function: float __fractutasf (unsigned long long accum A)
   1922  -- Runtime Function: double __fractutadf (unsigned long long accum A)
   1923  -- Runtime Function: short fract __fractqiqq (signed char A)
   1924  -- Runtime Function: fract __fractqihq (signed char A)
   1925  -- Runtime Function: long fract __fractqisq (signed char A)
   1926  -- Runtime Function: long long fract __fractqidq (signed char A)
   1927  -- Runtime Function: short accum __fractqiha (signed char A)
   1928  -- Runtime Function: accum __fractqisa (signed char A)
   1929  -- Runtime Function: long accum __fractqida (signed char A)
   1930  -- Runtime Function: long long accum __fractqita (signed char A)
   1931  -- Runtime Function: unsigned short fract __fractqiuqq (signed char A)
   1932  -- Runtime Function: unsigned fract __fractqiuhq (signed char A)
   1933  -- Runtime Function: unsigned long fract __fractqiusq (signed char A)
   1934  -- Runtime Function: unsigned long long fract __fractqiudq (signed
   1935           char A)
   1936  -- Runtime Function: unsigned short accum __fractqiuha (signed char A)
   1937  -- Runtime Function: unsigned accum __fractqiusa (signed char A)
   1938  -- Runtime Function: unsigned long accum __fractqiuda (signed char A)
   1939  -- Runtime Function: unsigned long long accum __fractqiuta (signed
   1940           char A)
   1941  -- Runtime Function: short fract __fracthiqq (short A)
   1942  -- Runtime Function: fract __fracthihq (short A)
   1943  -- Runtime Function: long fract __fracthisq (short A)
   1944  -- Runtime Function: long long fract __fracthidq (short A)
   1945  -- Runtime Function: short accum __fracthiha (short A)
   1946  -- Runtime Function: accum __fracthisa (short A)
   1947  -- Runtime Function: long accum __fracthida (short A)
   1948  -- Runtime Function: long long accum __fracthita (short A)
   1949  -- Runtime Function: unsigned short fract __fracthiuqq (short A)
   1950  -- Runtime Function: unsigned fract __fracthiuhq (short A)
   1951  -- Runtime Function: unsigned long fract __fracthiusq (short A)
   1952  -- Runtime Function: unsigned long long fract __fracthiudq (short A)
   1953  -- Runtime Function: unsigned short accum __fracthiuha (short A)
   1954  -- Runtime Function: unsigned accum __fracthiusa (short A)
   1955  -- Runtime Function: unsigned long accum __fracthiuda (short A)
   1956  -- Runtime Function: unsigned long long accum __fracthiuta (short A)
   1957  -- Runtime Function: short fract __fractsiqq (int A)
   1958  -- Runtime Function: fract __fractsihq (int A)
   1959  -- Runtime Function: long fract __fractsisq (int A)
   1960  -- Runtime Function: long long fract __fractsidq (int A)
   1961  -- Runtime Function: short accum __fractsiha (int A)
   1962  -- Runtime Function: accum __fractsisa (int A)
   1963  -- Runtime Function: long accum __fractsida (int A)
   1964  -- Runtime Function: long long accum __fractsita (int A)
   1965  -- Runtime Function: unsigned short fract __fractsiuqq (int A)
   1966  -- Runtime Function: unsigned fract __fractsiuhq (int A)
   1967  -- Runtime Function: unsigned long fract __fractsiusq (int A)
   1968  -- Runtime Function: unsigned long long fract __fractsiudq (int A)
   1969  -- Runtime Function: unsigned short accum __fractsiuha (int A)
   1970  -- Runtime Function: unsigned accum __fractsiusa (int A)
   1971  -- Runtime Function: unsigned long accum __fractsiuda (int A)
   1972  -- Runtime Function: unsigned long long accum __fractsiuta (int A)
   1973  -- Runtime Function: short fract __fractdiqq (long A)
   1974  -- Runtime Function: fract __fractdihq (long A)
   1975  -- Runtime Function: long fract __fractdisq (long A)
   1976  -- Runtime Function: long long fract __fractdidq (long A)
   1977  -- Runtime Function: short accum __fractdiha (long A)
   1978  -- Runtime Function: accum __fractdisa (long A)
   1979  -- Runtime Function: long accum __fractdida (long A)
   1980  -- Runtime Function: long long accum __fractdita (long A)
   1981  -- Runtime Function: unsigned short fract __fractdiuqq (long A)
   1982  -- Runtime Function: unsigned fract __fractdiuhq (long A)
   1983  -- Runtime Function: unsigned long fract __fractdiusq (long A)
   1984  -- Runtime Function: unsigned long long fract __fractdiudq (long A)
   1985  -- Runtime Function: unsigned short accum __fractdiuha (long A)
   1986  -- Runtime Function: unsigned accum __fractdiusa (long A)
   1987  -- Runtime Function: unsigned long accum __fractdiuda (long A)
   1988  -- Runtime Function: unsigned long long accum __fractdiuta (long A)
   1989  -- Runtime Function: short fract __fracttiqq (long long A)
   1990  -- Runtime Function: fract __fracttihq (long long A)
   1991  -- Runtime Function: long fract __fracttisq (long long A)
   1992  -- Runtime Function: long long fract __fracttidq (long long A)
   1993  -- Runtime Function: short accum __fracttiha (long long A)
   1994  -- Runtime Function: accum __fracttisa (long long A)
   1995  -- Runtime Function: long accum __fracttida (long long A)
   1996  -- Runtime Function: long long accum __fracttita (long long A)
   1997  -- Runtime Function: unsigned short fract __fracttiuqq (long long A)
   1998  -- Runtime Function: unsigned fract __fracttiuhq (long long A)
   1999  -- Runtime Function: unsigned long fract __fracttiusq (long long A)
   2000  -- Runtime Function: unsigned long long fract __fracttiudq (long long
   2001           A)
   2002  -- Runtime Function: unsigned short accum __fracttiuha (long long A)
   2003  -- Runtime Function: unsigned accum __fracttiusa (long long A)
   2004  -- Runtime Function: unsigned long accum __fracttiuda (long long A)
   2005  -- Runtime Function: unsigned long long accum __fracttiuta (long long
   2006           A)
   2007  -- Runtime Function: short fract __fractsfqq (float A)
   2008  -- Runtime Function: fract __fractsfhq (float A)
   2009  -- Runtime Function: long fract __fractsfsq (float A)
   2010  -- Runtime Function: long long fract __fractsfdq (float A)
   2011  -- Runtime Function: short accum __fractsfha (float A)
   2012  -- Runtime Function: accum __fractsfsa (float A)
   2013  -- Runtime Function: long accum __fractsfda (float A)
   2014  -- Runtime Function: long long accum __fractsfta (float A)
   2015  -- Runtime Function: unsigned short fract __fractsfuqq (float A)
   2016  -- Runtime Function: unsigned fract __fractsfuhq (float A)
   2017  -- Runtime Function: unsigned long fract __fractsfusq (float A)
   2018  -- Runtime Function: unsigned long long fract __fractsfudq (float A)
   2019  -- Runtime Function: unsigned short accum __fractsfuha (float A)
   2020  -- Runtime Function: unsigned accum __fractsfusa (float A)
   2021  -- Runtime Function: unsigned long accum __fractsfuda (float A)
   2022  -- Runtime Function: unsigned long long accum __fractsfuta (float A)
   2023  -- Runtime Function: short fract __fractdfqq (double A)
   2024  -- Runtime Function: fract __fractdfhq (double A)
   2025  -- Runtime Function: long fract __fractdfsq (double A)
   2026  -- Runtime Function: long long fract __fractdfdq (double A)
   2027  -- Runtime Function: short accum __fractdfha (double A)
   2028  -- Runtime Function: accum __fractdfsa (double A)
   2029  -- Runtime Function: long accum __fractdfda (double A)
   2030  -- Runtime Function: long long accum __fractdfta (double A)
   2031  -- Runtime Function: unsigned short fract __fractdfuqq (double A)
   2032  -- Runtime Function: unsigned fract __fractdfuhq (double A)
   2033  -- Runtime Function: unsigned long fract __fractdfusq (double A)
   2034  -- Runtime Function: unsigned long long fract __fractdfudq (double A)
   2035  -- Runtime Function: unsigned short accum __fractdfuha (double A)
   2036  -- Runtime Function: unsigned accum __fractdfusa (double A)
   2037  -- Runtime Function: unsigned long accum __fractdfuda (double A)
   2038  -- Runtime Function: unsigned long long accum __fractdfuta (double A)
   2039      These functions convert from fractional and signed non-fractionals
   2040      to fractionals and signed non-fractionals, without saturation.
   2041 
   2042  -- Runtime Function: fract __satfractqqhq2 (short fract A)
   2043  -- Runtime Function: long fract __satfractqqsq2 (short fract A)
   2044  -- Runtime Function: long long fract __satfractqqdq2 (short fract A)
   2045  -- Runtime Function: short accum __satfractqqha (short fract A)
   2046  -- Runtime Function: accum __satfractqqsa (short fract A)
   2047  -- Runtime Function: long accum __satfractqqda (short fract A)
   2048  -- Runtime Function: long long accum __satfractqqta (short fract A)
   2049  -- Runtime Function: unsigned short fract __satfractqquqq (short fract
   2050           A)
   2051  -- Runtime Function: unsigned fract __satfractqquhq (short fract A)
   2052  -- Runtime Function: unsigned long fract __satfractqqusq (short fract
   2053           A)
   2054  -- Runtime Function: unsigned long long fract __satfractqqudq (short
   2055           fract A)
   2056  -- Runtime Function: unsigned short accum __satfractqquha (short fract
   2057           A)
   2058  -- Runtime Function: unsigned accum __satfractqqusa (short fract A)
   2059  -- Runtime Function: unsigned long accum __satfractqquda (short fract
   2060           A)
   2061  -- Runtime Function: unsigned long long accum __satfractqquta (short
   2062           fract A)
   2063  -- Runtime Function: short fract __satfracthqqq2 (fract A)
   2064  -- Runtime Function: long fract __satfracthqsq2 (fract A)
   2065  -- Runtime Function: long long fract __satfracthqdq2 (fract A)
   2066  -- Runtime Function: short accum __satfracthqha (fract A)
   2067  -- Runtime Function: accum __satfracthqsa (fract A)
   2068  -- Runtime Function: long accum __satfracthqda (fract A)
   2069  -- Runtime Function: long long accum __satfracthqta (fract A)
   2070  -- Runtime Function: unsigned short fract __satfracthquqq (fract A)
   2071  -- Runtime Function: unsigned fract __satfracthquhq (fract A)
   2072  -- Runtime Function: unsigned long fract __satfracthqusq (fract A)
   2073  -- Runtime Function: unsigned long long fract __satfracthqudq (fract A)
   2074  -- Runtime Function: unsigned short accum __satfracthquha (fract A)
   2075  -- Runtime Function: unsigned accum __satfracthqusa (fract A)
   2076  -- Runtime Function: unsigned long accum __satfracthquda (fract A)
   2077  -- Runtime Function: unsigned long long accum __satfracthquta (fract A)
   2078  -- Runtime Function: short fract __satfractsqqq2 (long fract A)
   2079  -- Runtime Function: fract __satfractsqhq2 (long fract A)
   2080  -- Runtime Function: long long fract __satfractsqdq2 (long fract A)
   2081  -- Runtime Function: short accum __satfractsqha (long fract A)
   2082  -- Runtime Function: accum __satfractsqsa (long fract A)
   2083  -- Runtime Function: long accum __satfractsqda (long fract A)
   2084  -- Runtime Function: long long accum __satfractsqta (long fract A)
   2085  -- Runtime Function: unsigned short fract __satfractsquqq (long fract
   2086           A)
   2087  -- Runtime Function: unsigned fract __satfractsquhq (long fract A)
   2088  -- Runtime Function: unsigned long fract __satfractsqusq (long fract A)
   2089  -- Runtime Function: unsigned long long fract __satfractsqudq (long
   2090           fract A)
   2091  -- Runtime Function: unsigned short accum __satfractsquha (long fract
   2092           A)
   2093  -- Runtime Function: unsigned accum __satfractsqusa (long fract A)
   2094  -- Runtime Function: unsigned long accum __satfractsquda (long fract A)
   2095  -- Runtime Function: unsigned long long accum __satfractsquta (long
   2096           fract A)
   2097  -- Runtime Function: short fract __satfractdqqq2 (long long fract A)
   2098  -- Runtime Function: fract __satfractdqhq2 (long long fract A)
   2099  -- Runtime Function: long fract __satfractdqsq2 (long long fract A)
   2100  -- Runtime Function: short accum __satfractdqha (long long fract A)
   2101  -- Runtime Function: accum __satfractdqsa (long long fract A)
   2102  -- Runtime Function: long accum __satfractdqda (long long fract A)
   2103  -- Runtime Function: long long accum __satfractdqta (long long fract A)
   2104  -- Runtime Function: unsigned short fract __satfractdquqq (long long
   2105           fract A)
   2106  -- Runtime Function: unsigned fract __satfractdquhq (long long fract A)
   2107  -- Runtime Function: unsigned long fract __satfractdqusq (long long
   2108           fract A)
   2109  -- Runtime Function: unsigned long long fract __satfractdqudq (long
   2110           long fract A)
   2111  -- Runtime Function: unsigned short accum __satfractdquha (long long
   2112           fract A)
   2113  -- Runtime Function: unsigned accum __satfractdqusa (long long fract A)
   2114  -- Runtime Function: unsigned long accum __satfractdquda (long long
   2115           fract A)
   2116  -- Runtime Function: unsigned long long accum __satfractdquta (long
   2117           long fract A)
   2118  -- Runtime Function: short fract __satfracthaqq (short accum A)
   2119  -- Runtime Function: fract __satfracthahq (short accum A)
   2120  -- Runtime Function: long fract __satfracthasq (short accum A)
   2121  -- Runtime Function: long long fract __satfracthadq (short accum A)
   2122  -- Runtime Function: accum __satfracthasa2 (short accum A)
   2123  -- Runtime Function: long accum __satfracthada2 (short accum A)
   2124  -- Runtime Function: long long accum __satfracthata2 (short accum A)
   2125  -- Runtime Function: unsigned short fract __satfracthauqq (short accum
   2126           A)
   2127  -- Runtime Function: unsigned fract __satfracthauhq (short accum A)
   2128  -- Runtime Function: unsigned long fract __satfracthausq (short accum
   2129           A)
   2130  -- Runtime Function: unsigned long long fract __satfracthaudq (short
   2131           accum A)
   2132  -- Runtime Function: unsigned short accum __satfracthauha (short accum
   2133           A)
   2134  -- Runtime Function: unsigned accum __satfracthausa (short accum A)
   2135  -- Runtime Function: unsigned long accum __satfracthauda (short accum
   2136           A)
   2137  -- Runtime Function: unsigned long long accum __satfracthauta (short
   2138           accum A)
   2139  -- Runtime Function: short fract __satfractsaqq (accum A)
   2140  -- Runtime Function: fract __satfractsahq (accum A)
   2141  -- Runtime Function: long fract __satfractsasq (accum A)
   2142  -- Runtime Function: long long fract __satfractsadq (accum A)
   2143  -- Runtime Function: short accum __satfractsaha2 (accum A)
   2144  -- Runtime Function: long accum __satfractsada2 (accum A)
   2145  -- Runtime Function: long long accum __satfractsata2 (accum A)
   2146  -- Runtime Function: unsigned short fract __satfractsauqq (accum A)
   2147  -- Runtime Function: unsigned fract __satfractsauhq (accum A)
   2148  -- Runtime Function: unsigned long fract __satfractsausq (accum A)
   2149  -- Runtime Function: unsigned long long fract __satfractsaudq (accum A)
   2150  -- Runtime Function: unsigned short accum __satfractsauha (accum A)
   2151  -- Runtime Function: unsigned accum __satfractsausa (accum A)
   2152  -- Runtime Function: unsigned long accum __satfractsauda (accum A)
   2153  -- Runtime Function: unsigned long long accum __satfractsauta (accum A)
   2154  -- Runtime Function: short fract __satfractdaqq (long accum A)
   2155  -- Runtime Function: fract __satfractdahq (long accum A)
   2156  -- Runtime Function: long fract __satfractdasq (long accum A)
   2157  -- Runtime Function: long long fract __satfractdadq (long accum A)
   2158  -- Runtime Function: short accum __satfractdaha2 (long accum A)
   2159  -- Runtime Function: accum __satfractdasa2 (long accum A)
   2160  -- Runtime Function: long long accum __satfractdata2 (long accum A)
   2161  -- Runtime Function: unsigned short fract __satfractdauqq (long accum
   2162           A)
   2163  -- Runtime Function: unsigned fract __satfractdauhq (long accum A)
   2164  -- Runtime Function: unsigned long fract __satfractdausq (long accum A)
   2165  -- Runtime Function: unsigned long long fract __satfractdaudq (long
   2166           accum A)
   2167  -- Runtime Function: unsigned short accum __satfractdauha (long accum
   2168           A)
   2169  -- Runtime Function: unsigned accum __satfractdausa (long accum A)
   2170  -- Runtime Function: unsigned long accum __satfractdauda (long accum A)
   2171  -- Runtime Function: unsigned long long accum __satfractdauta (long
   2172           accum A)
   2173  -- Runtime Function: short fract __satfracttaqq (long long accum A)
   2174  -- Runtime Function: fract __satfracttahq (long long accum A)
   2175  -- Runtime Function: long fract __satfracttasq (long long accum A)
   2176  -- Runtime Function: long long fract __satfracttadq (long long accum A)
   2177  -- Runtime Function: short accum __satfracttaha2 (long long accum A)
   2178  -- Runtime Function: accum __satfracttasa2 (long long accum A)
   2179  -- Runtime Function: long accum __satfracttada2 (long long accum A)
   2180  -- Runtime Function: unsigned short fract __satfracttauqq (long long
   2181           accum A)
   2182  -- Runtime Function: unsigned fract __satfracttauhq (long long accum A)
   2183  -- Runtime Function: unsigned long fract __satfracttausq (long long
   2184           accum A)
   2185  -- Runtime Function: unsigned long long fract __satfracttaudq (long
   2186           long accum A)
   2187  -- Runtime Function: unsigned short accum __satfracttauha (long long
   2188           accum A)
   2189  -- Runtime Function: unsigned accum __satfracttausa (long long accum A)
   2190  -- Runtime Function: unsigned long accum __satfracttauda (long long
   2191           accum A)
   2192  -- Runtime Function: unsigned long long accum __satfracttauta (long
   2193           long accum A)
   2194  -- Runtime Function: short fract __satfractuqqqq (unsigned short fract
   2195           A)
   2196  -- Runtime Function: fract __satfractuqqhq (unsigned short fract A)
   2197  -- Runtime Function: long fract __satfractuqqsq (unsigned short fract
   2198           A)
   2199  -- Runtime Function: long long fract __satfractuqqdq (unsigned short
   2200           fract A)
   2201  -- Runtime Function: short accum __satfractuqqha (unsigned short fract
   2202           A)
   2203  -- Runtime Function: accum __satfractuqqsa (unsigned short fract A)
   2204  -- Runtime Function: long accum __satfractuqqda (unsigned short fract
   2205           A)
   2206  -- Runtime Function: long long accum __satfractuqqta (unsigned short
   2207           fract A)
   2208  -- Runtime Function: unsigned fract __satfractuqquhq2 (unsigned short
   2209           fract A)
   2210  -- Runtime Function: unsigned long fract __satfractuqqusq2 (unsigned
   2211           short fract A)
   2212  -- Runtime Function: unsigned long long fract __satfractuqqudq2
   2213           (unsigned short fract A)
   2214  -- Runtime Function: unsigned short accum __satfractuqquha (unsigned
   2215           short fract A)
   2216  -- Runtime Function: unsigned accum __satfractuqqusa (unsigned short
   2217           fract A)
   2218  -- Runtime Function: unsigned long accum __satfractuqquda (unsigned
   2219           short fract A)
   2220  -- Runtime Function: unsigned long long accum __satfractuqquta
   2221           (unsigned short fract A)
   2222  -- Runtime Function: short fract __satfractuhqqq (unsigned fract A)
   2223  -- Runtime Function: fract __satfractuhqhq (unsigned fract A)
   2224  -- Runtime Function: long fract __satfractuhqsq (unsigned fract A)
   2225  -- Runtime Function: long long fract __satfractuhqdq (unsigned fract A)
   2226  -- Runtime Function: short accum __satfractuhqha (unsigned fract A)
   2227  -- Runtime Function: accum __satfractuhqsa (unsigned fract A)
   2228  -- Runtime Function: long accum __satfractuhqda (unsigned fract A)
   2229  -- Runtime Function: long long accum __satfractuhqta (unsigned fract A)
   2230  -- Runtime Function: unsigned short fract __satfractuhquqq2 (unsigned
   2231           fract A)
   2232  -- Runtime Function: unsigned long fract __satfractuhqusq2 (unsigned
   2233           fract A)
   2234  -- Runtime Function: unsigned long long fract __satfractuhqudq2
   2235           (unsigned fract A)
   2236  -- Runtime Function: unsigned short accum __satfractuhquha (unsigned
   2237           fract A)
   2238  -- Runtime Function: unsigned accum __satfractuhqusa (unsigned fract A)
   2239  -- Runtime Function: unsigned long accum __satfractuhquda (unsigned
   2240           fract A)
   2241  -- Runtime Function: unsigned long long accum __satfractuhquta
   2242           (unsigned fract A)
   2243  -- Runtime Function: short fract __satfractusqqq (unsigned long fract
   2244           A)
   2245  -- Runtime Function: fract __satfractusqhq (unsigned long fract A)
   2246  -- Runtime Function: long fract __satfractusqsq (unsigned long fract A)
   2247  -- Runtime Function: long long fract __satfractusqdq (unsigned long
   2248           fract A)
   2249  -- Runtime Function: short accum __satfractusqha (unsigned long fract
   2250           A)
   2251  -- Runtime Function: accum __satfractusqsa (unsigned long fract A)
   2252  -- Runtime Function: long accum __satfractusqda (unsigned long fract A)
   2253  -- Runtime Function: long long accum __satfractusqta (unsigned long
   2254           fract A)
   2255  -- Runtime Function: unsigned short fract __satfractusquqq2 (unsigned
   2256           long fract A)
   2257  -- Runtime Function: unsigned fract __satfractusquhq2 (unsigned long
   2258           fract A)
   2259  -- Runtime Function: unsigned long long fract __satfractusqudq2
   2260           (unsigned long fract A)
   2261  -- Runtime Function: unsigned short accum __satfractusquha (unsigned
   2262           long fract A)
   2263  -- Runtime Function: unsigned accum __satfractusqusa (unsigned long
   2264           fract A)
   2265  -- Runtime Function: unsigned long accum __satfractusquda (unsigned
   2266           long fract A)
   2267  -- Runtime Function: unsigned long long accum __satfractusquta
   2268           (unsigned long fract A)
   2269  -- Runtime Function: short fract __satfractudqqq (unsigned long long
   2270           fract A)
   2271  -- Runtime Function: fract __satfractudqhq (unsigned long long fract A)
   2272  -- Runtime Function: long fract __satfractudqsq (unsigned long long
   2273           fract A)
   2274  -- Runtime Function: long long fract __satfractudqdq (unsigned long
   2275           long fract A)
   2276  -- Runtime Function: short accum __satfractudqha (unsigned long long
   2277           fract A)
   2278  -- Runtime Function: accum __satfractudqsa (unsigned long long fract A)
   2279  -- Runtime Function: long accum __satfractudqda (unsigned long long
   2280           fract A)
   2281  -- Runtime Function: long long accum __satfractudqta (unsigned long
   2282           long fract A)
   2283  -- Runtime Function: unsigned short fract __satfractudquqq2 (unsigned
   2284           long long fract A)
   2285  -- Runtime Function: unsigned fract __satfractudquhq2 (unsigned long
   2286           long fract A)
   2287  -- Runtime Function: unsigned long fract __satfractudqusq2 (unsigned
   2288           long long fract A)
   2289  -- Runtime Function: unsigned short accum __satfractudquha (unsigned
   2290           long long fract A)
   2291  -- Runtime Function: unsigned accum __satfractudqusa (unsigned long
   2292           long fract A)
   2293  -- Runtime Function: unsigned long accum __satfractudquda (unsigned
   2294           long long fract A)
   2295  -- Runtime Function: unsigned long long accum __satfractudquta
   2296           (unsigned long long fract A)
   2297  -- Runtime Function: short fract __satfractuhaqq (unsigned short accum
   2298           A)
   2299  -- Runtime Function: fract __satfractuhahq (unsigned short accum A)
   2300  -- Runtime Function: long fract __satfractuhasq (unsigned short accum
   2301           A)
   2302  -- Runtime Function: long long fract __satfractuhadq (unsigned short
   2303           accum A)
   2304  -- Runtime Function: short accum __satfractuhaha (unsigned short accum
   2305           A)
   2306  -- Runtime Function: accum __satfractuhasa (unsigned short accum A)
   2307  -- Runtime Function: long accum __satfractuhada (unsigned short accum
   2308           A)
   2309  -- Runtime Function: long long accum __satfractuhata (unsigned short
   2310           accum A)
   2311  -- Runtime Function: unsigned short fract __satfractuhauqq (unsigned
   2312           short accum A)
   2313  -- Runtime Function: unsigned fract __satfractuhauhq (unsigned short
   2314           accum A)
   2315  -- Runtime Function: unsigned long fract __satfractuhausq (unsigned
   2316           short accum A)
   2317  -- Runtime Function: unsigned long long fract __satfractuhaudq
   2318           (unsigned short accum A)
   2319  -- Runtime Function: unsigned accum __satfractuhausa2 (unsigned short
   2320           accum A)
   2321  -- Runtime Function: unsigned long accum __satfractuhauda2 (unsigned
   2322           short accum A)
   2323  -- Runtime Function: unsigned long long accum __satfractuhauta2
   2324           (unsigned short accum A)
   2325  -- Runtime Function: short fract __satfractusaqq (unsigned accum A)
   2326  -- Runtime Function: fract __satfractusahq (unsigned accum A)
   2327  -- Runtime Function: long fract __satfractusasq (unsigned accum A)
   2328  -- Runtime Function: long long fract __satfractusadq (unsigned accum A)
   2329  -- Runtime Function: short accum __satfractusaha (unsigned accum A)
   2330  -- Runtime Function: accum __satfractusasa (unsigned accum A)
   2331  -- Runtime Function: long accum __satfractusada (unsigned accum A)
   2332  -- Runtime Function: long long accum __satfractusata (unsigned accum A)
   2333  -- Runtime Function: unsigned short fract __satfractusauqq (unsigned
   2334           accum A)
   2335  -- Runtime Function: unsigned fract __satfractusauhq (unsigned accum A)
   2336  -- Runtime Function: unsigned long fract __satfractusausq (unsigned
   2337           accum A)
   2338  -- Runtime Function: unsigned long long fract __satfractusaudq
   2339           (unsigned accum A)
   2340  -- Runtime Function: unsigned short accum __satfractusauha2 (unsigned
   2341           accum A)
   2342  -- Runtime Function: unsigned long accum __satfractusauda2 (unsigned
   2343           accum A)
   2344  -- Runtime Function: unsigned long long accum __satfractusauta2
   2345           (unsigned accum A)
   2346  -- Runtime Function: short fract __satfractudaqq (unsigned long accum
   2347           A)
   2348  -- Runtime Function: fract __satfractudahq (unsigned long accum A)
   2349  -- Runtime Function: long fract __satfractudasq (unsigned long accum A)
   2350  -- Runtime Function: long long fract __satfractudadq (unsigned long
   2351           accum A)
   2352  -- Runtime Function: short accum __satfractudaha (unsigned long accum
   2353           A)
   2354  -- Runtime Function: accum __satfractudasa (unsigned long accum A)
   2355  -- Runtime Function: long accum __satfractudada (unsigned long accum A)
   2356  -- Runtime Function: long long accum __satfractudata (unsigned long
   2357           accum A)
   2358  -- Runtime Function: unsigned short fract __satfractudauqq (unsigned
   2359           long accum A)
   2360  -- Runtime Function: unsigned fract __satfractudauhq (unsigned long
   2361           accum A)
   2362  -- Runtime Function: unsigned long fract __satfractudausq (unsigned
   2363           long accum A)
   2364  -- Runtime Function: unsigned long long fract __satfractudaudq
   2365           (unsigned long accum A)
   2366  -- Runtime Function: unsigned short accum __satfractudauha2 (unsigned
   2367           long accum A)
   2368  -- Runtime Function: unsigned accum __satfractudausa2 (unsigned long
   2369           accum A)
   2370  -- Runtime Function: unsigned long long accum __satfractudauta2
   2371           (unsigned long accum A)
   2372  -- Runtime Function: short fract __satfractutaqq (unsigned long long
   2373           accum A)
   2374  -- Runtime Function: fract __satfractutahq (unsigned long long accum A)
   2375  -- Runtime Function: long fract __satfractutasq (unsigned long long
   2376           accum A)
   2377  -- Runtime Function: long long fract __satfractutadq (unsigned long
   2378           long accum A)
   2379  -- Runtime Function: short accum __satfractutaha (unsigned long long
   2380           accum A)
   2381  -- Runtime Function: accum __satfractutasa (unsigned long long accum A)
   2382  -- Runtime Function: long accum __satfractutada (unsigned long long
   2383           accum A)
   2384  -- Runtime Function: long long accum __satfractutata (unsigned long
   2385           long accum A)
   2386  -- Runtime Function: unsigned short fract __satfractutauqq (unsigned
   2387           long long accum A)
   2388  -- Runtime Function: unsigned fract __satfractutauhq (unsigned long
   2389           long accum A)
   2390  -- Runtime Function: unsigned long fract __satfractutausq (unsigned
   2391           long long accum A)
   2392  -- Runtime Function: unsigned long long fract __satfractutaudq
   2393           (unsigned long long accum A)
   2394  -- Runtime Function: unsigned short accum __satfractutauha2 (unsigned
   2395           long long accum A)
   2396  -- Runtime Function: unsigned accum __satfractutausa2 (unsigned long
   2397           long accum A)
   2398  -- Runtime Function: unsigned long accum __satfractutauda2 (unsigned
   2399           long long accum A)
   2400  -- Runtime Function: short fract __satfractqiqq (signed char A)
   2401  -- Runtime Function: fract __satfractqihq (signed char A)
   2402  -- Runtime Function: long fract __satfractqisq (signed char A)
   2403  -- Runtime Function: long long fract __satfractqidq (signed char A)
   2404  -- Runtime Function: short accum __satfractqiha (signed char A)
   2405  -- Runtime Function: accum __satfractqisa (signed char A)
   2406  -- Runtime Function: long accum __satfractqida (signed char A)
   2407  -- Runtime Function: long long accum __satfractqita (signed char A)
   2408  -- Runtime Function: unsigned short fract __satfractqiuqq (signed char
   2409           A)
   2410  -- Runtime Function: unsigned fract __satfractqiuhq (signed char A)
   2411  -- Runtime Function: unsigned long fract __satfractqiusq (signed char
   2412           A)
   2413  -- Runtime Function: unsigned long long fract __satfractqiudq (signed
   2414           char A)
   2415  -- Runtime Function: unsigned short accum __satfractqiuha (signed char
   2416           A)
   2417  -- Runtime Function: unsigned accum __satfractqiusa (signed char A)
   2418  -- Runtime Function: unsigned long accum __satfractqiuda (signed char
   2419           A)
   2420  -- Runtime Function: unsigned long long accum __satfractqiuta (signed
   2421           char A)
   2422  -- Runtime Function: short fract __satfracthiqq (short A)
   2423  -- Runtime Function: fract __satfracthihq (short A)
   2424  -- Runtime Function: long fract __satfracthisq (short A)
   2425  -- Runtime Function: long long fract __satfracthidq (short A)
   2426  -- Runtime Function: short accum __satfracthiha (short A)
   2427  -- Runtime Function: accum __satfracthisa (short A)
   2428  -- Runtime Function: long accum __satfracthida (short A)
   2429  -- Runtime Function: long long accum __satfracthita (short A)
   2430  -- Runtime Function: unsigned short fract __satfracthiuqq (short A)
   2431  -- Runtime Function: unsigned fract __satfracthiuhq (short A)
   2432  -- Runtime Function: unsigned long fract __satfracthiusq (short A)
   2433  -- Runtime Function: unsigned long long fract __satfracthiudq (short A)
   2434  -- Runtime Function: unsigned short accum __satfracthiuha (short A)
   2435  -- Runtime Function: unsigned accum __satfracthiusa (short A)
   2436  -- Runtime Function: unsigned long accum __satfracthiuda (short A)
   2437  -- Runtime Function: unsigned long long accum __satfracthiuta (short A)
   2438  -- Runtime Function: short fract __satfractsiqq (int A)
   2439  -- Runtime Function: fract __satfractsihq (int A)
   2440  -- Runtime Function: long fract __satfractsisq (int A)
   2441  -- Runtime Function: long long fract __satfractsidq (int A)
   2442  -- Runtime Function: short accum __satfractsiha (int A)
   2443  -- Runtime Function: accum __satfractsisa (int A)
   2444  -- Runtime Function: long accum __satfractsida (int A)
   2445  -- Runtime Function: long long accum __satfractsita (int A)
   2446  -- Runtime Function: unsigned short fract __satfractsiuqq (int A)
   2447  -- Runtime Function: unsigned fract __satfractsiuhq (int A)
   2448  -- Runtime Function: unsigned long fract __satfractsiusq (int A)
   2449  -- Runtime Function: unsigned long long fract __satfractsiudq (int A)
   2450  -- Runtime Function: unsigned short accum __satfractsiuha (int A)
   2451  -- Runtime Function: unsigned accum __satfractsiusa (int A)
   2452  -- Runtime Function: unsigned long accum __satfractsiuda (int A)
   2453  -- Runtime Function: unsigned long long accum __satfractsiuta (int A)
   2454  -- Runtime Function: short fract __satfractdiqq (long A)
   2455  -- Runtime Function: fract __satfractdihq (long A)
   2456  -- Runtime Function: long fract __satfractdisq (long A)
   2457  -- Runtime Function: long long fract __satfractdidq (long A)
   2458  -- Runtime Function: short accum __satfractdiha (long A)
   2459  -- Runtime Function: accum __satfractdisa (long A)
   2460  -- Runtime Function: long accum __satfractdida (long A)
   2461  -- Runtime Function: long long accum __satfractdita (long A)
   2462  -- Runtime Function: unsigned short fract __satfractdiuqq (long A)
   2463  -- Runtime Function: unsigned fract __satfractdiuhq (long A)
   2464  -- Runtime Function: unsigned long fract __satfractdiusq (long A)
   2465  -- Runtime Function: unsigned long long fract __satfractdiudq (long A)
   2466  -- Runtime Function: unsigned short accum __satfractdiuha (long A)
   2467  -- Runtime Function: unsigned accum __satfractdiusa (long A)
   2468  -- Runtime Function: unsigned long accum __satfractdiuda (long A)
   2469  -- Runtime Function: unsigned long long accum __satfractdiuta (long A)
   2470  -- Runtime Function: short fract __satfracttiqq (long long A)
   2471  -- Runtime Function: fract __satfracttihq (long long A)
   2472  -- Runtime Function: long fract __satfracttisq (long long A)
   2473  -- Runtime Function: long long fract __satfracttidq (long long A)
   2474  -- Runtime Function: short accum __satfracttiha (long long A)
   2475  -- Runtime Function: accum __satfracttisa (long long A)
   2476  -- Runtime Function: long accum __satfracttida (long long A)
   2477  -- Runtime Function: long long accum __satfracttita (long long A)
   2478  -- Runtime Function: unsigned short fract __satfracttiuqq (long long A)
   2479  -- Runtime Function: unsigned fract __satfracttiuhq (long long A)
   2480  -- Runtime Function: unsigned long fract __satfracttiusq (long long A)
   2481  -- Runtime Function: unsigned long long fract __satfracttiudq (long
   2482           long A)
   2483  -- Runtime Function: unsigned short accum __satfracttiuha (long long A)
   2484  -- Runtime Function: unsigned accum __satfracttiusa (long long A)
   2485  -- Runtime Function: unsigned long accum __satfracttiuda (long long A)
   2486  -- Runtime Function: unsigned long long accum __satfracttiuta (long
   2487           long A)
   2488  -- Runtime Function: short fract __satfractsfqq (float A)
   2489  -- Runtime Function: fract __satfractsfhq (float A)
   2490  -- Runtime Function: long fract __satfractsfsq (float A)
   2491  -- Runtime Function: long long fract __satfractsfdq (float A)
   2492  -- Runtime Function: short accum __satfractsfha (float A)
   2493  -- Runtime Function: accum __satfractsfsa (float A)
   2494  -- Runtime Function: long accum __satfractsfda (float A)
   2495  -- Runtime Function: long long accum __satfractsfta (float A)
   2496  -- Runtime Function: unsigned short fract __satfractsfuqq (float A)
   2497  -- Runtime Function: unsigned fract __satfractsfuhq (float A)
   2498  -- Runtime Function: unsigned long fract __satfractsfusq (float A)
   2499  -- Runtime Function: unsigned long long fract __satfractsfudq (float A)
   2500  -- Runtime Function: unsigned short accum __satfractsfuha (float A)
   2501  -- Runtime Function: unsigned accum __satfractsfusa (float A)
   2502  -- Runtime Function: unsigned long accum __satfractsfuda (float A)
   2503  -- Runtime Function: unsigned long long accum __satfractsfuta (float A)
   2504  -- Runtime Function: short fract __satfractdfqq (double A)
   2505  -- Runtime Function: fract __satfractdfhq (double A)
   2506  -- Runtime Function: long fract __satfractdfsq (double A)
   2507  -- Runtime Function: long long fract __satfractdfdq (double A)
   2508  -- Runtime Function: short accum __satfractdfha (double A)
   2509  -- Runtime Function: accum __satfractdfsa (double A)
   2510  -- Runtime Function: long accum __satfractdfda (double A)
   2511  -- Runtime Function: long long accum __satfractdfta (double A)
   2512  -- Runtime Function: unsigned short fract __satfractdfuqq (double A)
   2513  -- Runtime Function: unsigned fract __satfractdfuhq (double A)
   2514  -- Runtime Function: unsigned long fract __satfractdfusq (double A)
   2515  -- Runtime Function: unsigned long long fract __satfractdfudq (double
   2516           A)
   2517  -- Runtime Function: unsigned short accum __satfractdfuha (double A)
   2518  -- Runtime Function: unsigned accum __satfractdfusa (double A)
   2519  -- Runtime Function: unsigned long accum __satfractdfuda (double A)
   2520  -- Runtime Function: unsigned long long accum __satfractdfuta (double
   2521           A)
   2522      The functions convert from fractional and signed non-fractionals to
   2523      fractionals, with saturation.
   2524 
   2525  -- Runtime Function: unsigned char __fractunsqqqi (short fract A)
   2526  -- Runtime Function: unsigned short __fractunsqqhi (short fract A)
   2527  -- Runtime Function: unsigned int __fractunsqqsi (short fract A)
   2528  -- Runtime Function: unsigned long __fractunsqqdi (short fract A)
   2529  -- Runtime Function: unsigned long long __fractunsqqti (short fract A)
   2530  -- Runtime Function: unsigned char __fractunshqqi (fract A)
   2531  -- Runtime Function: unsigned short __fractunshqhi (fract A)
   2532  -- Runtime Function: unsigned int __fractunshqsi (fract A)
   2533  -- Runtime Function: unsigned long __fractunshqdi (fract A)
   2534  -- Runtime Function: unsigned long long __fractunshqti (fract A)
   2535  -- Runtime Function: unsigned char __fractunssqqi (long fract A)
   2536  -- Runtime Function: unsigned short __fractunssqhi (long fract A)
   2537  -- Runtime Function: unsigned int __fractunssqsi (long fract A)
   2538  -- Runtime Function: unsigned long __fractunssqdi (long fract A)
   2539  -- Runtime Function: unsigned long long __fractunssqti (long fract A)
   2540  -- Runtime Function: unsigned char __fractunsdqqi (long long fract A)
   2541  -- Runtime Function: unsigned short __fractunsdqhi (long long fract A)
   2542  -- Runtime Function: unsigned int __fractunsdqsi (long long fract A)
   2543  -- Runtime Function: unsigned long __fractunsdqdi (long long fract A)
   2544  -- Runtime Function: unsigned long long __fractunsdqti (long long
   2545           fract A)
   2546  -- Runtime Function: unsigned char __fractunshaqi (short accum A)
   2547  -- Runtime Function: unsigned short __fractunshahi (short accum A)
   2548  -- Runtime Function: unsigned int __fractunshasi (short accum A)
   2549  -- Runtime Function: unsigned long __fractunshadi (short accum A)
   2550  -- Runtime Function: unsigned long long __fractunshati (short accum A)
   2551  -- Runtime Function: unsigned char __fractunssaqi (accum A)
   2552  -- Runtime Function: unsigned short __fractunssahi (accum A)
   2553  -- Runtime Function: unsigned int __fractunssasi (accum A)
   2554  -- Runtime Function: unsigned long __fractunssadi (accum A)
   2555  -- Runtime Function: unsigned long long __fractunssati (accum A)
   2556  -- Runtime Function: unsigned char __fractunsdaqi (long accum A)
   2557  -- Runtime Function: unsigned short __fractunsdahi (long accum A)
   2558  -- Runtime Function: unsigned int __fractunsdasi (long accum A)
   2559  -- Runtime Function: unsigned long __fractunsdadi (long accum A)
   2560  -- Runtime Function: unsigned long long __fractunsdati (long accum A)
   2561  -- Runtime Function: unsigned char __fractunstaqi (long long accum A)
   2562  -- Runtime Function: unsigned short __fractunstahi (long long accum A)
   2563  -- Runtime Function: unsigned int __fractunstasi (long long accum A)
   2564  -- Runtime Function: unsigned long __fractunstadi (long long accum A)
   2565  -- Runtime Function: unsigned long long __fractunstati (long long
   2566           accum A)
   2567  -- Runtime Function: unsigned char __fractunsuqqqi (unsigned short
   2568           fract A)
   2569  -- Runtime Function: unsigned short __fractunsuqqhi (unsigned short
   2570           fract A)
   2571  -- Runtime Function: unsigned int __fractunsuqqsi (unsigned short
   2572           fract A)
   2573  -- Runtime Function: unsigned long __fractunsuqqdi (unsigned short
   2574           fract A)
   2575  -- Runtime Function: unsigned long long __fractunsuqqti (unsigned
   2576           short fract A)
   2577  -- Runtime Function: unsigned char __fractunsuhqqi (unsigned fract A)
   2578  -- Runtime Function: unsigned short __fractunsuhqhi (unsigned fract A)
   2579  -- Runtime Function: unsigned int __fractunsuhqsi (unsigned fract A)
   2580  -- Runtime Function: unsigned long __fractunsuhqdi (unsigned fract A)
   2581  -- Runtime Function: unsigned long long __fractunsuhqti (unsigned
   2582           fract A)
   2583  -- Runtime Function: unsigned char __fractunsusqqi (unsigned long
   2584           fract A)
   2585  -- Runtime Function: unsigned short __fractunsusqhi (unsigned long
   2586           fract A)
   2587  -- Runtime Function: unsigned int __fractunsusqsi (unsigned long fract
   2588           A)
   2589  -- Runtime Function: unsigned long __fractunsusqdi (unsigned long
   2590           fract A)
   2591  -- Runtime Function: unsigned long long __fractunsusqti (unsigned long
   2592           fract A)
   2593  -- Runtime Function: unsigned char __fractunsudqqi (unsigned long long
   2594           fract A)
   2595  -- Runtime Function: unsigned short __fractunsudqhi (unsigned long
   2596           long fract A)
   2597  -- Runtime Function: unsigned int __fractunsudqsi (unsigned long long
   2598           fract A)
   2599  -- Runtime Function: unsigned long __fractunsudqdi (unsigned long long
   2600           fract A)
   2601  -- Runtime Function: unsigned long long __fractunsudqti (unsigned long
   2602           long fract A)
   2603  -- Runtime Function: unsigned char __fractunsuhaqi (unsigned short
   2604           accum A)
   2605  -- Runtime Function: unsigned short __fractunsuhahi (unsigned short
   2606           accum A)
   2607  -- Runtime Function: unsigned int __fractunsuhasi (unsigned short
   2608           accum A)
   2609  -- Runtime Function: unsigned long __fractunsuhadi (unsigned short
   2610           accum A)
   2611  -- Runtime Function: unsigned long long __fractunsuhati (unsigned
   2612           short accum A)
   2613  -- Runtime Function: unsigned char __fractunsusaqi (unsigned accum A)
   2614  -- Runtime Function: unsigned short __fractunsusahi (unsigned accum A)
   2615  -- Runtime Function: unsigned int __fractunsusasi (unsigned accum A)
   2616  -- Runtime Function: unsigned long __fractunsusadi (unsigned accum A)
   2617  -- Runtime Function: unsigned long long __fractunsusati (unsigned
   2618           accum A)
   2619  -- Runtime Function: unsigned char __fractunsudaqi (unsigned long
   2620           accum A)
   2621  -- Runtime Function: unsigned short __fractunsudahi (unsigned long
   2622           accum A)
   2623  -- Runtime Function: unsigned int __fractunsudasi (unsigned long accum
   2624           A)
   2625  -- Runtime Function: unsigned long __fractunsudadi (unsigned long
   2626           accum A)
   2627  -- Runtime Function: unsigned long long __fractunsudati (unsigned long
   2628           accum A)
   2629  -- Runtime Function: unsigned char __fractunsutaqi (unsigned long long
   2630           accum A)
   2631  -- Runtime Function: unsigned short __fractunsutahi (unsigned long
   2632           long accum A)
   2633  -- Runtime Function: unsigned int __fractunsutasi (unsigned long long
   2634           accum A)
   2635  -- Runtime Function: unsigned long __fractunsutadi (unsigned long long
   2636           accum A)
   2637  -- Runtime Function: unsigned long long __fractunsutati (unsigned long
   2638           long accum A)
   2639  -- Runtime Function: short fract __fractunsqiqq (unsigned char A)
   2640  -- Runtime Function: fract __fractunsqihq (unsigned char A)
   2641  -- Runtime Function: long fract __fractunsqisq (unsigned char A)
   2642  -- Runtime Function: long long fract __fractunsqidq (unsigned char A)
   2643  -- Runtime Function: short accum __fractunsqiha (unsigned char A)
   2644  -- Runtime Function: accum __fractunsqisa (unsigned char A)
   2645  -- Runtime Function: long accum __fractunsqida (unsigned char A)
   2646  -- Runtime Function: long long accum __fractunsqita (unsigned char A)
   2647  -- Runtime Function: unsigned short fract __fractunsqiuqq (unsigned
   2648           char A)
   2649  -- Runtime Function: unsigned fract __fractunsqiuhq (unsigned char A)
   2650  -- Runtime Function: unsigned long fract __fractunsqiusq (unsigned
   2651           char A)
   2652  -- Runtime Function: unsigned long long fract __fractunsqiudq
   2653           (unsigned char A)
   2654  -- Runtime Function: unsigned short accum __fractunsqiuha (unsigned
   2655           char A)
   2656  -- Runtime Function: unsigned accum __fractunsqiusa (unsigned char A)
   2657  -- Runtime Function: unsigned long accum __fractunsqiuda (unsigned
   2658           char A)
   2659  -- Runtime Function: unsigned long long accum __fractunsqiuta
   2660           (unsigned char A)
   2661  -- Runtime Function: short fract __fractunshiqq (unsigned short A)
   2662  -- Runtime Function: fract __fractunshihq (unsigned short A)
   2663  -- Runtime Function: long fract __fractunshisq (unsigned short A)
   2664  -- Runtime Function: long long fract __fractunshidq (unsigned short A)
   2665  -- Runtime Function: short accum __fractunshiha (unsigned short A)
   2666  -- Runtime Function: accum __fractunshisa (unsigned short A)
   2667  -- Runtime Function: long accum __fractunshida (unsigned short A)
   2668  -- Runtime Function: long long accum __fractunshita (unsigned short A)
   2669  -- Runtime Function: unsigned short fract __fractunshiuqq (unsigned
   2670           short A)
   2671  -- Runtime Function: unsigned fract __fractunshiuhq (unsigned short A)
   2672  -- Runtime Function: unsigned long fract __fractunshiusq (unsigned
   2673           short A)
   2674  -- Runtime Function: unsigned long long fract __fractunshiudq
   2675           (unsigned short A)
   2676  -- Runtime Function: unsigned short accum __fractunshiuha (unsigned
   2677           short A)
   2678  -- Runtime Function: unsigned accum __fractunshiusa (unsigned short A)
   2679  -- Runtime Function: unsigned long accum __fractunshiuda (unsigned
   2680           short A)
   2681  -- Runtime Function: unsigned long long accum __fractunshiuta
   2682           (unsigned short A)
   2683  -- Runtime Function: short fract __fractunssiqq (unsigned int A)
   2684  -- Runtime Function: fract __fractunssihq (unsigned int A)
   2685  -- Runtime Function: long fract __fractunssisq (unsigned int A)
   2686  -- Runtime Function: long long fract __fractunssidq (unsigned int A)
   2687  -- Runtime Function: short accum __fractunssiha (unsigned int A)
   2688  -- Runtime Function: accum __fractunssisa (unsigned int A)
   2689  -- Runtime Function: long accum __fractunssida (unsigned int A)
   2690  -- Runtime Function: long long accum __fractunssita (unsigned int A)
   2691  -- Runtime Function: unsigned short fract __fractunssiuqq (unsigned
   2692           int A)
   2693  -- Runtime Function: unsigned fract __fractunssiuhq (unsigned int A)
   2694  -- Runtime Function: unsigned long fract __fractunssiusq (unsigned int
   2695           A)
   2696  -- Runtime Function: unsigned long long fract __fractunssiudq
   2697           (unsigned int A)
   2698  -- Runtime Function: unsigned short accum __fractunssiuha (unsigned
   2699           int A)
   2700  -- Runtime Function: unsigned accum __fractunssiusa (unsigned int A)
   2701  -- Runtime Function: unsigned long accum __fractunssiuda (unsigned int
   2702           A)
   2703  -- Runtime Function: unsigned long long accum __fractunssiuta
   2704           (unsigned int A)
   2705  -- Runtime Function: short fract __fractunsdiqq (unsigned long A)
   2706  -- Runtime Function: fract __fractunsdihq (unsigned long A)
   2707  -- Runtime Function: long fract __fractunsdisq (unsigned long A)
   2708  -- Runtime Function: long long fract __fractunsdidq (unsigned long A)
   2709  -- Runtime Function: short accum __fractunsdiha (unsigned long A)
   2710  -- Runtime Function: accum __fractunsdisa (unsigned long A)
   2711  -- Runtime Function: long accum __fractunsdida (unsigned long A)
   2712  -- Runtime Function: long long accum __fractunsdita (unsigned long A)
   2713  -- Runtime Function: unsigned short fract __fractunsdiuqq (unsigned
   2714           long A)
   2715  -- Runtime Function: unsigned fract __fractunsdiuhq (unsigned long A)
   2716  -- Runtime Function: unsigned long fract __fractunsdiusq (unsigned
   2717           long A)
   2718  -- Runtime Function: unsigned long long fract __fractunsdiudq
   2719           (unsigned long A)
   2720  -- Runtime Function: unsigned short accum __fractunsdiuha (unsigned
   2721           long A)
   2722  -- Runtime Function: unsigned accum __fractunsdiusa (unsigned long A)
   2723  -- Runtime Function: unsigned long accum __fractunsdiuda (unsigned
   2724           long A)
   2725  -- Runtime Function: unsigned long long accum __fractunsdiuta
   2726           (unsigned long A)
   2727  -- Runtime Function: short fract __fractunstiqq (unsigned long long A)
   2728  -- Runtime Function: fract __fractunstihq (unsigned long long A)
   2729  -- Runtime Function: long fract __fractunstisq (unsigned long long A)
   2730  -- Runtime Function: long long fract __fractunstidq (unsigned long
   2731           long A)
   2732  -- Runtime Function: short accum __fractunstiha (unsigned long long A)
   2733  -- Runtime Function: accum __fractunstisa (unsigned long long A)
   2734  -- Runtime Function: long accum __fractunstida (unsigned long long A)
   2735  -- Runtime Function: long long accum __fractunstita (unsigned long
   2736           long A)
   2737  -- Runtime Function: unsigned short fract __fractunstiuqq (unsigned
   2738           long long A)
   2739  -- Runtime Function: unsigned fract __fractunstiuhq (unsigned long
   2740           long A)
   2741  -- Runtime Function: unsigned long fract __fractunstiusq (unsigned
   2742           long long A)
   2743  -- Runtime Function: unsigned long long fract __fractunstiudq
   2744           (unsigned long long A)
   2745  -- Runtime Function: unsigned short accum __fractunstiuha (unsigned
   2746           long long A)
   2747  -- Runtime Function: unsigned accum __fractunstiusa (unsigned long
   2748           long A)
   2749  -- Runtime Function: unsigned long accum __fractunstiuda (unsigned
   2750           long long A)
   2751  -- Runtime Function: unsigned long long accum __fractunstiuta
   2752           (unsigned long long A)
   2753      These functions convert from fractionals to unsigned
   2754      non-fractionals; and from unsigned non-fractionals to fractionals,
   2755      without saturation.
   2756 
   2757  -- Runtime Function: short fract __satfractunsqiqq (unsigned char A)
   2758  -- Runtime Function: fract __satfractunsqihq (unsigned char A)
   2759  -- Runtime Function: long fract __satfractunsqisq (unsigned char A)
   2760  -- Runtime Function: long long fract __satfractunsqidq (unsigned char
   2761           A)
   2762  -- Runtime Function: short accum __satfractunsqiha (unsigned char A)
   2763  -- Runtime Function: accum __satfractunsqisa (unsigned char A)
   2764  -- Runtime Function: long accum __satfractunsqida (unsigned char A)
   2765  -- Runtime Function: long long accum __satfractunsqita (unsigned char
   2766           A)
   2767  -- Runtime Function: unsigned short fract __satfractunsqiuqq (unsigned
   2768           char A)
   2769  -- Runtime Function: unsigned fract __satfractunsqiuhq (unsigned char
   2770           A)
   2771  -- Runtime Function: unsigned long fract __satfractunsqiusq (unsigned
   2772           char A)
   2773  -- Runtime Function: unsigned long long fract __satfractunsqiudq
   2774           (unsigned char A)
   2775  -- Runtime Function: unsigned short accum __satfractunsqiuha (unsigned
   2776           char A)
   2777  -- Runtime Function: unsigned accum __satfractunsqiusa (unsigned char
   2778           A)
   2779  -- Runtime Function: unsigned long accum __satfractunsqiuda (unsigned
   2780           char A)
   2781  -- Runtime Function: unsigned long long accum __satfractunsqiuta
   2782           (unsigned char A)
   2783  -- Runtime Function: short fract __satfractunshiqq (unsigned short A)
   2784  -- Runtime Function: fract __satfractunshihq (unsigned short A)
   2785  -- Runtime Function: long fract __satfractunshisq (unsigned short A)
   2786  -- Runtime Function: long long fract __satfractunshidq (unsigned short
   2787           A)
   2788  -- Runtime Function: short accum __satfractunshiha (unsigned short A)
   2789  -- Runtime Function: accum __satfractunshisa (unsigned short A)
   2790  -- Runtime Function: long accum __satfractunshida (unsigned short A)
   2791  -- Runtime Function: long long accum __satfractunshita (unsigned short
   2792           A)
   2793  -- Runtime Function: unsigned short fract __satfractunshiuqq (unsigned
   2794           short A)
   2795  -- Runtime Function: unsigned fract __satfractunshiuhq (unsigned short
   2796           A)
   2797  -- Runtime Function: unsigned long fract __satfractunshiusq (unsigned
   2798           short A)
   2799  -- Runtime Function: unsigned long long fract __satfractunshiudq
   2800           (unsigned short A)
   2801  -- Runtime Function: unsigned short accum __satfractunshiuha (unsigned
   2802           short A)
   2803  -- Runtime Function: unsigned accum __satfractunshiusa (unsigned short
   2804           A)
   2805  -- Runtime Function: unsigned long accum __satfractunshiuda (unsigned
   2806           short A)
   2807  -- Runtime Function: unsigned long long accum __satfractunshiuta
   2808           (unsigned short A)
   2809  -- Runtime Function: short fract __satfractunssiqq (unsigned int A)
   2810  -- Runtime Function: fract __satfractunssihq (unsigned int A)
   2811  -- Runtime Function: long fract __satfractunssisq (unsigned int A)
   2812  -- Runtime Function: long long fract __satfractunssidq (unsigned int A)
   2813  -- Runtime Function: short accum __satfractunssiha (unsigned int A)
   2814  -- Runtime Function: accum __satfractunssisa (unsigned int A)
   2815  -- Runtime Function: long accum __satfractunssida (unsigned int A)
   2816  -- Runtime Function: long long accum __satfractunssita (unsigned int A)
   2817  -- Runtime Function: unsigned short fract __satfractunssiuqq (unsigned
   2818           int A)
   2819  -- Runtime Function: unsigned fract __satfractunssiuhq (unsigned int A)
   2820  -- Runtime Function: unsigned long fract __satfractunssiusq (unsigned
   2821           int A)
   2822  -- Runtime Function: unsigned long long fract __satfractunssiudq
   2823           (unsigned int A)
   2824  -- Runtime Function: unsigned short accum __satfractunssiuha (unsigned
   2825           int A)
   2826  -- Runtime Function: unsigned accum __satfractunssiusa (unsigned int A)
   2827  -- Runtime Function: unsigned long accum __satfractunssiuda (unsigned
   2828           int A)
   2829  -- Runtime Function: unsigned long long accum __satfractunssiuta
   2830           (unsigned int A)
   2831  -- Runtime Function: short fract __satfractunsdiqq (unsigned long A)
   2832  -- Runtime Function: fract __satfractunsdihq (unsigned long A)
   2833  -- Runtime Function: long fract __satfractunsdisq (unsigned long A)
   2834  -- Runtime Function: long long fract __satfractunsdidq (unsigned long
   2835           A)
   2836  -- Runtime Function: short accum __satfractunsdiha (unsigned long A)
   2837  -- Runtime Function: accum __satfractunsdisa (unsigned long A)
   2838  -- Runtime Function: long accum __satfractunsdida (unsigned long A)
   2839  -- Runtime Function: long long accum __satfractunsdita (unsigned long
   2840           A)
   2841  -- Runtime Function: unsigned short fract __satfractunsdiuqq (unsigned
   2842           long A)
   2843  -- Runtime Function: unsigned fract __satfractunsdiuhq (unsigned long
   2844           A)
   2845  -- Runtime Function: unsigned long fract __satfractunsdiusq (unsigned
   2846           long A)
   2847  -- Runtime Function: unsigned long long fract __satfractunsdiudq
   2848           (unsigned long A)
   2849  -- Runtime Function: unsigned short accum __satfractunsdiuha (unsigned
   2850           long A)
   2851  -- Runtime Function: unsigned accum __satfractunsdiusa (unsigned long
   2852           A)
   2853  -- Runtime Function: unsigned long accum __satfractunsdiuda (unsigned
   2854           long A)
   2855  -- Runtime Function: unsigned long long accum __satfractunsdiuta
   2856           (unsigned long A)
   2857  -- Runtime Function: short fract __satfractunstiqq (unsigned long long
   2858           A)
   2859  -- Runtime Function: fract __satfractunstihq (unsigned long long A)
   2860  -- Runtime Function: long fract __satfractunstisq (unsigned long long
   2861           A)
   2862  -- Runtime Function: long long fract __satfractunstidq (unsigned long
   2863           long A)
   2864  -- Runtime Function: short accum __satfractunstiha (unsigned long long
   2865           A)
   2866  -- Runtime Function: accum __satfractunstisa (unsigned long long A)
   2867  -- Runtime Function: long accum __satfractunstida (unsigned long long
   2868           A)
   2869  -- Runtime Function: long long accum __satfractunstita (unsigned long
   2870           long A)
   2871  -- Runtime Function: unsigned short fract __satfractunstiuqq (unsigned
   2872           long long A)
   2873  -- Runtime Function: unsigned fract __satfractunstiuhq (unsigned long
   2874           long A)
   2875  -- Runtime Function: unsigned long fract __satfractunstiusq (unsigned
   2876           long long A)
   2877  -- Runtime Function: unsigned long long fract __satfractunstiudq
   2878           (unsigned long long A)
   2879  -- Runtime Function: unsigned short accum __satfractunstiuha (unsigned
   2880           long long A)
   2881  -- Runtime Function: unsigned accum __satfractunstiusa (unsigned long
   2882           long A)
   2883  -- Runtime Function: unsigned long accum __satfractunstiuda (unsigned
   2884           long long A)
   2885  -- Runtime Function: unsigned long long accum __satfractunstiuta
   2886           (unsigned long long A)
   2887      These functions convert from unsigned non-fractionals to
   2888      fractionals, with saturation.
   2889 
   2890 
   2891 File: gccint.info,  Node: Exception handling routines,  Next: Miscellaneous routines,  Prev: Fixed-point fractional library routines,  Up: Libgcc
   2892 
   2893 4.5 Language-independent routines for exception handling
   2894 ========================================================
   2895 
   2896 document me!
   2897 
   2898        _Unwind_DeleteException
   2899        _Unwind_Find_FDE
   2900        _Unwind_ForcedUnwind
   2901        _Unwind_GetGR
   2902        _Unwind_GetIP
   2903        _Unwind_GetLanguageSpecificData
   2904        _Unwind_GetRegionStart
   2905        _Unwind_GetTextRelBase
   2906        _Unwind_GetDataRelBase
   2907        _Unwind_RaiseException
   2908        _Unwind_Resume
   2909        _Unwind_SetGR
   2910        _Unwind_SetIP
   2911        _Unwind_FindEnclosingFunction
   2912        _Unwind_SjLj_Register
   2913        _Unwind_SjLj_Unregister
   2914        _Unwind_SjLj_RaiseException
   2915        _Unwind_SjLj_ForcedUnwind
   2916        _Unwind_SjLj_Resume
   2917        __deregister_frame
   2918        __deregister_frame_info
   2919        __deregister_frame_info_bases
   2920        __register_frame
   2921        __register_frame_info
   2922        __register_frame_info_bases
   2923        __register_frame_info_table
   2924        __register_frame_info_table_bases
   2925        __register_frame_table
   2926 
   2927 
   2928 File: gccint.info,  Node: Miscellaneous routines,  Prev: Exception handling routines,  Up: Libgcc
   2929 
   2930 4.6 Miscellaneous runtime library routines
   2931 ==========================================
   2932 
   2933 4.6.1 Cache control functions
   2934 -----------------------------
   2935 
   2936  -- Runtime Function: void __clear_cache (char *BEG, char *END)
   2937      This function clears the instruction cache between BEG and END.
   2938 
   2939 
   2940 File: gccint.info,  Node: Languages,  Next: Source Tree,  Prev: Libgcc,  Up: Top
   2941 
   2942 5 Language Front Ends in GCC
   2943 ****************************
   2944 
   2945 The interface to front ends for languages in GCC, and in particular the
   2946 `tree' structure (*note Trees::), was initially designed for C, and
   2947 many aspects of it are still somewhat biased towards C and C-like
   2948 languages.  It is, however, reasonably well suited to other procedural
   2949 languages, and front ends for many such languages have been written for
   2950 GCC.
   2951 
   2952  Writing a compiler as a front end for GCC, rather than compiling
   2953 directly to assembler or generating C code which is then compiled by
   2954 GCC, has several advantages:
   2955 
   2956    * GCC front ends benefit from the support for many different target
   2957      machines already present in GCC.
   2958 
   2959    * GCC front ends benefit from all the optimizations in GCC.  Some of
   2960      these, such as alias analysis, may work better when GCC is
   2961      compiling directly from source code then when it is compiling from
   2962      generated C code.
   2963 
   2964    * Better debugging information is generated when compiling directly
   2965      from source code than when going via intermediate generated C code.
   2966 
   2967  Because of the advantages of writing a compiler as a GCC front end,
   2968 GCC front ends have also been created for languages very different from
   2969 those for which GCC was designed, such as the declarative
   2970 logic/functional language Mercury.  For these reasons, it may also be
   2971 useful to implement compilers created for specialized purposes (for
   2972 example, as part of a research project) as GCC front ends.
   2973 
   2974 
   2975 File: gccint.info,  Node: Source Tree,  Next: Options,  Prev: Languages,  Up: Top
   2976 
   2977 6 Source Tree Structure and Build System
   2978 ****************************************
   2979 
   2980 This chapter describes the structure of the GCC source tree, and how
   2981 GCC is built.  The user documentation for building and installing GCC
   2982 is in a separate manual (`http://gcc.gnu.org/install/'), with which it
   2983 is presumed that you are familiar.
   2984 
   2985 * Menu:
   2986 
   2987 * Configure Terms:: Configuration terminology and history.
   2988 * Top Level::       The top level source directory.
   2989 * gcc Directory::   The `gcc' subdirectory.
   2990 * Testsuites::      The GCC testsuites.
   2991 
   2992 
   2993 File: gccint.info,  Node: Configure Terms,  Next: Top Level,  Up: Source Tree
   2994 
   2995 6.1 Configure Terms and History
   2996 ===============================
   2997 
   2998 The configure and build process has a long and colorful history, and can
   2999 be confusing to anyone who doesn't know why things are the way they are.
   3000 While there are other documents which describe the configuration process
   3001 in detail, here are a few things that everyone working on GCC should
   3002 know.
   3003 
   3004  There are three system names that the build knows about: the machine
   3005 you are building on ("build"), the machine that you are building for
   3006 ("host"), and the machine that GCC will produce code for ("target").
   3007 When you configure GCC, you specify these with `--build=', `--host=',
   3008 and `--target='.
   3009 
   3010  Specifying the host without specifying the build should be avoided, as
   3011 `configure' may (and once did) assume that the host you specify is also
   3012 the build, which may not be true.
   3013 
   3014  If build, host, and target are all the same, this is called a
   3015 "native".  If build and host are the same but target is different, this
   3016 is called a "cross".  If build, host, and target are all different this
   3017 is called a "canadian" (for obscure reasons dealing with Canada's
   3018 political party and the background of the person working on the build
   3019 at that time).  If host and target are the same, but build is
   3020 different, you are using a cross-compiler to build a native for a
   3021 different system.  Some people call this a "host-x-host", "crossed
   3022 native", or "cross-built native".  If build and target are the same,
   3023 but host is different, you are using a cross compiler to build a cross
   3024 compiler that produces code for the machine you're building on.  This
   3025 is rare, so there is no common way of describing it.  There is a
   3026 proposal to call this a "crossback".
   3027 
   3028  If build and host are the same, the GCC you are building will also be
   3029 used to build the target libraries (like `libstdc++').  If build and
   3030 host are different, you must have already built and installed a cross
   3031 compiler that will be used to build the target libraries (if you
   3032 configured with `--target=foo-bar', this compiler will be called
   3033 `foo-bar-gcc').
   3034 
   3035  In the case of target libraries, the machine you're building for is the
   3036 machine you specified with `--target'.  So, build is the machine you're
   3037 building on (no change there), host is the machine you're building for
   3038 (the target libraries are built for the target, so host is the target
   3039 you specified), and target doesn't apply (because you're not building a
   3040 compiler, you're building libraries).  The configure/make process will
   3041 adjust these variables as needed.  It also sets `$with_cross_host' to
   3042 the original `--host' value in case you need it.
   3043 
   3044  The `libiberty' support library is built up to three times: once for
   3045 the host, once for the target (even if they are the same), and once for
   3046 the build if build and host are different.  This allows it to be used
   3047 by all programs which are generated in the course of the build process.
   3048 
   3049 
   3050 File: gccint.info,  Node: Top Level,  Next: gcc Directory,  Prev: Configure Terms,  Up: Source Tree
   3051 
   3052 6.2 Top Level Source Directory
   3053 ==============================
   3054 
   3055 The top level source directory in a GCC distribution contains several
   3056 files and directories that are shared with other software distributions
   3057 such as that of GNU Binutils.  It also contains several subdirectories
   3058 that contain parts of GCC and its runtime libraries:
   3059 
   3060 `boehm-gc'
   3061      The Boehm conservative garbage collector, used as part of the Java
   3062      runtime library.
   3063 
   3064 `contrib'
   3065      Contributed scripts that may be found useful in conjunction with
   3066      GCC.  One of these, `contrib/texi2pod.pl', is used to generate man
   3067      pages from Texinfo manuals as part of the GCC build process.
   3068 
   3069 `fastjar'
   3070      An implementation of the `jar' command, used with the Java front
   3071      end.
   3072 
   3073 `gcc'
   3074      The main sources of GCC itself (except for runtime libraries),
   3075      including optimizers, support for different target architectures,
   3076      language front ends, and testsuites.  *Note The `gcc'
   3077      Subdirectory: gcc Directory, for details.
   3078 
   3079 `include'
   3080      Headers for the `libiberty' library.
   3081 
   3082 `libada'
   3083      The Ada runtime library.
   3084 
   3085 `libcpp'
   3086      The C preprocessor library.
   3087 
   3088 `libgfortran'
   3089      The Fortran runtime library.
   3090 
   3091 `libffi'
   3092      The `libffi' library, used as part of the Java runtime library.
   3093 
   3094 `libiberty'
   3095      The `libiberty' library, used for portability and for some
   3096      generally useful data structures and algorithms.  *Note
   3097      Introduction: (libiberty)Top, for more information about this
   3098      library.
   3099 
   3100 `libjava'
   3101      The Java runtime library.
   3102 
   3103 `libmudflap'
   3104      The `libmudflap' library, used for instrumenting pointer and array
   3105      dereferencing operations.
   3106 
   3107 `libobjc'
   3108      The Objective-C and Objective-C++ runtime library.
   3109 
   3110 `libstdc++-v3'
   3111      The C++ runtime library.
   3112 
   3113 `maintainer-scripts'
   3114      Scripts used by the `gccadmin' account on `gcc.gnu.org'.
   3115 
   3116 `zlib'
   3117      The `zlib' compression library, used by the Java front end and as
   3118      part of the Java runtime library.
   3119 
   3120  The build system in the top level directory, including how recursion
   3121 into subdirectories works and how building runtime libraries for
   3122 multilibs is handled, is documented in a separate manual, included with
   3123 GNU Binutils.  *Note GNU configure and build system: (configure)Top,
   3124 for details.
   3125 
   3126 
   3127 File: gccint.info,  Node: gcc Directory,  Next: Testsuites,  Prev: Top Level,  Up: Source Tree
   3128 
   3129 6.3 The `gcc' Subdirectory
   3130 ==========================
   3131 
   3132 The `gcc' directory contains many files that are part of the C sources
   3133 of GCC, other files used as part of the configuration and build
   3134 process, and subdirectories including documentation and a testsuite.
   3135 The files that are sources of GCC are documented in a separate chapter.
   3136 *Note Passes and Files of the Compiler: Passes.
   3137 
   3138 * Menu:
   3139 
   3140 * Subdirectories:: Subdirectories of `gcc'.
   3141 * Configuration::  The configuration process, and the files it uses.
   3142 * Build::          The build system in the `gcc' directory.
   3143 * Makefile::       Targets in `gcc/Makefile'.
   3144 * Library Files::  Library source files and headers under `gcc/'.
   3145 * Headers::        Headers installed by GCC.
   3146 * Documentation::  Building documentation in GCC.
   3147 * Front End::      Anatomy of a language front end.
   3148 * Back End::       Anatomy of a target back end.
   3149 
   3150 
   3151 File: gccint.info,  Node: Subdirectories,  Next: Configuration,  Up: gcc Directory
   3152 
   3153 6.3.1 Subdirectories of `gcc'
   3154 -----------------------------
   3155 
   3156 The `gcc' directory contains the following subdirectories:
   3157 
   3158 `LANGUAGE'
   3159      Subdirectories for various languages.  Directories containing a
   3160      file `config-lang.in' are language subdirectories.  The contents of
   3161      the subdirectories `cp' (for C++), `objc' (for Objective-C) and
   3162      `objcp' (for Objective-C++) are documented in this manual (*note
   3163      Passes and Files of the Compiler: Passes.); those for other
   3164      languages are not.  *Note Anatomy of a Language Front End: Front
   3165      End, for details of the files in these directories.
   3166 
   3167 `config'
   3168      Configuration files for supported architectures and operating
   3169      systems.  *Note Anatomy of a Target Back End: Back End, for
   3170      details of the files in this directory.
   3171 
   3172 `doc'
   3173      Texinfo documentation for GCC, together with automatically
   3174      generated man pages and support for converting the installation
   3175      manual to HTML.  *Note Documentation::.
   3176 
   3177 `fixinc'
   3178      The support for fixing system headers to work with GCC.  See
   3179      `fixinc/README' for more information.  The headers fixed by this
   3180      mechanism are installed in `LIBSUBDIR/include'.  Along with those
   3181      headers, `README-fixinc' is also installed, as
   3182      `LIBSUBDIR/include/README'.
   3183 
   3184 `ginclude'
   3185      System headers installed by GCC, mainly those required by the C
   3186      standard of freestanding implementations.  *Note Headers Installed
   3187      by GCC: Headers, for details of when these and other headers are
   3188      installed.
   3189 
   3190 `intl'
   3191      GNU `libintl', from GNU `gettext', for systems which do not
   3192      include it in libc.  Properly, this directory should be at top
   3193      level, parallel to the `gcc' directory.
   3194 
   3195 `po'
   3196      Message catalogs with translations of messages produced by GCC into
   3197      various languages, `LANGUAGE.po'.  This directory also contains
   3198      `gcc.pot', the template for these message catalogues, `exgettext',
   3199      a wrapper around `gettext' to extract the messages from the GCC
   3200      sources and create `gcc.pot', which is run by `make gcc.pot', and
   3201      `EXCLUDES', a list of files from which messages should not be
   3202      extracted.
   3203 
   3204 `testsuite'
   3205      The GCC testsuites (except for those for runtime libraries).
   3206      *Note Testsuites::.
   3207 
   3208 
   3209 File: gccint.info,  Node: Configuration,  Next: Build,  Prev: Subdirectories,  Up: gcc Directory
   3210 
   3211 6.3.2 Configuration in the `gcc' Directory
   3212 ------------------------------------------
   3213 
   3214 The `gcc' directory is configured with an Autoconf-generated script
   3215 `configure'.  The `configure' script is generated from `configure.ac'
   3216 and `aclocal.m4'.  From the files `configure.ac' and `acconfig.h',
   3217 Autoheader generates the file `config.in'.  The file `cstamp-h.in' is
   3218 used as a timestamp.
   3219 
   3220 * Menu:
   3221 
   3222 * Config Fragments::     Scripts used by `configure'.
   3223 * System Config::        The `config.build', `config.host', and
   3224                          `config.gcc' files.
   3225 * Configuration Files::  Files created by running `configure'.
   3226 
   3227 
   3228 File: gccint.info,  Node: Config Fragments,  Next: System Config,  Up: Configuration
   3229 
   3230 6.3.2.1 Scripts Used by `configure'
   3231 ...................................
   3232 
   3233 `configure' uses some other scripts to help in its work:
   3234 
   3235    * The standard GNU `config.sub' and `config.guess' files, kept in
   3236      the top level directory, are used.  FIXME: when is the
   3237      `config.guess' file in the `gcc' directory (that just calls the
   3238      top level one) used?
   3239 
   3240    * The file `config.gcc' is used to handle configuration specific to
   3241      the particular target machine.  The file `config.build' is used to
   3242      handle configuration specific to the particular build machine.
   3243      The file `config.host' is used to handle configuration specific to
   3244      the particular host machine.  (In general, these should only be
   3245      used for features that cannot reasonably be tested in Autoconf
   3246      feature tests.)  *Note The `config.build'; `config.host'; and
   3247      `config.gcc' Files: System Config, for details of the contents of
   3248      these files.
   3249 
   3250    * Each language subdirectory has a file `LANGUAGE/config-lang.in'
   3251      that is used for front-end-specific configuration.  *Note The
   3252      Front End `config-lang.in' File: Front End Config, for details of
   3253      this file.
   3254 
   3255    * A helper script `configure.frag' is used as part of creating the
   3256      output of `configure'.
   3257 
   3258 
   3259 File: gccint.info,  Node: System Config,  Next: Configuration Files,  Prev: Config Fragments,  Up: Configuration
   3260 
   3261 6.3.2.2 The `config.build'; `config.host'; and `config.gcc' Files
   3262 .................................................................
   3263 
   3264 The `config.build' file contains specific rules for particular systems
   3265 which GCC is built on.  This should be used as rarely as possible, as
   3266 the behavior of the build system can always be detected by autoconf.
   3267 
   3268  The `config.host' file contains specific rules for particular systems
   3269 which GCC will run on.  This is rarely needed.
   3270 
   3271  The `config.gcc' file contains specific rules for particular systems
   3272 which GCC will generate code for.  This is usually needed.
   3273 
   3274  Each file has a list of the shell variables it sets, with
   3275 descriptions, at the top of the file.
   3276 
   3277  FIXME: document the contents of these files, and what variables should
   3278 be set to control build, host and target configuration.
   3279 
   3280 
   3281 File: gccint.info,  Node: Configuration Files,  Prev: System Config,  Up: Configuration
   3282 
   3283 6.3.2.3 Files Created by `configure'
   3284 ....................................
   3285 
   3286 Here we spell out what files will be set up by `configure' in the `gcc'
   3287 directory.  Some other files are created as temporary files in the
   3288 configuration process, and are not used in the subsequent build; these
   3289 are not documented.
   3290 
   3291    * `Makefile' is constructed from `Makefile.in', together with the
   3292      host and target fragments (*note Makefile Fragments: Fragments.)
   3293      `t-TARGET' and `x-HOST' from `config', if any, and language
   3294      Makefile fragments `LANGUAGE/Make-lang.in'.
   3295 
   3296    * `auto-host.h' contains information about the host machine
   3297      determined by `configure'.  If the host machine is different from
   3298      the build machine, then `auto-build.h' is also created, containing
   3299      such information about the build machine.
   3300 
   3301    * `config.status' is a script that may be run to recreate the
   3302      current configuration.
   3303 
   3304    * `configargs.h' is a header containing details of the arguments
   3305      passed to `configure' to configure GCC, and of the thread model
   3306      used.
   3307 
   3308    * `cstamp-h' is used as a timestamp.
   3309 
   3310    * `fixinc/Makefile' is constructed from `fixinc/Makefile.in'.
   3311 
   3312    * `gccbug', a script for reporting bugs in GCC, is constructed from
   3313      `gccbug.in'.
   3314 
   3315    * `intl/Makefile' is constructed from `intl/Makefile.in'.
   3316 
   3317    * If a language `config-lang.in' file (*note The Front End
   3318      `config-lang.in' File: Front End Config.) sets `outputs', then the
   3319      files listed in `outputs' there are also generated.
   3320 
   3321  The following configuration headers are created from the Makefile,
   3322 using `mkconfig.sh', rather than directly by `configure'.  `config.h',
   3323 `bconfig.h' and `tconfig.h' all contain the `xm-MACHINE.h' header, if
   3324 any, appropriate to the host, build and target machines respectively,
   3325 the configuration headers for the target, and some definitions; for the
   3326 host and build machines, these include the autoconfigured headers
   3327 generated by `configure'.  The other configuration headers are
   3328 determined by `config.gcc'.  They also contain the typedefs for `rtx',
   3329 `rtvec' and `tree'.
   3330 
   3331    * `config.h', for use in programs that run on the host machine.
   3332 
   3333    * `bconfig.h', for use in programs that run on the build machine.
   3334 
   3335    * `tconfig.h', for use in programs and libraries for the target
   3336      machine.
   3337 
   3338    * `tm_p.h', which includes the header `MACHINE-protos.h' that
   3339      contains prototypes for functions in the target `.c' file.  FIXME:
   3340      why is such a separate header necessary?
   3341 
   3342 
   3343 File: gccint.info,  Node: Build,  Next: Makefile,  Prev: Configuration,  Up: gcc Directory
   3344 
   3345 6.3.3 Build System in the `gcc' Directory
   3346 -----------------------------------------
   3347 
   3348 FIXME: describe the build system, including what is built in what
   3349 stages.  Also list the various source files that are used in the build
   3350 process but aren't source files of GCC itself and so aren't documented
   3351 below (*note Passes::).
   3352 
   3353 
   3354 File: gccint.info,  Node: Makefile,  Next: Library Files,  Prev: Build,  Up: gcc Directory
   3355 
   3356 6.3.4 Makefile Targets
   3357 ----------------------
   3358 
   3359 These targets are available from the `gcc' directory:
   3360 
   3361 `all'
   3362      This is the default target.  Depending on what your
   3363      build/host/target configuration is, it coordinates all the things
   3364      that need to be built.
   3365 
   3366 `doc'
   3367      Produce info-formatted documentation and man pages.  Essentially it
   3368      calls `make man' and `make info'.
   3369 
   3370 `dvi'
   3371      Produce DVI-formatted documentation.
   3372 
   3373 `pdf'
   3374      Produce PDF-formatted documentation.
   3375 
   3376 `html'
   3377      Produce HTML-formatted documentation.
   3378 
   3379 `man'
   3380      Generate man pages.
   3381 
   3382 `info'
   3383      Generate info-formatted pages.
   3384 
   3385 `mostlyclean'
   3386      Delete the files made while building the compiler.
   3387 
   3388 `clean'
   3389      That, and all the other files built by `make all'.
   3390 
   3391 `distclean'
   3392      That, and all the files created by `configure'.
   3393 
   3394 `maintainer-clean'
   3395      Distclean plus any file that can be generated from other files.
   3396      Note that additional tools may be required beyond what is normally
   3397      needed to build gcc.
   3398 
   3399 `srcextra'
   3400      Generates files in the source directory that do not exist in CVS
   3401      but should go into a release tarball.  One example is
   3402      `gcc/java/parse.c' which is generated from the CVS source file
   3403      `gcc/java/parse.y'.
   3404 
   3405 `srcinfo'
   3406 `srcman'
   3407      Copies the info-formatted and manpage documentation into the source
   3408      directory usually for the purpose of generating a release tarball.
   3409 
   3410 `install'
   3411      Installs gcc.
   3412 
   3413 `uninstall'
   3414      Deletes installed files.
   3415 
   3416 `check'
   3417      Run the testsuite.  This creates a `testsuite' subdirectory that
   3418      has various `.sum' and `.log' files containing the results of the
   3419      testing.  You can run subsets with, for example, `make check-gcc'.
   3420      You can specify specific tests by setting RUNTESTFLAGS to be the
   3421      name of the `.exp' file, optionally followed by (for some tests)
   3422      an equals and a file wildcard, like:
   3423 
   3424           make check-gcc RUNTESTFLAGS="execute.exp=19980413-*"
   3425 
   3426      Note that running the testsuite may require additional tools be
   3427      installed, such as TCL or dejagnu.
   3428 
   3429  The toplevel tree from which you start GCC compilation is not the GCC
   3430 directory, but rather a complex Makefile that coordinates the various
   3431 steps of the build, including bootstrapping the compiler and using the
   3432 new compiler to build target libraries.
   3433 
   3434  When GCC is configured for a native configuration, the default action
   3435 for `make' is to do a full three-stage bootstrap.  This means that GCC
   3436 is built three times--once with the native compiler, once with the
   3437 native-built compiler it just built, and once with the compiler it
   3438 built the second time.  In theory, the last two should produce the same
   3439 results, which `make compare' can check.  Each stage is configured
   3440 separately and compiled into a separate directory, to minimize problems
   3441 due to ABI incompatibilities between the native compiler and GCC.
   3442 
   3443  If you do a change, rebuilding will also start from the first stage
   3444 and "bubble" up the change through the three stages.  Each stage is
   3445 taken from its build directory (if it had been built previously),
   3446 rebuilt, and copied to its subdirectory.  This will allow you to, for
   3447 example, continue a bootstrap after fixing a bug which causes the
   3448 stage2 build to crash.  It does not provide as good coverage of the
   3449 compiler as bootstrapping from scratch, but it ensures that the new
   3450 code is syntactically correct (e.g., that you did not use GCC extensions
   3451 by mistake), and avoids spurious bootstrap comparison failures(1).
   3452 
   3453  Other targets available from the top level include:
   3454 
   3455 `bootstrap-lean'
   3456      Like `bootstrap', except that the various stages are removed once
   3457      they're no longer needed.  This saves disk space.
   3458 
   3459 `bootstrap2'
   3460 `bootstrap2-lean'
   3461      Performs only the first two stages of bootstrap.  Unlike a
   3462      three-stage bootstrap, this does not perform a comparison to test
   3463      that the compiler is running properly.  Note that the disk space
   3464      required by a "lean" bootstrap is approximately independent of the
   3465      number of stages.
   3466 
   3467 `stageN-bubble (N = 1...4)'
   3468      Rebuild all the stages up to N, with the appropriate flags,
   3469      "bubbling" the changes as described above.
   3470 
   3471 `all-stageN (N = 1...4)'
   3472      Assuming that stage N has already been built, rebuild it with the
   3473      appropriate flags.  This is rarely needed.
   3474 
   3475 `cleanstrap'
   3476      Remove everything (`make clean') and rebuilds (`make bootstrap').
   3477 
   3478 `compare'
   3479      Compares the results of stages 2 and 3.  This ensures that the
   3480      compiler is running properly, since it should produce the same
   3481      object files regardless of how it itself was compiled.
   3482 
   3483 `profiledbootstrap'
   3484      Builds a compiler with profiling feedback information.  For more
   3485      information, see *Note Building with profile feedback:
   3486      (gccinstall)Building.
   3487 
   3488 `restrap'
   3489      Restart a bootstrap, so that everything that was not built with
   3490      the system compiler is rebuilt.
   3491 
   3492 `stageN-start (N = 1...4)'
   3493      For each package that is bootstrapped, rename directories so that,
   3494      for example, `gcc' points to the stageN GCC, compiled with the
   3495      stageN-1 GCC(2).
   3496 
   3497      You will invoke this target if you need to test or debug the
   3498      stageN GCC.  If you only need to execute GCC (but you need not run
   3499      `make' either to rebuild it or to run test suites), you should be
   3500      able to work directly in the `stageN-gcc' directory.  This makes
   3501      it easier to debug multiple stages in parallel.
   3502 
   3503 `stage'
   3504      For each package that is bootstrapped, relocate its build directory
   3505      to indicate its stage.  For example, if the `gcc' directory points
   3506      to the stage2 GCC, after invoking this target it will be renamed
   3507      to `stage2-gcc'.
   3508 
   3509 
   3510  If you wish to use non-default GCC flags when compiling the stage2 and
   3511 stage3 compilers, set `BOOT_CFLAGS' on the command line when doing
   3512 `make'.
   3513 
   3514  Usually, the first stage only builds the languages that the compiler
   3515 is written in: typically, C and maybe Ada.  If you are debugging a
   3516 miscompilation of a different stage2 front-end (for example, of the
   3517 Fortran front-end), you may want to have front-ends for other languages
   3518 in the first stage as well.  To do so, set `STAGE1_LANGUAGES' on the
   3519 command line when doing `make'.
   3520 
   3521  For example, in the aforementioned scenario of debugging a Fortran
   3522 front-end miscompilation caused by the stage1 compiler, you may need a
   3523 command like
   3524 
   3525      make stage2-bubble STAGE1_LANGUAGES=c,fortran
   3526 
   3527  Alternatively, you can use per-language targets to build and test
   3528 languages that are not enabled by default in stage1.  For example,
   3529 `make f951' will build a Fortran compiler even in the stage1 build
   3530 directory.
   3531 
   3532  ---------- Footnotes ----------
   3533 
   3534  (1) Except if the compiler was buggy and miscompiled   some of the
   3535 files that were not modified.  In this case, it's best   to use `make
   3536 restrap'.
   3537 
   3538  (2) Customarily, the system compiler   is also termed the `stage0' GCC.
   3539 
   3540 
   3541 File: gccint.info,  Node: Library Files,  Next: Headers,  Prev: Makefile,  Up: gcc Directory
   3542 
   3543 6.3.5 Library Source Files and Headers under the `gcc' Directory
   3544 ----------------------------------------------------------------
   3545 
   3546 FIXME: list here, with explanation, all the C source files and headers
   3547 under the `gcc' directory that aren't built into the GCC executable but
   3548 rather are part of runtime libraries and object files, such as
   3549 `crtstuff.c' and `unwind-dw2.c'.  *Note Headers Installed by GCC:
   3550 Headers, for more information about the `ginclude' directory.
   3551 
   3552 
   3553 File: gccint.info,  Node: Headers,  Next: Documentation,  Prev: Library Files,  Up: gcc Directory
   3554 
   3555 6.3.6 Headers Installed by GCC
   3556 ------------------------------
   3557 
   3558 In general, GCC expects the system C library to provide most of the
   3559 headers to be used with it.  However, GCC will fix those headers if
   3560 necessary to make them work with GCC, and will install some headers
   3561 required of freestanding implementations.  These headers are installed
   3562 in `LIBSUBDIR/include'.  Headers for non-C runtime libraries are also
   3563 installed by GCC; these are not documented here.  (FIXME: document them
   3564 somewhere.)
   3565 
   3566  Several of the headers GCC installs are in the `ginclude' directory.
   3567 These headers, `iso646.h', `stdarg.h', `stdbool.h', and `stddef.h', are
   3568 installed in `LIBSUBDIR/include', unless the target Makefile fragment
   3569 (*note Target Fragment::) overrides this by setting `USER_H'.
   3570 
   3571  In addition to these headers and those generated by fixing system
   3572 headers to work with GCC, some other headers may also be installed in
   3573 `LIBSUBDIR/include'.  `config.gcc' may set `extra_headers'; this
   3574 specifies additional headers under `config' to be installed on some
   3575 systems.
   3576 
   3577  GCC installs its own version of `<float.h>', from `ginclude/float.h'.
   3578 This is done to cope with command-line options that change the
   3579 representation of floating point numbers.
   3580 
   3581  GCC also installs its own version of `<limits.h>'; this is generated
   3582 from `glimits.h', together with `limitx.h' and `limity.h' if the system
   3583 also has its own version of `<limits.h>'.  (GCC provides its own header
   3584 because it is required of ISO C freestanding implementations, but needs
   3585 to include the system header from its own header as well because other
   3586 standards such as POSIX specify additional values to be defined in
   3587 `<limits.h>'.)  The system's `<limits.h>' header is used via
   3588 `LIBSUBDIR/include/syslimits.h', which is copied from `gsyslimits.h' if
   3589 it does not need fixing to work with GCC; if it needs fixing,
   3590 `syslimits.h' is the fixed copy.
   3591 
   3592  GCC can also install `<tgmath.h>'.  It will do this when `config.gcc'
   3593 sets `use_gcc_tgmath' to `yes'.
   3594 
   3595 
   3596 File: gccint.info,  Node: Documentation,  Next: Front End,  Prev: Headers,  Up: gcc Directory
   3597 
   3598 6.3.7 Building Documentation
   3599 ----------------------------
   3600 
   3601 The main GCC documentation is in the form of manuals in Texinfo format.
   3602 These are installed in Info format; DVI versions may be generated by
   3603 `make dvi', PDF versions by `make pdf', and HTML versions by `make
   3604 html'.  In addition, some man pages are generated from the Texinfo
   3605 manuals, there are some other text files with miscellaneous
   3606 documentation, and runtime libraries have their own documentation
   3607 outside the `gcc' directory.  FIXME: document the documentation for
   3608 runtime libraries somewhere.
   3609 
   3610 * Menu:
   3611 
   3612 * Texinfo Manuals::      GCC manuals in Texinfo format.
   3613 * Man Page Generation::  Generating man pages from Texinfo manuals.
   3614 * Miscellaneous Docs::   Miscellaneous text files with documentation.
   3615 
   3616 
   3617 File: gccint.info,  Node: Texinfo Manuals,  Next: Man Page Generation,  Up: Documentation
   3618 
   3619 6.3.7.1 Texinfo Manuals
   3620 .......................
   3621 
   3622 The manuals for GCC as a whole, and the C and C++ front ends, are in
   3623 files `doc/*.texi'.  Other front ends have their own manuals in files
   3624 `LANGUAGE/*.texi'.  Common files `doc/include/*.texi' are provided
   3625 which may be included in multiple manuals; the following files are in
   3626 `doc/include':
   3627 
   3628 `fdl.texi'
   3629      The GNU Free Documentation License.
   3630 
   3631 `funding.texi'
   3632      The section "Funding Free Software".
   3633 
   3634 `gcc-common.texi'
   3635      Common definitions for manuals.
   3636 
   3637 `gpl.texi'
   3638 `gpl_v3.texi'
   3639      The GNU General Public License.
   3640 
   3641 `texinfo.tex'
   3642      A copy of `texinfo.tex' known to work with the GCC manuals.
   3643 
   3644  DVI-formatted manuals are generated by `make dvi', which uses
   3645 `texi2dvi' (via the Makefile macro `$(TEXI2DVI)').  PDF-formatted
   3646 manuals are generated by `make pdf', which uses `texi2pdf' (via the
   3647 Makefile macro `$(TEXI2PDF)').  HTML formatted manuals are generated by
   3648 `make html'.  Info manuals are generated by `make info' (which is run
   3649 as part of a bootstrap); this generates the manuals in the source
   3650 directory, using `makeinfo' via the Makefile macro `$(MAKEINFO)', and
   3651 they are included in release distributions.
   3652 
   3653  Manuals are also provided on the GCC web site, in both HTML and
   3654 PostScript forms.  This is done via the script
   3655 `maintainer-scripts/update_web_docs'.  Each manual to be provided
   3656 online must be listed in the definition of `MANUALS' in that file; a
   3657 file `NAME.texi' must only appear once in the source tree, and the
   3658 output manual must have the same name as the source file.  (However,
   3659 other Texinfo files, included in manuals but not themselves the root
   3660 files of manuals, may have names that appear more than once in the
   3661 source tree.)  The manual file `NAME.texi' should only include other
   3662 files in its own directory or in `doc/include'.  HTML manuals will be
   3663 generated by `makeinfo --html', PostScript manuals by `texi2dvi' and
   3664 `dvips', and PDF manuals by `texi2pdf'.  All Texinfo files that are
   3665 parts of manuals must be checked into SVN, even if they are generated
   3666 files, for the generation of online manuals to work.
   3667 
   3668  The installation manual, `doc/install.texi', is also provided on the
   3669 GCC web site.  The HTML version is generated by the script
   3670 `doc/install.texi2html'.
   3671 
   3672 
   3673 File: gccint.info,  Node: Man Page Generation,  Next: Miscellaneous Docs,  Prev: Texinfo Manuals,  Up: Documentation
   3674 
   3675 6.3.7.2 Man Page Generation
   3676 ...........................
   3677 
   3678 Because of user demand, in addition to full Texinfo manuals, man pages
   3679 are provided which contain extracts from those manuals.  These man
   3680 pages are generated from the Texinfo manuals using
   3681 `contrib/texi2pod.pl' and `pod2man'.  (The man page for `g++',
   3682 `cp/g++.1', just contains a `.so' reference to `gcc.1', but all the
   3683 other man pages are generated from Texinfo manuals.)
   3684 
   3685  Because many systems may not have the necessary tools installed to
   3686 generate the man pages, they are only generated if the `configure'
   3687 script detects that recent enough tools are installed, and the
   3688 Makefiles allow generating man pages to fail without aborting the
   3689 build.  Man pages are also included in release distributions.  They are
   3690 generated in the source directory.
   3691 
   3692  Magic comments in Texinfo files starting `@c man' control what parts
   3693 of a Texinfo file go into a man page.  Only a subset of Texinfo is
   3694 supported by `texi2pod.pl', and it may be necessary to add support for
   3695 more Texinfo features to this script when generating new man pages.  To
   3696 improve the man page output, some special Texinfo macros are provided
   3697 in `doc/include/gcc-common.texi' which `texi2pod.pl' understands:
   3698 
   3699 `@gcctabopt'
   3700      Use in the form `@table @gcctabopt' for tables of options, where
   3701      for printed output the effect of `@code' is better than that of
   3702      `@option' but for man page output a different effect is wanted.
   3703 
   3704 `@gccoptlist'
   3705      Use for summary lists of options in manuals.
   3706 
   3707 `@gol'
   3708      Use at the end of each line inside `@gccoptlist'.  This is
   3709      necessary to avoid problems with differences in how the
   3710      `@gccoptlist' macro is handled by different Texinfo formatters.
   3711 
   3712  FIXME: describe the `texi2pod.pl' input language and magic comments in
   3713 more detail.
   3714 
   3715 
   3716 File: gccint.info,  Node: Miscellaneous Docs,  Prev: Man Page Generation,  Up: Documentation
   3717 
   3718 6.3.7.3 Miscellaneous Documentation
   3719 ...................................
   3720 
   3721 In addition to the formal documentation that is installed by GCC, there
   3722 are several other text files with miscellaneous documentation:
   3723 
   3724 `ABOUT-GCC-NLS'
   3725      Notes on GCC's Native Language Support.  FIXME: this should be
   3726      part of this manual rather than a separate file.
   3727 
   3728 `ABOUT-NLS'
   3729      Notes on the Free Translation Project.
   3730 
   3731 `COPYING'
   3732      The GNU General Public License.
   3733 
   3734 `COPYING.LIB'
   3735      The GNU Lesser General Public License.
   3736 
   3737 `*ChangeLog*'
   3738 `*/ChangeLog*'
   3739      Change log files for various parts of GCC.
   3740 
   3741 `LANGUAGES'
   3742      Details of a few changes to the GCC front-end interface.  FIXME:
   3743      the information in this file should be part of general
   3744      documentation of the front-end interface in this manual.
   3745 
   3746 `ONEWS'
   3747      Information about new features in old versions of GCC.  (For recent
   3748      versions, the information is on the GCC web site.)
   3749 
   3750 `README.Portability'
   3751      Information about portability issues when writing code in GCC.
   3752      FIXME: why isn't this part of this manual or of the GCC Coding
   3753      Conventions?
   3754 
   3755  FIXME: document such files in subdirectories, at least `config', `cp',
   3756 `objc', `testsuite'.
   3757 
   3758 
   3759 File: gccint.info,  Node: Front End,  Next: Back End,  Prev: Documentation,  Up: gcc Directory
   3760 
   3761 6.3.8 Anatomy of a Language Front End
   3762 -------------------------------------
   3763 
   3764 A front end for a language in GCC has the following parts:
   3765 
   3766    * A directory `LANGUAGE' under `gcc' containing source files for
   3767      that front end.  *Note The Front End `LANGUAGE' Directory: Front
   3768      End Directory, for details.
   3769 
   3770    * A mention of the language in the list of supported languages in
   3771      `gcc/doc/install.texi'.
   3772 
   3773    * A mention of the name under which the language's runtime library is
   3774      recognized by `--enable-shared=PACKAGE' in the documentation of
   3775      that option in `gcc/doc/install.texi'.
   3776 
   3777    * A mention of any special prerequisites for building the front end
   3778      in the documentation of prerequisites in `gcc/doc/install.texi'.
   3779 
   3780    * Details of contributors to that front end in
   3781      `gcc/doc/contrib.texi'.  If the details are in that front end's
   3782      own manual then there should be a link to that manual's list in
   3783      `contrib.texi'.
   3784 
   3785    * Information about support for that language in
   3786      `gcc/doc/frontends.texi'.
   3787 
   3788    * Information about standards for that language, and the front end's
   3789      support for them, in `gcc/doc/standards.texi'.  This may be a link
   3790      to such information in the front end's own manual.
   3791 
   3792    * Details of source file suffixes for that language and `-x LANG'
   3793      options supported, in `gcc/doc/invoke.texi'.
   3794 
   3795    * Entries in `default_compilers' in `gcc.c' for source file suffixes
   3796      for that language.
   3797 
   3798    * Preferably testsuites, which may be under `gcc/testsuite' or
   3799      runtime library directories.  FIXME: document somewhere how to
   3800      write testsuite harnesses.
   3801 
   3802    * Probably a runtime library for the language, outside the `gcc'
   3803      directory.  FIXME: document this further.
   3804 
   3805    * Details of the directories of any runtime libraries in
   3806      `gcc/doc/sourcebuild.texi'.
   3807 
   3808  If the front end is added to the official GCC source repository, the
   3809 following are also necessary:
   3810 
   3811    * At least one Bugzilla component for bugs in that front end and
   3812      runtime libraries.  This category needs to be mentioned in
   3813      `gcc/gccbug.in', as well as being added to the Bugzilla database.
   3814 
   3815    * Normally, one or more maintainers of that front end listed in
   3816      `MAINTAINERS'.
   3817 
   3818    * Mentions on the GCC web site in `index.html' and `frontends.html',
   3819      with any relevant links on `readings.html'.  (Front ends that are
   3820      not an official part of GCC may also be listed on
   3821      `frontends.html', with relevant links.)
   3822 
   3823    * A news item on `index.html', and possibly an announcement on the
   3824      <gcc-announce (a] gcc.gnu.org> mailing list.
   3825 
   3826    * The front end's manuals should be mentioned in
   3827      `maintainer-scripts/update_web_docs' (*note Texinfo Manuals::) and
   3828      the online manuals should be linked to from
   3829      `onlinedocs/index.html'.
   3830 
   3831    * Any old releases or CVS repositories of the front end, before its
   3832      inclusion in GCC, should be made available on the GCC FTP site
   3833      `ftp://gcc.gnu.org/pub/gcc/old-releases/'.
   3834 
   3835    * The release and snapshot script `maintainer-scripts/gcc_release'
   3836      should be updated to generate appropriate tarballs for this front
   3837      end.  The associated `maintainer-scripts/snapshot-README' and
   3838      `maintainer-scripts/snapshot-index.html' files should be updated
   3839      to list the tarballs and diffs for this front end.
   3840 
   3841    * If this front end includes its own version files that include the
   3842      current date, `maintainer-scripts/update_version' should be
   3843      updated accordingly.
   3844 
   3845 * Menu:
   3846 
   3847 * Front End Directory::  The front end `LANGUAGE' directory.
   3848 * Front End Config::     The front end `config-lang.in' file.
   3849 
   3850 
   3851 File: gccint.info,  Node: Front End Directory,  Next: Front End Config,  Up: Front End
   3852 
   3853 6.3.8.1 The Front End `LANGUAGE' Directory
   3854 ..........................................
   3855 
   3856 A front end `LANGUAGE' directory contains the source files of that
   3857 front end (but not of any runtime libraries, which should be outside
   3858 the `gcc' directory).  This includes documentation, and possibly some
   3859 subsidiary programs build alongside the front end.  Certain files are
   3860 special and other parts of the compiler depend on their names:
   3861 
   3862 `config-lang.in'
   3863      This file is required in all language subdirectories.  *Note The
   3864      Front End `config-lang.in' File: Front End Config, for details of
   3865      its contents
   3866 
   3867 `Make-lang.in'
   3868      This file is required in all language subdirectories.  It contains
   3869      targets `LANG.HOOK' (where `LANG' is the setting of `language' in
   3870      `config-lang.in') for the following values of `HOOK', and any
   3871      other Makefile rules required to build those targets (which may if
   3872      necessary use other Makefiles specified in `outputs' in
   3873      `config-lang.in', although this is deprecated).  It also adds any
   3874      testsuite targets that can use the standard rule in
   3875      `gcc/Makefile.in' to the variable `lang_checks'.
   3876 
   3877     `all.cross'
   3878     `start.encap'
   3879     `rest.encap'
   3880           FIXME: exactly what goes in each of these targets?
   3881 
   3882     `tags'
   3883           Build an `etags' `TAGS' file in the language subdirectory in
   3884           the source tree.
   3885 
   3886     `info'
   3887           Build info documentation for the front end, in the build
   3888           directory.  This target is only called by `make bootstrap' if
   3889           a suitable version of `makeinfo' is available, so does not
   3890           need to check for this, and should fail if an error occurs.
   3891 
   3892     `dvi'
   3893           Build DVI documentation for the front end, in the build
   3894           directory.  This should be done using `$(TEXI2DVI)', with
   3895           appropriate `-I' arguments pointing to directories of
   3896           included files.
   3897 
   3898     `pdf'
   3899           Build PDF documentation for the front end, in the build
   3900           directory.  This should be done using `$(TEXI2PDF)', with
   3901           appropriate `-I' arguments pointing to directories of
   3902           included files.
   3903 
   3904     `html'
   3905           Build HTML documentation for the front end, in the build
   3906           directory.
   3907 
   3908     `man'
   3909           Build generated man pages for the front end from Texinfo
   3910           manuals (*note Man Page Generation::), in the build
   3911           directory.  This target is only called if the necessary tools
   3912           are available, but should ignore errors so as not to stop the
   3913           build if errors occur; man pages are optional and the tools
   3914           involved may be installed in a broken way.
   3915 
   3916     `install-common'
   3917           Install everything that is part of the front end, apart from
   3918           the compiler executables listed in `compilers' in
   3919           `config-lang.in'.
   3920 
   3921     `install-info'
   3922           Install info documentation for the front end, if it is
   3923           present in the source directory.  This target should have
   3924           dependencies on info files that should be installed.
   3925 
   3926     `install-man'
   3927           Install man pages for the front end.  This target should
   3928           ignore errors.
   3929 
   3930     `srcextra'
   3931           Copies its dependencies into the source directory.  This
   3932           generally should be used for generated files such as Bison
   3933           output files which are not present in CVS, but should be
   3934           included in any release tarballs.  This target will be
   3935           executed during a bootstrap if
   3936           `--enable-generated-files-in-srcdir' was specified as a
   3937           `configure' option.
   3938 
   3939     `srcinfo'
   3940     `srcman'
   3941           Copies its dependencies into the source directory.  These
   3942           targets will be executed during a bootstrap if
   3943           `--enable-generated-files-in-srcdir' was specified as a
   3944           `configure' option.
   3945 
   3946     `uninstall'
   3947           Uninstall files installed by installing the compiler.  This is
   3948           currently documented not to be supported, so the hook need
   3949           not do anything.
   3950 
   3951     `mostlyclean'
   3952     `clean'
   3953     `distclean'
   3954     `maintainer-clean'
   3955           The language parts of the standard GNU `*clean' targets.
   3956           *Note Standard Targets for Users: (standards)Standard
   3957           Targets, for details of the standard targets.  For GCC,
   3958           `maintainer-clean' should delete all generated files in the
   3959           source directory that are not checked into CVS, but should
   3960           not delete anything checked into CVS.
   3961 
   3962 `lang.opt'
   3963      This file registers the set of switches that the front end accepts
   3964      on the command line, and their `--help' text.  *Note Options::.
   3965 
   3966 `lang-specs.h'
   3967      This file provides entries for `default_compilers' in `gcc.c'
   3968      which override the default of giving an error that a compiler for
   3969      that language is not installed.
   3970 
   3971 `LANGUAGE-tree.def'
   3972      This file, which need not exist, defines any language-specific tree
   3973      codes.
   3974 
   3975 
   3976 File: gccint.info,  Node: Front End Config,  Prev: Front End Directory,  Up: Front End
   3977 
   3978 6.3.8.2 The Front End `config-lang.in' File
   3979 ...........................................
   3980 
   3981 Each language subdirectory contains a `config-lang.in' file.  In
   3982 addition the main directory contains `c-config-lang.in', which contains
   3983 limited information for the C language.  This file is a shell script
   3984 that may define some variables describing the language:
   3985 
   3986 `language'
   3987      This definition must be present, and gives the name of the language
   3988      for some purposes such as arguments to `--enable-languages'.
   3989 
   3990 `lang_requires'
   3991      If defined, this variable lists (space-separated) language front
   3992      ends other than C that this front end requires to be enabled (with
   3993      the names given being their `language' settings).  For example, the
   3994      Java front end depends on the C++ front end, so sets
   3995      `lang_requires=c++'.
   3996 
   3997 `subdir_requires'
   3998      If defined, this variable lists (space-separated) front end
   3999      directories other than C that this front end requires to be
   4000      present.  For example, the Objective-C++ front end uses source
   4001      files from the C++ and Objective-C front ends, so sets
   4002      `subdir_requires="cp objc"'.
   4003 
   4004 `target_libs'
   4005      If defined, this variable lists (space-separated) targets in the
   4006      top level `Makefile' to build the runtime libraries for this
   4007      language, such as `target-libobjc'.
   4008 
   4009 `lang_dirs'
   4010      If defined, this variable lists (space-separated) top level
   4011      directories (parallel to `gcc'), apart from the runtime libraries,
   4012      that should not be configured if this front end is not built.
   4013 
   4014 `build_by_default'
   4015      If defined to `no', this language front end is not built unless
   4016      enabled in a `--enable-languages' argument.  Otherwise, front ends
   4017      are built by default, subject to any special logic in
   4018      `configure.ac' (as is present to disable the Ada front end if the
   4019      Ada compiler is not already installed).
   4020 
   4021 `boot_language'
   4022      If defined to `yes', this front end is built in stage 1 of the
   4023      bootstrap.  This is only relevant to front ends written in their
   4024      own languages.
   4025 
   4026 `compilers'
   4027      If defined, a space-separated list of compiler executables that
   4028      will be run by the driver.  The names here will each end with
   4029      `\$(exeext)'.
   4030 
   4031 `outputs'
   4032      If defined, a space-separated list of files that should be
   4033      generated by `configure' substituting values in them.  This
   4034      mechanism can be used to create a file `LANGUAGE/Makefile' from
   4035      `LANGUAGE/Makefile.in', but this is deprecated, building
   4036      everything from the single `gcc/Makefile' is preferred.
   4037 
   4038 `gtfiles'
   4039      If defined, a space-separated list of files that should be scanned
   4040      by gengtype.c to generate the garbage collection tables and
   4041      routines for this language.  This excludes the files that are
   4042      common to all front ends.  *Note Type Information::.
   4043 
   4044 
   4045 
   4046 File: gccint.info,  Node: Back End,  Prev: Front End,  Up: gcc Directory
   4047 
   4048 6.3.9 Anatomy of a Target Back End
   4049 ----------------------------------
   4050 
   4051 A back end for a target architecture in GCC has the following parts:
   4052 
   4053    * A directory `MACHINE' under `gcc/config', containing a machine
   4054      description `MACHINE.md' file (*note Machine Descriptions: Machine
   4055      Desc.), header files `MACHINE.h' and `MACHINE-protos.h' and a
   4056      source file `MACHINE.c' (*note Target Description Macros and
   4057      Functions: Target Macros.), possibly a target Makefile fragment
   4058      `t-MACHINE' (*note The Target Makefile Fragment: Target
   4059      Fragment.), and maybe some other files.  The names of these files
   4060      may be changed from the defaults given by explicit specifications
   4061      in `config.gcc'.
   4062 
   4063    * If necessary, a file `MACHINE-modes.def' in the `MACHINE'
   4064      directory, containing additional machine modes to represent
   4065      condition codes.  *Note Condition Code::, for further details.
   4066 
   4067    * An optional `MACHINE.opt' file in the `MACHINE' directory,
   4068      containing a list of target-specific options.  You can also add
   4069      other option files using the `extra_options' variable in
   4070      `config.gcc'.  *Note Options::.
   4071 
   4072    * Entries in `config.gcc' (*note The `config.gcc' File: System
   4073      Config.) for the systems with this target architecture.
   4074 
   4075    * Documentation in `gcc/doc/invoke.texi' for any command-line
   4076      options supported by this target (*note Run-time Target
   4077      Specification: Run-time Target.).  This means both entries in the
   4078      summary table of options and details of the individual options.
   4079 
   4080    * Documentation in `gcc/doc/extend.texi' for any target-specific
   4081      attributes supported (*note Defining target-specific uses of
   4082      `__attribute__': Target Attributes.), including where the same
   4083      attribute is already supported on some targets, which are
   4084      enumerated in the manual.
   4085 
   4086    * Documentation in `gcc/doc/extend.texi' for any target-specific
   4087      pragmas supported.
   4088 
   4089    * Documentation in `gcc/doc/extend.texi' of any target-specific
   4090      built-in functions supported.
   4091 
   4092    * Documentation in `gcc/doc/extend.texi' of any target-specific
   4093      format checking styles supported.
   4094 
   4095    * Documentation in `gcc/doc/md.texi' of any target-specific
   4096      constraint letters (*note Constraints for Particular Machines:
   4097      Machine Constraints.).
   4098 
   4099    * A note in `gcc/doc/contrib.texi' under the person or people who
   4100      contributed the target support.
   4101 
   4102    * Entries in `gcc/doc/install.texi' for all target triplets
   4103      supported with this target architecture, giving details of any
   4104      special notes about installation for this target, or saying that
   4105      there are no special notes if there are none.
   4106 
   4107    * Possibly other support outside the `gcc' directory for runtime
   4108      libraries.  FIXME: reference docs for this.  The libstdc++ porting
   4109      manual needs to be installed as info for this to work, or to be a
   4110      chapter of this manual.
   4111 
   4112  If the back end is added to the official GCC source repository, the
   4113 following are also necessary:
   4114 
   4115    * An entry for the target architecture in `readings.html' on the GCC
   4116      web site, with any relevant links.
   4117 
   4118    * Details of the properties of the back end and target architecture
   4119      in `backends.html' on the GCC web site.
   4120 
   4121    * A news item about the contribution of support for that target
   4122      architecture, in `index.html' on the GCC web site.
   4123 
   4124    * Normally, one or more maintainers of that target listed in
   4125      `MAINTAINERS'.  Some existing architectures may be unmaintained,
   4126      but it would be unusual to add support for a target that does not
   4127      have a maintainer when support is added.
   4128 
   4129 
   4130 File: gccint.info,  Node: Testsuites,  Prev: gcc Directory,  Up: Source Tree
   4131 
   4132 6.4 Testsuites
   4133 ==============
   4134 
   4135 GCC contains several testsuites to help maintain compiler quality.
   4136 Most of the runtime libraries and language front ends in GCC have
   4137 testsuites.  Currently only the C language testsuites are documented
   4138 here; FIXME: document the others.
   4139 
   4140 * Menu:
   4141 
   4142 * Test Idioms::     Idioms used in testsuite code.
   4143 * Test Directives:: Directives used within DejaGnu tests.
   4144 * Ada Tests::       The Ada language testsuites.
   4145 * C Tests::         The C language testsuites.
   4146 * libgcj Tests::    The Java library testsuites.
   4147 * gcov Testing::    Support for testing gcov.
   4148 * profopt Testing:: Support for testing profile-directed optimizations.
   4149 * compat Testing::  Support for testing binary compatibility.
   4150 
   4151 
   4152 File: gccint.info,  Node: Test Idioms,  Next: Test Directives,  Up: Testsuites
   4153 
   4154 6.4.1 Idioms Used in Testsuite Code
   4155 -----------------------------------
   4156 
   4157 In general, C testcases have a trailing `-N.c', starting with `-1.c',
   4158 in case other testcases with similar names are added later.  If the
   4159 test is a test of some well-defined feature, it should have a name
   4160 referring to that feature such as `FEATURE-1.c'.  If it does not test a
   4161 well-defined feature but just happens to exercise a bug somewhere in
   4162 the compiler, and a bug report has been filed for this bug in the GCC
   4163 bug database, `prBUG-NUMBER-1.c' is the appropriate form of name.
   4164 Otherwise (for miscellaneous bugs not filed in the GCC bug database),
   4165 and previously more generally, test cases are named after the date on
   4166 which they were added.  This allows people to tell at a glance whether
   4167 a test failure is because of a recently found bug that has not yet been
   4168 fixed, or whether it may be a regression, but does not give any other
   4169 information about the bug or where discussion of it may be found.  Some
   4170 other language testsuites follow similar conventions.
   4171 
   4172  In the `gcc.dg' testsuite, it is often necessary to test that an error
   4173 is indeed a hard error and not just a warning--for example, where it is
   4174 a constraint violation in the C standard, which must become an error
   4175 with `-pedantic-errors'.  The following idiom, where the first line
   4176 shown is line LINE of the file and the line that generates the error,
   4177 is used for this:
   4178 
   4179      /* { dg-bogus "warning" "warning in place of error" } */
   4180      /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */
   4181 
   4182  It may be necessary to check that an expression is an integer constant
   4183 expression and has a certain value.  To check that `E' has value `V',
   4184 an idiom similar to the following is used:
   4185 
   4186      char x[((E) == (V) ? 1 : -1)];
   4187 
   4188  In `gcc.dg' tests, `__typeof__' is sometimes used to make assertions
   4189 about the types of expressions.  See, for example,
   4190 `gcc.dg/c99-condexpr-1.c'.  The more subtle uses depend on the exact
   4191 rules for the types of conditional expressions in the C standard; see,
   4192 for example, `gcc.dg/c99-intconst-1.c'.
   4193 
   4194  It is useful to be able to test that optimizations are being made
   4195 properly.  This cannot be done in all cases, but it can be done where
   4196 the optimization will lead to code being optimized away (for example,
   4197 where flow analysis or alias analysis should show that certain code
   4198 cannot be called) or to functions not being called because they have
   4199 been expanded as built-in functions.  Such tests go in
   4200 `gcc.c-torture/execute'.  Where code should be optimized away, a call
   4201 to a nonexistent function such as `link_failure ()' may be inserted; a
   4202 definition
   4203 
   4204      #ifndef __OPTIMIZE__
   4205      void
   4206      link_failure (void)
   4207      {
   4208        abort ();
   4209      }
   4210      #endif
   4211 
   4212 will also be needed so that linking still succeeds when the test is run
   4213 without optimization.  When all calls to a built-in function should
   4214 have been optimized and no calls to the non-built-in version of the
   4215 function should remain, that function may be defined as `static' to
   4216 call `abort ()' (although redeclaring a function as static may not work
   4217 on all targets).
   4218 
   4219  All testcases must be portable.  Target-specific testcases must have
   4220 appropriate code to avoid causing failures on unsupported systems;
   4221 unfortunately, the mechanisms for this differ by directory.
   4222 
   4223  FIXME: discuss non-C testsuites here.
   4224 
   4225 
   4226 File: gccint.info,  Node: Test Directives,  Next: Ada Tests,  Prev: Test Idioms,  Up: Testsuites
   4227 
   4228 6.4.2 Directives used within DejaGnu tests
   4229 ------------------------------------------
   4230 
   4231 Test directives appear within comments in a test source file and begin
   4232 with `dg-'.  Some of these are defined within DejaGnu and others are
   4233 local to the GCC testsuite.
   4234 
   4235  The order in which test directives appear in a test can be important:
   4236 directives local to GCC sometimes override information used by the
   4237 DejaGnu directives, which know nothing about the GCC directives, so the
   4238 DejaGnu directives must precede GCC directives.
   4239 
   4240  Several test directives include selectors which are usually preceded by
   4241 the keyword `target' or `xfail'.  A selector is: one or more target
   4242 triplets, possibly including wildcard characters; a single
   4243 effective-target keyword; or a logical expression.  Depending on the
   4244 context, the selector specifies whether a test is skipped and reported
   4245 as unsupported or is expected to fail.  Use `*-*-*' to match any target.
   4246 Effective-target keywords are defined in `target-supports.exp' in the
   4247 GCC testsuite.
   4248 
   4249  A selector expression appears within curly braces and uses a single
   4250 logical operator: one of `!', `&&', or `||'.  An operand is another
   4251 selector expression, an effective-target keyword, a single target
   4252 triplet, or a list of target triplets within quotes or curly braces.
   4253 For example:
   4254 
   4255      { target { ! "hppa*-*-* ia64*-*-*" } }
   4256      { target { powerpc*-*-* && lp64 } }
   4257      { xfail { lp64 || vect_no_align } }
   4258 
   4259 `{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }'
   4260      DO-WHAT-KEYWORD specifies how the test is compiled and whether it
   4261      is executed.  It is one of:
   4262 
   4263     `preprocess'
   4264           Compile with `-E' to run only the preprocessor.
   4265 
   4266     `compile'
   4267           Compile with `-S' to produce an assembly code file.
   4268 
   4269     `assemble'
   4270           Compile with `-c' to produce a relocatable object file.
   4271 
   4272     `link'
   4273           Compile, assemble, and link to produce an executable file.
   4274 
   4275     `run'
   4276           Produce and run an executable file, which is expected to
   4277           return an exit code of 0.
   4278 
   4279      The default is `compile'.  That can be overridden for a set of
   4280      tests by redefining `dg-do-what-default' within the `.exp' file
   4281      for those tests.
   4282 
   4283      If the directive includes the optional `{ target SELECTOR }' then
   4284      the test is skipped unless the target system is included in the
   4285      list of target triplets or matches the effective-target keyword.
   4286 
   4287      If `do-what-keyword' is `run' and the directive includes the
   4288      optional `{ xfail SELECTOR }' and the selector is met then the
   4289      test is expected to fail.  The `xfail' clause is ignored for other
   4290      values of `do-what-keyword'; those tests can use directive
   4291      `dg-xfail-if'.
   4292 
   4293 `{ dg-options OPTIONS [{ target SELECTOR }] }'
   4294      This DejaGnu directive provides a list of compiler options, to be
   4295      used if the target system matches SELECTOR, that replace the
   4296      default options used for this set of tests.
   4297 
   4298 `{ dg-add-options FEATURE ... }'
   4299      Add any compiler options that are needed to access certain
   4300      features.  This directive does nothing on targets that enable the
   4301      features by default, or that don't provide them at all.  It must
   4302      come after all `dg-options' directives.
   4303 
   4304      The supported values of FEATURE are:
   4305     `c99_runtime'
   4306           The target's C99 runtime (both headers and libraries).
   4307 
   4308     `mips16_attribute'
   4309           `mips16' function attributes.  Only MIPS targets support this
   4310           feature, and only then in certain modes.
   4311 
   4312 `{ dg-skip-if COMMENT { SELECTOR } { INCLUDE-OPTS } { EXCLUDE-OPTS } }'
   4313      Skip the test if the test system is included in SELECTOR and if
   4314      each of the options in INCLUDE-OPTS is in the set of options with
   4315      which the test would be compiled and if none of the options in
   4316      EXCLUDE-OPTS is in the set of options with which the test would be
   4317      compiled.
   4318 
   4319      Use `"*"' for an empty INCLUDE-OPTS list and `""' for an empty
   4320      EXCLUDE-OPTS list.
   4321 
   4322 `{ dg-xfail-if COMMENT { SELECTOR } { INCLUDE-OPTS } { EXCLUDE-OPTS } }'
   4323      Expect the test to fail if the conditions (which are the same as
   4324      for `dg-skip-if') are met.
   4325 
   4326 `{ dg-require-SUPPORT args }'
   4327      Skip the test if the target does not provide the required support;
   4328      see `gcc-dg.exp' in the GCC testsuite for the actual directives.
   4329      These directives must appear after any `dg-do' directive in the
   4330      test and before any `dg-additional-sources' directive.  They
   4331      require at least one argument, which can be an empty string if the
   4332      specific procedure does not examine the argument.
   4333 
   4334 `{ dg-require-effective-target KEYWORD }'
   4335      Skip the test if the test target, including current multilib flags,
   4336      is not covered by the effective-target keyword.  This directive
   4337      must appear after any `dg-do' directive in the test and before any
   4338      `dg-additional-sources' directive.
   4339 
   4340 `{ dg-shouldfail COMMENT { SELECTOR } { INCLUDE-OPTS } { EXCLUDE-OPTS } }'
   4341      Expect the test executable to return a nonzero exit status if the
   4342      conditions (which are the same as for `dg-skip-if') are met.
   4343 
   4344 `{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
   4345      This DejaGnu directive appears on a source line that is expected
   4346      to get an error message, or else specifies the source line
   4347      associated with the message.  If there is no message for that line
   4348      or if the text of that message is not matched by REGEXP then the
   4349      check fails and COMMENT is included in the `FAIL' message.  The
   4350      check does not look for the string `"error"' unless it is part of
   4351      REGEXP.
   4352 
   4353 `{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
   4354      This DejaGnu directive appears on a source line that is expected
   4355      to get a warning message, or else specifies the source line
   4356      associated with the message.  If there is no message for that line
   4357      or if the text of that message is not matched by REGEXP then the
   4358      check fails and COMMENT is included in the `FAIL' message.  The
   4359      check does not look for the string `"warning"' unless it is part
   4360      of REGEXP.
   4361 
   4362 `{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
   4363      The line is expected to get a message other than an error or
   4364      warning.  If there is no message for that line or if the text of
   4365      that message is not matched by REGEXP then the check fails and
   4366      COMMENT is included in the `FAIL' message.
   4367 
   4368 `{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
   4369      This DejaGnu directive appears on a source line that should not
   4370      get a message matching REGEXP, or else specifies the source line
   4371      associated with the bogus message.  It is usually used with `xfail'
   4372      to indicate that the message is a known problem for a particular
   4373      set of targets.
   4374 
   4375 `{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }'
   4376      This DejaGnu directive indicates that the test is expected to fail
   4377      due to compiler messages that are not handled by `dg-error',
   4378      `dg-warning' or `dg-bogus'.  For this directive `xfail' has the
   4379      same effect as `target'.
   4380 
   4381 `{ dg-output REGEXP [{ target/xfail SELECTOR }] }'
   4382      This DejaGnu directive compares REGEXP to the combined output that
   4383      the test executable writes to `stdout' and `stderr'.
   4384 
   4385 `{ dg-prune-output REGEXP }'
   4386      Prune messages matching REGEXP from test output.
   4387 
   4388 `{ dg-additional-files "FILELIST" }'
   4389      Specify additional files, other than source files, that must be
   4390      copied to the system where the compiler runs.
   4391 
   4392 `{ dg-additional-sources "FILELIST" }'
   4393      Specify additional source files to appear in the compile line
   4394      following the main test file.
   4395 
   4396 `{ dg-final { LOCAL-DIRECTIVE } }'
   4397      This DejaGnu directive is placed within a comment anywhere in the
   4398      source file and is processed after the test has been compiled and
   4399      run.  Multiple `dg-final' commands are processed in the order in
   4400      which they appear in the source file.
   4401 
   4402      The GCC testsuite defines the following directives to be used
   4403      within `dg-final'.
   4404 
   4405     `cleanup-coverage-files'
   4406           Removes coverage data files generated for this test.
   4407 
   4408     `cleanup-repo-files'
   4409           Removes files generated for this test for `-frepo'.
   4410 
   4411     `cleanup-rtl-dump SUFFIX'
   4412           Removes RTL dump files generated for this test.
   4413 
   4414     `cleanup-tree-dump SUFFIX'
   4415           Removes tree dump files matching SUFFIX which were generated
   4416           for this test.
   4417 
   4418     `cleanup-saved-temps'
   4419           Removes files for the current test which were kept for
   4420           `--save-temps'.
   4421 
   4422     `scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]'
   4423           Passes if REGEXP matches text in FILENAME.
   4424 
   4425     `scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]'
   4426           Passes if REGEXP does not match text in FILENAME.
   4427 
   4428     `scan-hidden SYMBOL [{ target/xfail SELECTOR }]'
   4429           Passes if SYMBOL is defined as a hidden symbol in the test's
   4430           assembly output.
   4431 
   4432     `scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]'
   4433           Passes if SYMBOL is not defined as a hidden symbol in the
   4434           test's assembly output.
   4435 
   4436     `scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]'
   4437           Passes if REGEX is matched exactly NUM times in the test's
   4438           assembler output.
   4439 
   4440     `scan-assembler REGEX [{ target/xfail SELECTOR }]'
   4441           Passes if REGEX matches text in the test's assembler output.
   4442 
   4443     `scan-assembler-not REGEX [{ target/xfail SELECTOR }]'
   4444           Passes if REGEX does not match text in the test's assembler
   4445           output.
   4446 
   4447     `scan-assembler-dem REGEX [{ target/xfail SELECTOR }]'
   4448           Passes if REGEX matches text in the test's demangled
   4449           assembler output.
   4450 
   4451     `scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]'
   4452           Passes if REGEX does not match text in the test's demangled
   4453           assembler output.
   4454 
   4455     `scan-tree-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]'
   4456           Passes if REGEX is found exactly NUM times in the dump file
   4457           with suffix SUFFIX.
   4458 
   4459     `scan-tree-dump REGEX SUFFIX [{ target/xfail SELECTOR }]'
   4460           Passes if REGEX matches text in the dump file with suffix
   4461           SUFFIX.
   4462 
   4463     `scan-tree-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
   4464           Passes if REGEX does not match text in the dump file with
   4465           suffix SUFFIX.
   4466 
   4467     `scan-tree-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]'
   4468           Passes if REGEX matches demangled text in the dump file with
   4469           suffix SUFFIX.
   4470 
   4471     `scan-tree-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
   4472           Passes if REGEX does not match demangled text in the dump
   4473           file with suffix SUFFIX.
   4474 
   4475     `output-exists [{ target/xfail SELECTOR }]'
   4476           Passes if compiler output file exists.
   4477 
   4478     `output-exists-not [{ target/xfail SELECTOR }]'
   4479           Passes if compiler output file does not exist.
   4480 
   4481     `run-gcov SOURCEFILE'
   4482           Check line counts in `gcov' tests.
   4483 
   4484     `run-gcov [branches] [calls] { OPTS SOURCEFILE }'
   4485           Check branch and/or call counts, in addition to line counts,
   4486           in `gcov' tests.
   4487 
   4488 
   4489 File: gccint.info,  Node: Ada Tests,  Next: C Tests,  Prev: Test Directives,  Up: Testsuites
   4490 
   4491 6.4.3 Ada Language Testsuites
   4492 -----------------------------
   4493 
   4494 The Ada testsuite includes executable tests from the ACATS 2.5
   4495 testsuite, publicly available at
   4496 `http://www.adaic.org/compilers/acats/2.5'
   4497 
   4498  These tests are integrated in the GCC testsuite in the
   4499 `gcc/testsuite/ada/acats' directory, and enabled automatically when
   4500 running `make check', assuming the Ada language has been enabled when
   4501 configuring GCC.
   4502 
   4503  You can also run the Ada testsuite independently, using `make
   4504 check-ada', or run a subset of the tests by specifying which chapter to
   4505 run, e.g.:
   4506 
   4507      $ make check-ada CHAPTERS="c3 c9"
   4508 
   4509  The tests are organized by directory, each directory corresponding to
   4510 a chapter of the Ada Reference Manual.  So for example, c9 corresponds
   4511 to chapter 9, which deals with tasking features of the language.
   4512 
   4513  There is also an extra chapter called `gcc' containing a template for
   4514 creating new executable tests.
   4515 
   4516  The tests are run using two `sh' scripts: `run_acats' and
   4517 `run_all.sh'.  To run the tests using a simulator or a cross target,
   4518 see the small customization section at the top of `run_all.sh'.
   4519 
   4520  These tests are run using the build tree: they can be run without doing
   4521 a `make install'.
   4522 
   4523 
   4524 File: gccint.info,  Node: C Tests,  Next: libgcj Tests,  Prev: Ada Tests,  Up: Testsuites
   4525 
   4526 6.4.4 C Language Testsuites
   4527 ---------------------------
   4528 
   4529 GCC contains the following C language testsuites, in the
   4530 `gcc/testsuite' directory:
   4531 
   4532 `gcc.dg'
   4533      This contains tests of particular features of the C compiler,
   4534      using the more modern `dg' harness.  Correctness tests for various
   4535      compiler features should go here if possible.
   4536 
   4537      Magic comments determine whether the file is preprocessed,
   4538      compiled, linked or run.  In these tests, error and warning
   4539      message texts are compared against expected texts or regular
   4540      expressions given in comments.  These tests are run with the
   4541      options `-ansi -pedantic' unless other options are given in the
   4542      test.  Except as noted below they are not run with multiple
   4543      optimization options.
   4544 
   4545 `gcc.dg/compat'
   4546      This subdirectory contains tests for binary compatibility using
   4547      `compat.exp', which in turn uses the language-independent support
   4548      (*note Support for testing binary compatibility: compat Testing.).
   4549 
   4550 `gcc.dg/cpp'
   4551      This subdirectory contains tests of the preprocessor.
   4552 
   4553 `gcc.dg/debug'
   4554      This subdirectory contains tests for debug formats.  Tests in this
   4555      subdirectory are run for each debug format that the compiler
   4556      supports.
   4557 
   4558 `gcc.dg/format'
   4559      This subdirectory contains tests of the `-Wformat' format
   4560      checking.  Tests in this directory are run with and without
   4561      `-DWIDE'.
   4562 
   4563 `gcc.dg/noncompile'
   4564      This subdirectory contains tests of code that should not compile
   4565      and does not need any special compilation options.  They are run
   4566      with multiple optimization options, since sometimes invalid code
   4567      crashes the compiler with optimization.
   4568 
   4569 `gcc.dg/special'
   4570      FIXME: describe this.
   4571 
   4572 `gcc.c-torture'
   4573      This contains particular code fragments which have historically
   4574      broken easily.  These tests are run with multiple optimization
   4575      options, so tests for features which only break at some
   4576      optimization levels belong here.  This also contains tests to
   4577      check that certain optimizations occur.  It might be worthwhile to
   4578      separate the correctness tests cleanly from the code quality
   4579      tests, but it hasn't been done yet.
   4580 
   4581 `gcc.c-torture/compat'
   4582      FIXME: describe this.
   4583 
   4584      This directory should probably not be used for new tests.
   4585 
   4586 `gcc.c-torture/compile'
   4587      This testsuite contains test cases that should compile, but do not
   4588      need to link or run.  These test cases are compiled with several
   4589      different combinations of optimization options.  All warnings are
   4590      disabled for these test cases, so this directory is not suitable if
   4591      you wish to test for the presence or absence of compiler warnings.
   4592      While special options can be set, and tests disabled on specific
   4593      platforms, by the use of `.x' files, mostly these test cases
   4594      should not contain platform dependencies.  FIXME: discuss how
   4595      defines such as `NO_LABEL_VALUES' and `STACK_SIZE' are used.
   4596 
   4597 `gcc.c-torture/execute'
   4598      This testsuite contains test cases that should compile, link and
   4599      run; otherwise the same comments as for `gcc.c-torture/compile'
   4600      apply.
   4601 
   4602 `gcc.c-torture/execute/ieee'
   4603      This contains tests which are specific to IEEE floating point.
   4604 
   4605 `gcc.c-torture/unsorted'
   4606      FIXME: describe this.
   4607 
   4608      This directory should probably not be used for new tests.
   4609 
   4610 `gcc.c-torture/misc-tests'
   4611      This directory contains C tests that require special handling.
   4612      Some of these tests have individual expect files, and others share
   4613      special-purpose expect files:
   4614 
   4615     ``bprob*.c''
   4616           Test `-fbranch-probabilities' using `bprob.exp', which in
   4617           turn uses the generic, language-independent framework (*note
   4618           Support for testing profile-directed optimizations: profopt
   4619           Testing.).
   4620 
   4621     ``dg-*.c''
   4622           Test the testsuite itself using `dg-test.exp'.
   4623 
   4624     ``gcov*.c''
   4625           Test `gcov' output using `gcov.exp', which in turn uses the
   4626           language-independent support (*note Support for testing gcov:
   4627           gcov Testing.).
   4628 
   4629     ``i386-pf-*.c''
   4630           Test i386-specific support for data prefetch using
   4631           `i386-prefetch.exp'.
   4632 
   4633 
   4634  FIXME: merge in `testsuite/README.gcc' and discuss the format of test
   4635 cases and magic comments more.
   4636 
   4637 
   4638 File: gccint.info,  Node: libgcj Tests,  Next: gcov Testing,  Prev: C Tests,  Up: Testsuites
   4639 
   4640 6.4.5 The Java library testsuites.
   4641 ----------------------------------
   4642 
   4643 Runtime tests are executed via `make check' in the
   4644 `TARGET/libjava/testsuite' directory in the build tree.  Additional
   4645 runtime tests can be checked into this testsuite.
   4646 
   4647  Regression testing of the core packages in libgcj is also covered by
   4648 the Mauve testsuite.  The Mauve Project develops tests for the Java
   4649 Class Libraries.  These tests are run as part of libgcj testing by
   4650 placing the Mauve tree within the libjava testsuite sources at
   4651 `libjava/testsuite/libjava.mauve/mauve', or by specifying the location
   4652 of that tree when invoking `make', as in `make MAUVEDIR=~/mauve check'.
   4653 
   4654  To detect regressions, a mechanism in `mauve.exp' compares the
   4655 failures for a test run against the list of expected failures in
   4656 `libjava/testsuite/libjava.mauve/xfails' from the source hierarchy.
   4657 Update this file when adding new failing tests to Mauve, or when fixing
   4658 bugs in libgcj that had caused Mauve test failures.
   4659 
   4660  We encourage developers to contribute test cases to Mauve.
   4661 
   4662 
   4663 File: gccint.info,  Node: gcov Testing,  Next: profopt Testing,  Prev: libgcj Tests,  Up: Testsuites
   4664 
   4665 6.4.6 Support for testing `gcov'
   4666 --------------------------------
   4667 
   4668 Language-independent support for testing `gcov', and for checking that
   4669 branch profiling produces expected values, is provided by the expect
   4670 file `gcov.exp'.  `gcov' tests also rely on procedures in `gcc.dg.exp'
   4671 to compile and run the test program.  A typical `gcov' test contains
   4672 the following DejaGnu commands within comments:
   4673 
   4674      { dg-options "-fprofile-arcs -ftest-coverage" }
   4675      { dg-do run { target native } }
   4676      { dg-final { run-gcov sourcefile } }
   4677 
   4678  Checks of `gcov' output can include line counts, branch percentages,
   4679 and call return percentages.  All of these checks are requested via
   4680 commands that appear in comments in the test's source file.  Commands
   4681 to check line counts are processed by default.  Commands to check
   4682 branch percentages and call return percentages are processed if the
   4683 `run-gcov' command has arguments `branches' or `calls', respectively.
   4684 For example, the following specifies checking both, as well as passing
   4685 `-b' to `gcov':
   4686 
   4687      { dg-final { run-gcov branches calls { -b sourcefile } } }
   4688 
   4689  A line count command appears within a comment on the source line that
   4690 is expected to get the specified count and has the form `count(CNT)'.
   4691 A test should only check line counts for lines that will get the same
   4692 count for any architecture.
   4693 
   4694  Commands to check branch percentages (`branch') and call return
   4695 percentages (`returns') are very similar to each other.  A beginning
   4696 command appears on or before the first of a range of lines that will
   4697 report the percentage, and the ending command follows that range of
   4698 lines.  The beginning command can include a list of percentages, all of
   4699 which are expected to be found within the range.  A range is terminated
   4700 by the next command of the same kind.  A command `branch(end)' or
   4701 `returns(end)' marks the end of a range without starting a new one.
   4702 For example:
   4703 
   4704      if (i > 10 && j > i && j < 20)  /* branch(27 50 75) */
   4705                                      /* branch(end) */
   4706        foo (i, j);
   4707 
   4708  For a call return percentage, the value specified is the percentage of
   4709 calls reported to return.  For a branch percentage, the value is either
   4710 the expected percentage or 100 minus that value, since the direction of
   4711 a branch can differ depending on the target or the optimization level.
   4712 
   4713  Not all branches and calls need to be checked.  A test should not
   4714 check for branches that might be optimized away or replaced with
   4715 predicated instructions.  Don't check for calls inserted by the
   4716 compiler or ones that might be inlined or optimized away.
   4717 
   4718  A single test can check for combinations of line counts, branch
   4719 percentages, and call return percentages.  The command to check a line
   4720 count must appear on the line that will report that count, but commands
   4721 to check branch percentages and call return percentages can bracket the
   4722 lines that report them.
   4723 
   4724 
   4725 File: gccint.info,  Node: profopt Testing,  Next: compat Testing,  Prev: gcov Testing,  Up: Testsuites
   4726 
   4727 6.4.7 Support for testing profile-directed optimizations
   4728 --------------------------------------------------------
   4729 
   4730 The file `profopt.exp' provides language-independent support for
   4731 checking correct execution of a test built with profile-directed
   4732 optimization.  This testing requires that a test program be built and
   4733 executed twice.  The first time it is compiled to generate profile
   4734 data, and the second time it is compiled to use the data that was
   4735 generated during the first execution.  The second execution is to
   4736 verify that the test produces the expected results.
   4737 
   4738  To check that the optimization actually generated better code, a test
   4739 can be built and run a third time with normal optimizations to verify
   4740 that the performance is better with the profile-directed optimizations.
   4741 `profopt.exp' has the beginnings of this kind of support.
   4742 
   4743  `profopt.exp' provides generic support for profile-directed
   4744 optimizations.  Each set of tests that uses it provides information
   4745 about a specific optimization:
   4746 
   4747 `tool'
   4748      tool being tested, e.g., `gcc'
   4749 
   4750 `profile_option'
   4751      options used to generate profile data
   4752 
   4753 `feedback_option'
   4754      options used to optimize using that profile data
   4755 
   4756 `prof_ext'
   4757      suffix of profile data files
   4758 
   4759 `PROFOPT_OPTIONS'
   4760      list of options with which to run each test, similar to the lists
   4761      for torture tests
   4762 
   4763 
   4764 File: gccint.info,  Node: compat Testing,  Prev: profopt Testing,  Up: Testsuites
   4765 
   4766 6.4.8 Support for testing binary compatibility
   4767 ----------------------------------------------
   4768 
   4769 The file `compat.exp' provides language-independent support for binary
   4770 compatibility testing.  It supports testing interoperability of two
   4771 compilers that follow the same ABI, or of multiple sets of compiler
   4772 options that should not affect binary compatibility.  It is intended to
   4773 be used for testsuites that complement ABI testsuites.
   4774 
   4775  A test supported by this framework has three parts, each in a separate
   4776 source file: a main program and two pieces that interact with each
   4777 other to split up the functionality being tested.
   4778 
   4779 `TESTNAME_main.SUFFIX'
   4780      Contains the main program, which calls a function in file
   4781      `TESTNAME_x.SUFFIX'.
   4782 
   4783 `TESTNAME_x.SUFFIX'
   4784      Contains at least one call to a function in `TESTNAME_y.SUFFIX'.
   4785 
   4786 `TESTNAME_y.SUFFIX'
   4787      Shares data with, or gets arguments from, `TESTNAME_x.SUFFIX'.
   4788 
   4789  Within each test, the main program and one functional piece are
   4790 compiled by the GCC under test.  The other piece can be compiled by an
   4791 alternate compiler.  If no alternate compiler is specified, then all
   4792 three source files are all compiled by the GCC under test.  You can
   4793 specify pairs of sets of compiler options.  The first element of such a
   4794 pair specifies options used with the GCC under test, and the second
   4795 element of the pair specifies options used with the alternate compiler.
   4796 Each test is compiled with each pair of options.
   4797 
   4798  `compat.exp' defines default pairs of compiler options.  These can be
   4799 overridden by defining the environment variable `COMPAT_OPTIONS' as:
   4800 
   4801      COMPAT_OPTIONS="[list [list {TST1} {ALT1}]
   4802        ...[list {TSTN} {ALTN}]]"
   4803 
   4804  where TSTI and ALTI are lists of options, with TSTI used by the
   4805 compiler under test and ALTI used by the alternate compiler.  For
   4806 example, with `[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]',
   4807 the test is first built with `-g -O0' by the compiler under test and
   4808 with `-O3' by the alternate compiler.  The test is built a second time
   4809 using `-fpic' by the compiler under test and `-fPIC -O2' by the
   4810 alternate compiler.
   4811 
   4812  An alternate compiler is specified by defining an environment variable
   4813 to be the full pathname of an installed compiler; for C define
   4814 `ALT_CC_UNDER_TEST', and for C++ define `ALT_CXX_UNDER_TEST'.  These
   4815 will be written to the `site.exp' file used by DejaGnu.  The default is
   4816 to build each test with the compiler under test using the first of each
   4817 pair of compiler options from `COMPAT_OPTIONS'.  When
   4818 `ALT_CC_UNDER_TEST' or `ALT_CXX_UNDER_TEST' is `same', each test is
   4819 built using the compiler under test but with combinations of the
   4820 options from `COMPAT_OPTIONS'.
   4821 
   4822  To run only the C++ compatibility suite using the compiler under test
   4823 and another version of GCC using specific compiler options, do the
   4824 following from `OBJDIR/gcc':
   4825 
   4826      rm site.exp
   4827      make -k \
   4828        ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \
   4829        COMPAT_OPTIONS="lists as shown above" \
   4830        check-c++ \
   4831        RUNTESTFLAGS="compat.exp"
   4832 
   4833  A test that fails when the source files are compiled with different
   4834 compilers, but passes when the files are compiled with the same
   4835 compiler, demonstrates incompatibility of the generated code or runtime
   4836 support.  A test that fails for the alternate compiler but passes for
   4837 the compiler under test probably tests for a bug that was fixed in the
   4838 compiler under test but is present in the alternate compiler.
   4839 
   4840  The binary compatibility tests support a small number of test framework
   4841 commands that appear within comments in a test file.
   4842 
   4843 `dg-require-*'
   4844      These commands can be used in `TESTNAME_main.SUFFIX' to skip the
   4845      test if specific support is not available on the target.
   4846 
   4847 `dg-options'
   4848      The specified options are used for compiling this particular source
   4849      file, appended to the options from `COMPAT_OPTIONS'.  When this
   4850      command appears in `TESTNAME_main.SUFFIX' the options are also
   4851      used to link the test program.
   4852 
   4853 `dg-xfail-if'
   4854      This command can be used in a secondary source file to specify that
   4855      compilation is expected to fail for particular options on
   4856      particular targets.
   4857 
   4858 
   4859 File: gccint.info,  Node: Options,  Next: Passes,  Prev: Source Tree,  Up: Top
   4860 
   4861 7 Option specification files
   4862 ****************************
   4863 
   4864 Most GCC command-line options are described by special option
   4865 definition files, the names of which conventionally end in `.opt'.
   4866 This chapter describes the format of these files.
   4867 
   4868 * Menu:
   4869 
   4870 * Option file format::   The general layout of the files
   4871 * Option properties::    Supported option properties
   4872 
   4873 
   4874 File: gccint.info,  Node: Option file format,  Next: Option properties,  Up: Options
   4875 
   4876 7.1 Option file format
   4877 ======================
   4878 
   4879 Option files are a simple list of records in which each field occupies
   4880 its own line and in which the records themselves are separated by blank
   4881 lines.  Comments may appear on their own line anywhere within the file
   4882 and are preceded by semicolons.  Whitespace is allowed before the
   4883 semicolon.
   4884 
   4885  The files can contain the following types of record:
   4886 
   4887    * A language definition record.  These records have two fields: the
   4888      string `Language' and the name of the language.  Once a language
   4889      has been declared in this way, it can be used as an option
   4890      property.  *Note Option properties::.
   4891 
   4892    * An option definition record.  These records have the following
   4893      fields:
   4894 
   4895        1. the name of the option, with the leading "-" removed
   4896 
   4897        2. a space-separated list of option properties (*note Option
   4898           properties::)
   4899 
   4900        3. the help text to use for `--help' (omitted if the second field
   4901           contains the `Undocumented' property).
   4902 
   4903      By default, all options beginning with "f", "W" or "m" are
   4904      implicitly assumed to take a "no-" form.  This form should not be
   4905      listed separately.  If an option beginning with one of these
   4906      letters does not have a "no-" form, you can use the
   4907      `RejectNegative' property to reject it.
   4908 
   4909      The help text is automatically line-wrapped before being displayed.
   4910      Normally the name of the option is printed on the left-hand side of
   4911      the output and the help text is printed on the right.  However, if
   4912      the help text contains a tab character, the text to the left of
   4913      the tab is used instead of the option's name and the text to the
   4914      right of the tab forms the help text.  This allows you to
   4915      elaborate on what type of argument the option takes.
   4916 
   4917    * A target mask record.  These records have one field of the form
   4918      `Mask(X)'.  The options-processing script will automatically
   4919      allocate a bit in `target_flags' (*note Run-time Target::) for
   4920      each mask name X and set the macro `MASK_X' to the appropriate
   4921      bitmask.  It will also declare a `TARGET_X' macro that has the
   4922      value 1 when bit `MASK_X' is set and 0 otherwise.
   4923 
   4924      They are primarily intended to declare target masks that are not
   4925      associated with user options, either because these masks represent
   4926      internal switches or because the options are not available on all
   4927      configurations and yet the masks always need to be defined.
   4928 
   4929 
   4930 File: gccint.info,  Node: Option properties,  Prev: Option file format,  Up: Options
   4931 
   4932 7.2 Option properties
   4933 =====================
   4934 
   4935 The second field of an option record can specify the following
   4936 properties:
   4937 
   4938 `Common'
   4939      The option is available for all languages and targets.
   4940 
   4941 `Target'
   4942      The option is available for all languages but is target-specific.
   4943 
   4944 `LANGUAGE'
   4945      The option is available when compiling for the given language.
   4946 
   4947      It is possible to specify several different languages for the same
   4948      option.  Each LANGUAGE must have been declared by an earlier
   4949      `Language' record.  *Note Option file format::.
   4950 
   4951 `RejectNegative'
   4952      The option does not have a "no-" form.  All options beginning with
   4953      "f", "W" or "m" are assumed to have a "no-" form unless this
   4954      property is used.
   4955 
   4956 `Negative(OTHERNAME)'
   4957      The option will turn off another option OTHERNAME, which is the
   4958      the option name with the leading "-" removed.  This chain action
   4959      will propagate through the `Negative' property of the option to be
   4960      turned off.
   4961 
   4962 `Joined'
   4963 `Separate'
   4964      The option takes a mandatory argument.  `Joined' indicates that
   4965      the option and argument can be included in the same `argv' entry
   4966      (as with `-mflush-func=NAME', for example).  `Separate' indicates
   4967      that the option and argument can be separate `argv' entries (as
   4968      with `-o').  An option is allowed to have both of these properties.
   4969 
   4970 `JoinedOrMissing'
   4971      The option takes an optional argument.  If the argument is given,
   4972      it will be part of the same `argv' entry as the option itself.
   4973 
   4974      This property cannot be used alongside `Joined' or `Separate'.
   4975 
   4976 `UInteger'
   4977      The option's argument is a non-negative integer.  The option parser
   4978      will check and convert the argument before passing it to the
   4979      relevant option handler.
   4980 
   4981 `Var(VAR)'
   4982      The state of this option should be stored in variable VAR.  The
   4983      way that the state is stored depends on the type of option:
   4984 
   4985         * If the option uses the `Mask' or `InverseMask' properties,
   4986           VAR is the integer variable that contains the mask.
   4987 
   4988         * If the option is a normal on/off switch, VAR is an integer
   4989           variable that is nonzero when the option is enabled.  The
   4990           options parser will set the variable to 1 when the positive
   4991           form of the option is used and 0 when the "no-" form is used.
   4992 
   4993         * If the option takes an argument and has the `UInteger'
   4994           property, VAR is an integer variable that stores the value of
   4995           the argument.
   4996 
   4997         * Otherwise, if the option takes an argument, VAR is a pointer
   4998           to the argument string.  The pointer will be null if the
   4999           argument is optional and wasn't given.
   5000 
   5001      The option-processing script will usually declare VAR in
   5002      `options.c' and leave it to be zero-initialized at start-up time.
   5003      You can modify this behavior using `VarExists' and `Init'.
   5004 
   5005 `Var(VAR, SET)'
   5006      The option controls an integer variable VAR and is active when VAR
   5007      equals SET.  The option parser will set VAR to SET when the
   5008      positive form of the option is used and `!SET' when the "no-" form
   5009      is used.
   5010 
   5011      VAR is declared in the same way as for the single-argument form
   5012      described above.
   5013 
   5014 `VarExists'
   5015      The variable specified by the `Var' property already exists.  No
   5016      definition should be added to `options.c' in response to this
   5017      option record.
   5018 
   5019      You should use this property only if the variable is declared
   5020      outside `options.c'.
   5021 
   5022 `Init(VALUE)'
   5023      The variable specified by the `Var' property should be statically
   5024      initialized to VALUE.
   5025 
   5026 `Mask(NAME)'
   5027      The option is associated with a bit in the `target_flags' variable
   5028      (*note Run-time Target::) and is active when that bit is set.  You
   5029      may also specify `Var' to select a variable other than
   5030      `target_flags'.
   5031 
   5032      The options-processing script will automatically allocate a unique
   5033      bit for the option.  If the option is attached to `target_flags',
   5034      the script will set the macro `MASK_NAME' to the appropriate
   5035      bitmask.  It will also declare a `TARGET_NAME' macro that has the
   5036      value 1 when the option is active and 0 otherwise.  If you use
   5037      `Var' to attach the option to a different variable, the associated
   5038      macros are called `OPTION_MASK_NAME' and `OPTION_NAME'
   5039      respectively.
   5040 
   5041      You can disable automatic bit allocation using `MaskExists'.
   5042 
   5043 `InverseMask(OTHERNAME)'
   5044 `InverseMask(OTHERNAME, THISNAME)'
   5045      The option is the inverse of another option that has the
   5046      `Mask(OTHERNAME)' property.  If THISNAME is given, the
   5047      options-processing script will declare a `TARGET_THISNAME' macro
   5048      that is 1 when the option is active and 0 otherwise.
   5049 
   5050 `MaskExists'
   5051      The mask specified by the `Mask' property already exists.  No
   5052      `MASK' or `TARGET' definitions should be added to `options.h' in
   5053      response to this option record.
   5054 
   5055      The main purpose of this property is to support synonymous options.
   5056      The first option should use `Mask(NAME)' and the others should use
   5057      `Mask(NAME) MaskExists'.
   5058 
   5059 `Report'
   5060      The state of the option should be printed by `-fverbose-asm'.
   5061 
   5062 `Undocumented'
   5063      The option is deliberately missing documentation and should not be
   5064      included in the `--help' output.
   5065 
   5066 `Condition(COND)'
   5067      The option should only be accepted if preprocessor condition COND
   5068      is true.  Note that any C declarations associated with the option
   5069      will be present even if COND is false; COND simply controls
   5070      whether the option is accepted and whether it is printed in the
   5071      `--help' output.
   5072 
   5073 
   5074 File: gccint.info,  Node: Passes,  Next: Trees,  Prev: Options,  Up: Top
   5075 
   5076 8 Passes and Files of the Compiler
   5077 **********************************
   5078 
   5079 This chapter is dedicated to giving an overview of the optimization and
   5080 code generation passes of the compiler.  In the process, it describes
   5081 some of the language front end interface, though this description is no
   5082 where near complete.
   5083 
   5084 * Menu:
   5085 
   5086 * Parsing pass::         The language front end turns text into bits.
   5087 * Gimplification pass::  The bits are turned into something we can optimize.
   5088 * Pass manager::	 Sequencing the optimization passes.
   5089 * Tree-SSA passes::      Optimizations on a high-level representation.
   5090 * RTL passes::           Optimizations on a low-level representation.
   5091 
   5092 
   5093 File: gccint.info,  Node: Parsing pass,  Next: Gimplification pass,  Up: Passes
   5094 
   5095 8.1 Parsing pass
   5096 ================
   5097 
   5098 The language front end is invoked only once, via
   5099 `lang_hooks.parse_file', to parse the entire input.  The language front
   5100 end may use any intermediate language representation deemed
   5101 appropriate.  The C front end uses GENERIC trees (CROSSREF), plus a
   5102 double handful of language specific tree codes defined in
   5103 `c-common.def'.  The Fortran front end uses a completely different
   5104 private representation.
   5105 
   5106  At some point the front end must translate the representation used in
   5107 the front end to a representation understood by the language-independent
   5108 portions of the compiler.  Current practice takes one of two forms.
   5109 The C front end manually invokes the gimplifier (CROSSREF) on each
   5110 function, and uses the gimplifier callbacks to convert the
   5111 language-specific tree nodes directly to GIMPLE (CROSSREF) before
   5112 passing the function off to be compiled.  The Fortran front end
   5113 converts from a private representation to GENERIC, which is later
   5114 lowered to GIMPLE when the function is compiled.  Which route to choose
   5115 probably depends on how well GENERIC (plus extensions) can be made to
   5116 match up with the source language and necessary parsing data structures.
   5117 
   5118  BUG: Gimplification must occur before nested function lowering, and
   5119 nested function lowering must be done by the front end before passing
   5120 the data off to cgraph.
   5121 
   5122  TODO: Cgraph should control nested function lowering.  It would only
   5123 be invoked when it is certain that the outer-most function is used.
   5124 
   5125  TODO: Cgraph needs a gimplify_function callback.  It should be invoked
   5126 when (1) it is certain that the function is used, (2) warning flags
   5127 specified by the user require some amount of compilation in order to
   5128 honor, (3) the language indicates that semantic analysis is not
   5129 complete until gimplification occurs.  Hum... this sounds overly
   5130 complicated.  Perhaps we should just have the front end gimplify
   5131 always; in most cases it's only one function call.
   5132 
   5133  The front end needs to pass all function definitions and top level
   5134 declarations off to the middle-end so that they can be compiled and
   5135 emitted to the object file.  For a simple procedural language, it is
   5136 usually most convenient to do this as each top level declaration or
   5137 definition is seen.  There is also a distinction to be made between
   5138 generating functional code and generating complete debug information.
   5139 The only thing that is absolutely required for functional code is that
   5140 function and data _definitions_ be passed to the middle-end.  For
   5141 complete debug information, function, data and type declarations should
   5142 all be passed as well.
   5143 
   5144  In any case, the front end needs each complete top-level function or
   5145 data declaration, and each data definition should be passed to
   5146 `rest_of_decl_compilation'.  Each complete type definition should be
   5147 passed to `rest_of_type_compilation'.  Each function definition should
   5148 be passed to `cgraph_finalize_function'.
   5149 
   5150  TODO: I know rest_of_compilation currently has all sorts of
   5151 rtl-generation semantics.  I plan to move all code generation bits
   5152 (both tree and rtl) to compile_function.  Should we hide cgraph from
   5153 the front ends and move back to rest_of_compilation as the official
   5154 interface?  Possibly we should rename all three interfaces such that
   5155 the names match in some meaningful way and that is more descriptive
   5156 than "rest_of".
   5157 
   5158  The middle-end will, at its option, emit the function and data
   5159 definitions immediately or queue them for later processing.
   5160 
   5161 
   5162 File: gccint.info,  Node: Gimplification pass,  Next: Pass manager,  Prev: Parsing pass,  Up: Passes
   5163 
   5164 8.2 Gimplification pass
   5165 =======================
   5166 
   5167 "Gimplification" is a whimsical term for the process of converting the
   5168 intermediate representation of a function into the GIMPLE language
   5169 (CROSSREF).  The term stuck, and so words like "gimplification",
   5170 "gimplify", "gimplifier" and the like are sprinkled throughout this
   5171 section of code.
   5172 
   5173  While a front end may certainly choose to generate GIMPLE directly if
   5174 it chooses, this can be a moderately complex process unless the
   5175 intermediate language used by the front end is already fairly simple.
   5176 Usually it is easier to generate GENERIC trees plus extensions and let
   5177 the language-independent gimplifier do most of the work.
   5178 
   5179  The main entry point to this pass is `gimplify_function_tree' located
   5180 in `gimplify.c'.  From here we process the entire function gimplifying
   5181 each statement in turn.  The main workhorse for this pass is
   5182 `gimplify_expr'.  Approximately everything passes through here at least
   5183 once, and it is from here that we invoke the `lang_hooks.gimplify_expr'
   5184 callback.
   5185 
   5186  The callback should examine the expression in question and return
   5187 `GS_UNHANDLED' if the expression is not a language specific construct
   5188 that requires attention.  Otherwise it should alter the expression in
   5189 some way to such that forward progress is made toward producing valid
   5190 GIMPLE.  If the callback is certain that the transformation is complete
   5191 and the expression is valid GIMPLE, it should return `GS_ALL_DONE'.
   5192 Otherwise it should return `GS_OK', which will cause the expression to
   5193 be processed again.  If the callback encounters an error during the
   5194 transformation (because the front end is relying on the gimplification
   5195 process to finish semantic checks), it should return `GS_ERROR'.
   5196 
   5197 
   5198 File: gccint.info,  Node: Pass manager,  Next: Tree-SSA passes,  Prev: Gimplification pass,  Up: Passes
   5199 
   5200 8.3 Pass manager
   5201 ================
   5202 
   5203 The pass manager is located in `passes.c', `tree-optimize.c' and
   5204 `tree-pass.h'.  Its job is to run all of the individual passes in the
   5205 correct order, and take care of standard bookkeeping that applies to
   5206 every pass.
   5207 
   5208  The theory of operation is that each pass defines a structure that
   5209 represents everything we need to know about that pass--when it should
   5210 be run, how it should be run, what intermediate language form or
   5211 on-the-side data structures it needs.  We register the pass to be run
   5212 in some particular order, and the pass manager arranges for everything
   5213 to happen in the correct order.
   5214 
   5215  The actuality doesn't completely live up to the theory at present.
   5216 Command-line switches and `timevar_id_t' enumerations must still be
   5217 defined elsewhere.  The pass manager validates constraints but does not
   5218 attempt to (re-)generate data structures or lower intermediate language
   5219 form based on the requirements of the next pass.  Nevertheless, what is
   5220 present is useful, and a far sight better than nothing at all.
   5221 
   5222  TODO: describe the global variables set up by the pass manager, and a
   5223 brief description of how a new pass should use it.  I need to look at
   5224 what info rtl passes use first....
   5225 
   5226 
   5227 File: gccint.info,  Node: Tree-SSA passes,  Next: RTL passes,  Prev: Pass manager,  Up: Passes
   5228 
   5229 8.4 Tree-SSA passes
   5230 ===================
   5231 
   5232 The following briefly describes the tree optimization passes that are
   5233 run after gimplification and what source files they are located in.
   5234 
   5235    * Remove useless statements
   5236 
   5237      This pass is an extremely simple sweep across the gimple code in
   5238      which we identify obviously dead code and remove it.  Here we do
   5239      things like simplify `if' statements with constant conditions,
   5240      remove exception handling constructs surrounding code that
   5241      obviously cannot throw, remove lexical bindings that contain no
   5242      variables, and other assorted simplistic cleanups.  The idea is to
   5243      get rid of the obvious stuff quickly rather than wait until later
   5244      when it's more work to get rid of it.  This pass is located in
   5245      `tree-cfg.c' and described by `pass_remove_useless_stmts'.
   5246 
   5247    * Mudflap declaration registration
   5248 
   5249      If mudflap (*note -fmudflap -fmudflapth -fmudflapir: (gcc)Optimize
   5250      Options.) is enabled, we generate code to register some variable
   5251      declarations with the mudflap runtime.  Specifically, the runtime
   5252      tracks the lifetimes of those variable declarations that have
   5253      their addresses taken, or whose bounds are unknown at compile time
   5254      (`extern').  This pass generates new exception handling constructs
   5255      (`try'/`finally'), and so must run before those are lowered.  In
   5256      addition, the pass enqueues declarations of static variables whose
   5257      lifetimes extend to the entire program.  The pass is located in
   5258      `tree-mudflap.c' and is described by `pass_mudflap_1'.
   5259 
   5260    * OpenMP lowering
   5261 
   5262      If OpenMP generation (`-fopenmp') is enabled, this pass lowers
   5263      OpenMP constructs into GIMPLE.
   5264 
   5265      Lowering of OpenMP constructs involves creating replacement
   5266      expressions for local variables that have been mapped using data
   5267      sharing clauses, exposing the control flow of most synchronization
   5268      directives and adding region markers to facilitate the creation of
   5269      the control flow graph.  The pass is located in `omp-low.c' and is
   5270      described by `pass_lower_omp'.
   5271 
   5272    * OpenMP expansion
   5273 
   5274      If OpenMP generation (`-fopenmp') is enabled, this pass expands
   5275      parallel regions into their own functions to be invoked by the
   5276      thread library.  The pass is located in `omp-low.c' and is
   5277      described by `pass_expand_omp'.
   5278 
   5279    * Lower control flow
   5280 
   5281      This pass flattens `if' statements (`COND_EXPR') and moves lexical
   5282      bindings (`BIND_EXPR') out of line.  After this pass, all `if'
   5283      statements will have exactly two `goto' statements in its `then'
   5284      and `else' arms.  Lexical binding information for each statement
   5285      will be found in `TREE_BLOCK' rather than being inferred from its
   5286      position under a `BIND_EXPR'.  This pass is found in
   5287      `gimple-low.c' and is described by `pass_lower_cf'.
   5288 
   5289    * Lower exception handling control flow
   5290 
   5291      This pass decomposes high-level exception handling constructs
   5292      (`TRY_FINALLY_EXPR' and `TRY_CATCH_EXPR') into a form that
   5293      explicitly represents the control flow involved.  After this pass,
   5294      `lookup_stmt_eh_region' will return a non-negative number for any
   5295      statement that may have EH control flow semantics; examine
   5296      `tree_can_throw_internal' or `tree_can_throw_external' for exact
   5297      semantics.  Exact control flow may be extracted from
   5298      `foreach_reachable_handler'.  The EH region nesting tree is defined
   5299      in `except.h' and built in `except.c'.  The lowering pass itself
   5300      is in `tree-eh.c' and is described by `pass_lower_eh'.
   5301 
   5302    * Build the control flow graph
   5303 
   5304      This pass decomposes a function into basic blocks and creates all
   5305      of the edges that connect them.  It is located in `tree-cfg.c' and
   5306      is described by `pass_build_cfg'.
   5307 
   5308    * Find all referenced variables
   5309 
   5310      This pass walks the entire function and collects an array of all
   5311      variables referenced in the function, `referenced_vars'.  The
   5312      index at which a variable is found in the array is used as a UID
   5313      for the variable within this function.  This data is needed by the
   5314      SSA rewriting routines.  The pass is located in `tree-dfa.c' and
   5315      is described by `pass_referenced_vars'.
   5316 
   5317    * Enter static single assignment form
   5318 
   5319      This pass rewrites the function such that it is in SSA form.  After
   5320      this pass, all `is_gimple_reg' variables will be referenced by
   5321      `SSA_NAME', and all occurrences of other variables will be
   5322      annotated with `VDEFS' and `VUSES'; PHI nodes will have been
   5323      inserted as necessary for each basic block.  This pass is located
   5324      in `tree-ssa.c' and is described by `pass_build_ssa'.
   5325 
   5326    * Warn for uninitialized variables
   5327 
   5328      This pass scans the function for uses of `SSA_NAME's that are fed
   5329      by default definition.  For non-parameter variables, such uses are
   5330      uninitialized.  The pass is run twice, before and after
   5331      optimization.  In the first pass we only warn for uses that are
   5332      positively uninitialized; in the second pass we warn for uses that
   5333      are possibly uninitialized.  The pass is located in `tree-ssa.c'
   5334      and is defined by `pass_early_warn_uninitialized' and
   5335      `pass_late_warn_uninitialized'.
   5336 
   5337    * Dead code elimination
   5338 
   5339      This pass scans the function for statements without side effects
   5340      whose result is unused.  It does not do memory life analysis, so
   5341      any value that is stored in memory is considered used.  The pass
   5342      is run multiple times throughout the optimization process.  It is
   5343      located in `tree-ssa-dce.c' and is described by `pass_dce'.
   5344 
   5345    * Dominator optimizations
   5346 
   5347      This pass performs trivial dominator-based copy and constant
   5348      propagation, expression simplification, and jump threading.  It is
   5349      run multiple times throughout the optimization process.  It it
   5350      located in `tree-ssa-dom.c' and is described by `pass_dominator'.
   5351 
   5352    * Forward propagation of single-use variables
   5353 
   5354      This pass attempts to remove redundant computation by substituting
   5355      variables that are used once into the expression that uses them and
   5356      seeing if the result can be simplified.  It is located in
   5357      `tree-ssa-forwprop.c' and is described by `pass_forwprop'.
   5358 
   5359    * Copy Renaming
   5360 
   5361      This pass attempts to change the name of compiler temporaries
   5362      involved in copy operations such that SSA->normal can coalesce the
   5363      copy away.  When compiler temporaries are copies of user
   5364      variables, it also renames the compiler temporary to the user
   5365      variable resulting in better use of user symbols.  It is located
   5366      in `tree-ssa-copyrename.c' and is described by `pass_copyrename'.
   5367 
   5368    * PHI node optimizations
   5369 
   5370      This pass recognizes forms of PHI inputs that can be represented as
   5371      conditional expressions and rewrites them into straight line code.
   5372      It is located in `tree-ssa-phiopt.c' and is described by
   5373      `pass_phiopt'.
   5374 
   5375    * May-alias optimization
   5376 
   5377      This pass performs a flow sensitive SSA-based points-to analysis.
   5378      The resulting may-alias, must-alias, and escape analysis
   5379      information is used to promote variables from in-memory
   5380      addressable objects to non-aliased variables that can be renamed
   5381      into SSA form.  We also update the `VDEF'/`VUSE' memory tags for
   5382      non-renameable aggregates so that we get fewer false kills.  The
   5383      pass is located in `tree-ssa-alias.c' and is described by
   5384      `pass_may_alias'.
   5385 
   5386      Interprocedural points-to information is located in
   5387      `tree-ssa-structalias.c' and described by `pass_ipa_pta'.
   5388 
   5389    * Profiling
   5390 
   5391      This pass rewrites the function in order to collect runtime block
   5392      and value profiling data.  Such data may be fed back into the
   5393      compiler on a subsequent run so as to allow optimization based on
   5394      expected execution frequencies.  The pass is located in
   5395      `predict.c' and is described by `pass_profile'.
   5396 
   5397    * Lower complex arithmetic
   5398 
   5399      This pass rewrites complex arithmetic operations into their
   5400      component scalar arithmetic operations.  The pass is located in
   5401      `tree-complex.c' and is described by `pass_lower_complex'.
   5402 
   5403    * Scalar replacement of aggregates
   5404 
   5405      This pass rewrites suitable non-aliased local aggregate variables
   5406      into a set of scalar variables.  The resulting scalar variables are
   5407      rewritten into SSA form, which allows subsequent optimization
   5408      passes to do a significantly better job with them.  The pass is
   5409      located in `tree-sra.c' and is described by `pass_sra'.
   5410 
   5411    * Dead store elimination
   5412 
   5413      This pass eliminates stores to memory that are subsequently
   5414      overwritten by another store, without any intervening loads.  The
   5415      pass is located in `tree-ssa-dse.c' and is described by `pass_dse'.
   5416 
   5417    * Tail recursion elimination
   5418 
   5419      This pass transforms tail recursion into a loop.  It is located in
   5420      `tree-tailcall.c' and is described by `pass_tail_recursion'.
   5421 
   5422    * Forward store motion
   5423 
   5424      This pass sinks stores and assignments down the flowgraph closer
   5425      to their use point.  The pass is located in `tree-ssa-sink.c' and
   5426      is described by `pass_sink_code'.
   5427 
   5428    * Partial redundancy elimination
   5429 
   5430      This pass eliminates partially redundant computations, as well as
   5431      performing load motion.  The pass is located in `tree-ssa-pre.c'
   5432      and is described by `pass_pre'.
   5433 
   5434      Just before partial redundancy elimination, if
   5435      `-funsafe-math-optimizations' is on, GCC tries to convert
   5436      divisions to multiplications by the reciprocal.  The pass is
   5437      located in `tree-ssa-math-opts.c' and is described by
   5438      `pass_cse_reciprocal'.
   5439 
   5440    * Full redundancy elimination
   5441 
   5442      This is a simpler form of PRE that only eliminates redundancies
   5443      that occur an all paths.  It is located in `tree-ssa-pre.c' and
   5444      described by `pass_fre'.
   5445 
   5446    * Loop optimization
   5447 
   5448      The main driver of the pass is placed in `tree-ssa-loop.c' and
   5449      described by `pass_loop'.
   5450 
   5451      The optimizations performed by this pass are:
   5452 
   5453      Loop invariant motion.  This pass moves only invariants that would
   5454      be hard to handle on rtl level (function calls, operations that
   5455      expand to nontrivial sequences of insns).  With `-funswitch-loops'
   5456      it also moves operands of conditions that are invariant out of the
   5457      loop, so that we can use just trivial invariantness analysis in
   5458      loop unswitching.  The pass also includes store motion.  The pass
   5459      is implemented in `tree-ssa-loop-im.c'.
   5460 
   5461      Canonical induction variable creation.  This pass creates a simple
   5462      counter for number of iterations of the loop and replaces the exit
   5463      condition of the loop using it, in case when a complicated
   5464      analysis is necessary to determine the number of iterations.
   5465      Later optimizations then may determine the number easily.  The
   5466      pass is implemented in `tree-ssa-loop-ivcanon.c'.
   5467 
   5468      Induction variable optimizations.  This pass performs standard
   5469      induction variable optimizations, including strength reduction,
   5470      induction variable merging and induction variable elimination.
   5471      The pass is implemented in `tree-ssa-loop-ivopts.c'.
   5472 
   5473      Loop unswitching.  This pass moves the conditional jumps that are
   5474      invariant out of the loops.  To achieve this, a duplicate of the
   5475      loop is created for each possible outcome of conditional jump(s).
   5476      The pass is implemented in `tree-ssa-loop-unswitch.c'.  This pass
   5477      should eventually replace the rtl-level loop unswitching in
   5478      `loop-unswitch.c', but currently the rtl-level pass is not
   5479      completely redundant yet due to deficiencies in tree level alias
   5480      analysis.
   5481 
   5482      The optimizations also use various utility functions contained in
   5483      `tree-ssa-loop-manip.c', `cfgloop.c', `cfgloopanal.c' and
   5484      `cfgloopmanip.c'.
   5485 
   5486      Vectorization.  This pass transforms loops to operate on vector
   5487      types instead of scalar types.  Data parallelism across loop
   5488      iterations is exploited to group data elements from consecutive
   5489      iterations into a vector and operate on them in parallel.
   5490      Depending on available target support the loop is conceptually
   5491      unrolled by a factor `VF' (vectorization factor), which is the
   5492      number of elements operated upon in parallel in each iteration,
   5493      and the `VF' copies of each scalar operation are fused to form a
   5494      vector operation.  Additional loop transformations such as peeling
   5495      and versioning may take place to align the number of iterations,
   5496      and to align the memory accesses in the loop.  The pass is
   5497      implemented in `tree-vectorizer.c' (the main driver and general
   5498      utilities), `tree-vect-analyze.c' and `tree-vect-transform.c'.
   5499      Analysis of data references is in `tree-data-ref.c'.
   5500 
   5501      Autoparallelization.  This pass splits the loop iteration space to
   5502      run into several threads.  The pass is implemented in
   5503      `tree-parloops.c'.
   5504 
   5505    * Tree level if-conversion for vectorizer
   5506 
   5507      This pass applies if-conversion to simple loops to help vectorizer.
   5508      We identify if convertible loops, if-convert statements and merge
   5509      basic blocks in one big block.  The idea is to present loop in such
   5510      form so that vectorizer can have one to one mapping between
   5511      statements and available vector operations.  This patch
   5512      re-introduces COND_EXPR at GIMPLE level.  This pass is located in
   5513      `tree-if-conv.c' and is described by `pass_if_conversion'.
   5514 
   5515    * Conditional constant propagation
   5516 
   5517      This pass relaxes a lattice of values in order to identify those
   5518      that must be constant even in the presence of conditional branches.
   5519      The pass is located in `tree-ssa-ccp.c' and is described by
   5520      `pass_ccp'.
   5521 
   5522      A related pass that works on memory loads and stores, and not just
   5523      register values, is located in `tree-ssa-ccp.c' and described by
   5524      `pass_store_ccp'.
   5525 
   5526    * Conditional copy propagation
   5527 
   5528      This is similar to constant propagation but the lattice of values
   5529      is the "copy-of" relation.  It eliminates redundant copies from the
   5530      code.  The pass is located in `tree-ssa-copy.c' and described by
   5531      `pass_copy_prop'.
   5532 
   5533      A related pass that works on memory copies, and not just register
   5534      copies, is located in `tree-ssa-copy.c' and described by
   5535      `pass_store_copy_prop'.
   5536 
   5537    * Value range propagation
   5538 
   5539      This transformation is similar to constant propagation but instead
   5540      of propagating single constant values, it propagates known value
   5541      ranges.  The implementation is based on Patterson's range
   5542      propagation algorithm (Accurate Static Branch Prediction by Value
   5543      Range Propagation, J. R. C. Patterson, PLDI '95).  In contrast to
   5544      Patterson's algorithm, this implementation does not propagate
   5545      branch probabilities nor it uses more than a single range per SSA
   5546      name. This means that the current implementation cannot be used
   5547      for branch prediction (though adapting it would not be difficult).
   5548      The pass is located in `tree-vrp.c' and is described by
   5549      `pass_vrp'.
   5550 
   5551    * Folding built-in functions
   5552 
   5553      This pass simplifies built-in functions, as applicable, with
   5554      constant arguments or with inferable string lengths.  It is
   5555      located in `tree-ssa-ccp.c' and is described by
   5556      `pass_fold_builtins'.
   5557 
   5558    * Split critical edges
   5559 
   5560      This pass identifies critical edges and inserts empty basic blocks
   5561      such that the edge is no longer critical.  The pass is located in
   5562      `tree-cfg.c' and is described by `pass_split_crit_edges'.
   5563 
   5564    * Control dependence dead code elimination
   5565 
   5566      This pass is a stronger form of dead code elimination that can
   5567      eliminate unnecessary control flow statements.   It is located in
   5568      `tree-ssa-dce.c' and is described by `pass_cd_dce'.
   5569 
   5570    * Tail call elimination
   5571 
   5572      This pass identifies function calls that may be rewritten into
   5573      jumps.  No code transformation is actually applied here, but the
   5574      data and control flow problem is solved.  The code transformation
   5575      requires target support, and so is delayed until RTL.  In the
   5576      meantime `CALL_EXPR_TAILCALL' is set indicating the possibility.
   5577      The pass is located in `tree-tailcall.c' and is described by
   5578      `pass_tail_calls'.  The RTL transformation is handled by
   5579      `fixup_tail_calls' in `calls.c'.
   5580 
   5581    * Warn for function return without value
   5582 
   5583      For non-void functions, this pass locates return statements that do
   5584      not specify a value and issues a warning.  Such a statement may
   5585      have been injected by falling off the end of the function.  This
   5586      pass is run last so that we have as much time as possible to prove
   5587      that the statement is not reachable.  It is located in
   5588      `tree-cfg.c' and is described by `pass_warn_function_return'.
   5589 
   5590    * Mudflap statement annotation
   5591 
   5592      If mudflap is enabled, we rewrite some memory accesses with code to
   5593      validate that the memory access is correct.  In particular,
   5594      expressions involving pointer dereferences (`INDIRECT_REF',
   5595      `ARRAY_REF', etc.) are replaced by code that checks the selected
   5596      address range against the mudflap runtime's database of valid
   5597      regions.  This check includes an inline lookup into a
   5598      direct-mapped cache, based on shift/mask operations of the pointer
   5599      value, with a fallback function call into the runtime.  The pass
   5600      is located in `tree-mudflap.c' and is described by
   5601      `pass_mudflap_2'.
   5602 
   5603    * Leave static single assignment form
   5604 
   5605      This pass rewrites the function such that it is in normal form.  At
   5606      the same time, we eliminate as many single-use temporaries as
   5607      possible, so the intermediate language is no longer GIMPLE, but
   5608      GENERIC.  The pass is located in `tree-outof-ssa.c' and is
   5609      described by `pass_del_ssa'.
   5610 
   5611    * Merge PHI nodes that feed into one another
   5612 
   5613      This is part of the CFG cleanup passes.  It attempts to join PHI
   5614      nodes from a forwarder CFG block into another block with PHI
   5615      nodes.  The pass is located in `tree-cfgcleanup.c' and is
   5616      described by `pass_merge_phi'.
   5617 
   5618    * Return value optimization
   5619 
   5620      If a function always returns the same local variable, and that
   5621      local variable is an aggregate type, then the variable is replaced
   5622      with the return value for the function (i.e., the function's
   5623      DECL_RESULT).  This is equivalent to the C++ named return value
   5624      optimization applied to GIMPLE.  The pass is located in
   5625      `tree-nrv.c' and is described by `pass_nrv'.
   5626 
   5627    * Return slot optimization
   5628 
   5629      If a function returns a memory object and is called as `var =
   5630      foo()', this pass tries to change the call so that the address of
   5631      `var' is sent to the caller to avoid an extra memory copy.  This
   5632      pass is located in `tree-nrv.c' and is described by
   5633      `pass_return_slot'.
   5634 
   5635    * Optimize calls to `__builtin_object_size'
   5636 
   5637      This is a propagation pass similar to CCP that tries to remove
   5638      calls to `__builtin_object_size' when the size of the object can be
   5639      computed at compile-time.  This pass is located in
   5640      `tree-object-size.c' and is described by `pass_object_sizes'.
   5641 
   5642    * Loop invariant motion
   5643 
   5644      This pass removes expensive loop-invariant computations out of
   5645      loops.  The pass is located in `tree-ssa-loop.c' and described by
   5646      `pass_lim'.
   5647 
   5648    * Loop nest optimizations
   5649 
   5650      This is a family of loop transformations that works on loop nests.
   5651      It includes loop interchange, scaling, skewing and reversal and
   5652      they are all geared to the optimization of data locality in array
   5653      traversals and the removal of dependencies that hamper
   5654      optimizations such as loop parallelization and vectorization.  The
   5655      pass is located in `tree-loop-linear.c' and described by
   5656      `pass_linear_transform'.
   5657 
   5658    * Removal of empty loops
   5659 
   5660      This pass removes loops with no code in them.  The pass is located
   5661      in `tree-ssa-loop-ivcanon.c' and described by `pass_empty_loop'.
   5662 
   5663    * Unrolling of small loops
   5664 
   5665      This pass completely unrolls loops with few iterations.  The pass
   5666      is located in `tree-ssa-loop-ivcanon.c' and described by
   5667      `pass_complete_unroll'.
   5668 
   5669    * Predictive commoning
   5670 
   5671      This pass makes the code reuse the computations from the previous
   5672      iterations of the loops, especially loads and stores to memory.
   5673      It does so by storing the values of these computations to a bank
   5674      of temporary variables that are rotated at the end of loop.  To
   5675      avoid the need for this rotation, the loop is then unrolled and
   5676      the copies of the loop body are rewritten to use the appropriate
   5677      version of the temporary variable.  This pass is located in
   5678      `tree-predcom.c' and described by `pass_predcom'.
   5679 
   5680    * Array prefetching
   5681 
   5682      This pass issues prefetch instructions for array references inside
   5683      loops.  The pass is located in `tree-ssa-loop-prefetch.c' and
   5684      described by `pass_loop_prefetch'.
   5685 
   5686    * Reassociation
   5687 
   5688      This pass rewrites arithmetic expressions to enable optimizations
   5689      that operate on them, like redundancy elimination and
   5690      vectorization.  The pass is located in `tree-ssa-reassoc.c' and
   5691      described by `pass_reassoc'.
   5692 
   5693    * Optimization of `stdarg' functions
   5694 
   5695      This pass tries to avoid the saving of register arguments into the
   5696      stack on entry to `stdarg' functions.  If the function doesn't use
   5697      any `va_start' macros, no registers need to be saved.  If
   5698      `va_start' macros are used, the `va_list' variables don't escape
   5699      the function, it is only necessary to save registers that will be
   5700      used in `va_arg' macros.  For instance, if `va_arg' is only used
   5701      with integral types in the function, floating point registers
   5702      don't need to be saved.  This pass is located in `tree-stdarg.c'
   5703      and described by `pass_stdarg'.
   5704 
   5705 
   5706 
   5707 File: gccint.info,  Node: RTL passes,  Prev: Tree-SSA passes,  Up: Passes
   5708 
   5709 8.5 RTL passes
   5710 ==============
   5711 
   5712 The following briefly describes the rtl generation and optimization
   5713 passes that are run after tree optimization.
   5714 
   5715    * RTL generation
   5716 
   5717      The source files for RTL generation include `stmt.c', `calls.c',
   5718      `expr.c', `explow.c', `expmed.c', `function.c', `optabs.c' and
   5719      `emit-rtl.c'.  Also, the file `insn-emit.c', generated from the
   5720      machine description by the program `genemit', is used in this
   5721      pass.  The header file `expr.h' is used for communication within
   5722      this pass.
   5723 
   5724      The header files `insn-flags.h' and `insn-codes.h', generated from
   5725      the machine description by the programs `genflags' and `gencodes',
   5726      tell this pass which standard names are available for use and
   5727      which patterns correspond to them.
   5728 
   5729    * Generate exception handling landing pads
   5730 
   5731      This pass generates the glue that handles communication between the
   5732      exception handling library routines and the exception handlers
   5733      within the function.  Entry points in the function that are
   5734      invoked by the exception handling library are called "landing
   5735      pads".  The code for this pass is located within `except.c'.
   5736 
   5737    * Cleanup control flow graph
   5738 
   5739      This pass removes unreachable code, simplifies jumps to next,
   5740      jumps to jump, jumps across jumps, etc.  The pass is run multiple
   5741      times.  For historical reasons, it is occasionally referred to as
   5742      the "jump optimization pass".  The bulk of the code for this pass
   5743      is in `cfgcleanup.c', and there are support routines in `cfgrtl.c'
   5744      and `jump.c'.
   5745 
   5746    * Forward propagation of single-def values
   5747 
   5748      This pass attempts to remove redundant computation by substituting
   5749      variables that come from a single definition, and seeing if the
   5750      result can be simplified.  It performs copy propagation and
   5751      addressing mode selection.  The pass is run twice, with values
   5752      being propagated into loops only on the second run.  It is located
   5753      in `fwprop.c'.
   5754 
   5755    * Common subexpression elimination
   5756 
   5757      This pass removes redundant computation within basic blocks, and
   5758      optimizes addressing modes based on cost.  The pass is run twice.
   5759      The source is located in `cse.c'.
   5760 
   5761    * Global common subexpression elimination.
   5762 
   5763      This pass performs two different types of GCSE  depending on
   5764      whether you are optimizing for size or not (LCM based GCSE tends
   5765      to increase code size for a gain in speed, while Morel-Renvoise
   5766      based GCSE does not).  When optimizing for size, GCSE is done
   5767      using Morel-Renvoise Partial Redundancy Elimination, with the
   5768      exception that it does not try to move invariants out of
   5769      loops--that is left to  the loop optimization pass.  If MR PRE
   5770      GCSE is done, code hoisting (aka unification) is also done, as
   5771      well as load motion.  If you are optimizing for speed, LCM (lazy
   5772      code motion) based GCSE is done.  LCM is based on the work of
   5773      Knoop, Ruthing, and Steffen.  LCM based GCSE also does loop
   5774      invariant code motion.  We also perform load and store motion when
   5775      optimizing for speed.  Regardless of which type of GCSE is used,
   5776      the GCSE pass also performs global constant and  copy propagation.
   5777      The source file for this pass is `gcse.c', and the LCM routines
   5778      are in `lcm.c'.
   5779 
   5780    * Loop optimization
   5781 
   5782      This pass performs several loop related optimizations.  The source
   5783      files `cfgloopanal.c' and `cfgloopmanip.c' contain generic loop
   5784      analysis and manipulation code.  Initialization and finalization
   5785      of loop structures is handled by `loop-init.c'.  A loop invariant
   5786      motion pass is implemented in `loop-invariant.c'.  Basic block
   5787      level optimizations--unrolling, peeling and unswitching loops--
   5788      are implemented in `loop-unswitch.c' and `loop-unroll.c'.
   5789      Replacing of the exit condition of loops by special
   5790      machine-dependent instructions is handled by `loop-doloop.c'.
   5791 
   5792    * Jump bypassing
   5793 
   5794      This pass is an aggressive form of GCSE that transforms the control
   5795      flow graph of a function by propagating constants into conditional
   5796      branch instructions.  The source file for this pass is `gcse.c'.
   5797 
   5798    * If conversion
   5799 
   5800      This pass attempts to replace conditional branches and surrounding
   5801      assignments with arithmetic, boolean value producing comparison
   5802      instructions, and conditional move instructions.  In the very last
   5803      invocation after reload, it will generate predicated instructions
   5804      when supported by the target.  The pass is located in `ifcvt.c'.
   5805 
   5806    * Web construction
   5807 
   5808      This pass splits independent uses of each pseudo-register.  This
   5809      can improve effect of the other transformation, such as CSE or
   5810      register allocation.  Its source files are `web.c'.
   5811 
   5812    * Life analysis
   5813 
   5814      This pass computes which pseudo-registers are live at each point in
   5815      the program, and makes the first instruction that uses a value
   5816      point at the instruction that computed the value.  It then deletes
   5817      computations whose results are never used, and combines memory
   5818      references with add or subtract instructions to make autoincrement
   5819      or autodecrement addressing.  The pass is located in `flow.c'.
   5820 
   5821    * Instruction combination
   5822 
   5823      This pass attempts to combine groups of two or three instructions
   5824      that are related by data flow into single instructions.  It
   5825      combines the RTL expressions for the instructions by substitution,
   5826      simplifies the result using algebra, and then attempts to match
   5827      the result against the machine description.  The pass is located
   5828      in `combine.c'.
   5829 
   5830    * Register movement
   5831 
   5832      This pass looks for cases where matching constraints would force an
   5833      instruction to need a reload, and this reload would be a
   5834      register-to-register move.  It then attempts to change the
   5835      registers used by the instruction to avoid the move instruction.
   5836      The pass is located in `regmove.c'.
   5837 
   5838    * Optimize mode switching
   5839 
   5840      This pass looks for instructions that require the processor to be
   5841      in a specific "mode" and minimizes the number of mode changes
   5842      required to satisfy all users.  What these modes are, and what
   5843      they apply to are completely target-specific.  The source is
   5844      located in `mode-switching.c'.
   5845 
   5846    * Modulo scheduling
   5847 
   5848      This pass looks at innermost loops and reorders their instructions
   5849      by overlapping different iterations.  Modulo scheduling is
   5850      performed immediately before instruction scheduling.  The pass is
   5851      located in (`modulo-sched.c').
   5852 
   5853    * Instruction scheduling
   5854 
   5855      This pass looks for instructions whose output will not be
   5856      available by the time that it is used in subsequent instructions.
   5857      Memory loads and floating point instructions often have this
   5858      behavior on RISC machines.  It re-orders instructions within a
   5859      basic block to try to separate the definition and use of items
   5860      that otherwise would cause pipeline stalls.  This pass is
   5861      performed twice, before and after register allocation.  The pass
   5862      is located in `haifa-sched.c', `sched-deps.c', `sched-ebb.c',
   5863      `sched-rgn.c' and `sched-vis.c'.
   5864 
   5865    * Register allocation
   5866 
   5867      These passes make sure that all occurrences of pseudo registers are
   5868      eliminated, either by allocating them to a hard register, replacing
   5869      them by an equivalent expression (e.g. a constant) or by placing
   5870      them on the stack.  This is done in several subpasses:
   5871 
   5872         * Register class preferencing.  The RTL code is scanned to find
   5873           out which register class is best for each pseudo register.
   5874           The source file is `regclass.c'.
   5875 
   5876         * Local register allocation.  This pass allocates hard
   5877           registers to pseudo registers that are used only within one
   5878           basic block.  Because the basic block is linear, it can use
   5879           fast and powerful techniques to do a decent job.  The source
   5880           is located in `local-alloc.c'.
   5881 
   5882         * Global register allocation.  This pass allocates hard
   5883           registers for the remaining pseudo registers (those whose
   5884           life spans are not contained in one basic block).  The pass
   5885           is located in `global.c'.
   5886 
   5887         * Reloading.  This pass renumbers pseudo registers with the
   5888           hardware registers numbers they were allocated.  Pseudo
   5889           registers that did not get hard registers are replaced with
   5890           stack slots.  Then it finds instructions that are invalid
   5891           because a value has failed to end up in a register, or has
   5892           ended up in a register of the wrong kind.  It fixes up these
   5893           instructions by reloading the problematical values
   5894           temporarily into registers.  Additional instructions are
   5895           generated to do the copying.
   5896 
   5897           The reload pass also optionally eliminates the frame pointer
   5898           and inserts instructions to save and restore call-clobbered
   5899           registers around calls.
   5900 
   5901           Source files are `reload.c' and `reload1.c', plus the header
   5902           `reload.h' used for communication between them.
   5903 
   5904    * Basic block reordering
   5905 
   5906      This pass implements profile guided code positioning.  If profile
   5907      information is not available, various types of static analysis are
   5908      performed to make the predictions normally coming from the profile
   5909      feedback (IE execution frequency, branch probability, etc).  It is
   5910      implemented in the file `bb-reorder.c', and the various prediction
   5911      routines are in `predict.c'.
   5912 
   5913    * Variable tracking
   5914 
   5915      This pass computes where the variables are stored at each position
   5916      in code and generates notes describing the variable locations to
   5917      RTL code.  The location lists are then generated according to these
   5918      notes to debug information if the debugging information format
   5919      supports location lists.
   5920 
   5921    * Delayed branch scheduling
   5922 
   5923      This optional pass attempts to find instructions that can go into
   5924      the delay slots of other instructions, usually jumps and calls.
   5925      The source file name is `reorg.c'.
   5926 
   5927    * Branch shortening
   5928 
   5929      On many RISC machines, branch instructions have a limited range.
   5930      Thus, longer sequences of instructions must be used for long
   5931      branches.  In this pass, the compiler figures out what how far
   5932      each instruction will be from each other instruction, and
   5933      therefore whether the usual instructions, or the longer sequences,
   5934      must be used for each branch.
   5935 
   5936    * Register-to-stack conversion
   5937 
   5938      Conversion from usage of some hard registers to usage of a register
   5939      stack may be done at this point.  Currently, this is supported only
   5940      for the floating-point registers of the Intel 80387 coprocessor.
   5941      The source file name is `reg-stack.c'.
   5942 
   5943    * Final
   5944 
   5945      This pass outputs the assembler code for the function.  The source
   5946      files are `final.c' plus `insn-output.c'; the latter is generated
   5947      automatically from the machine description by the tool `genoutput'.
   5948      The header file `conditions.h' is used for communication between
   5949      these files.  If mudflap is enabled, the queue of deferred
   5950      declarations and any addressed constants (e.g., string literals)
   5951      is processed by `mudflap_finish_file' into a synthetic constructor
   5952      function containing calls into the mudflap runtime.
   5953 
   5954    * Debugging information output
   5955 
   5956      This is run after final because it must output the stack slot
   5957      offsets for pseudo registers that did not get hard registers.
   5958      Source files are `dbxout.c' for DBX symbol table format,
   5959      `sdbout.c' for SDB symbol table format, `dwarfout.c' for DWARF
   5960      symbol table format, files `dwarf2out.c' and `dwarf2asm.c' for
   5961      DWARF2 symbol table format, and `vmsdbgout.c' for VMS debug symbol
   5962      table format.
   5963 
   5964 
   5965 
   5966 File: gccint.info,  Node: Trees,  Next: RTL,  Prev: Passes,  Up: Top
   5967 
   5968 9 Trees: The intermediate representation used by the C and C++ front ends
   5969 *************************************************************************
   5970 
   5971 This chapter documents the internal representation used by GCC to
   5972 represent C and C++ source programs.  When presented with a C or C++
   5973 source program, GCC parses the program, performs semantic analysis
   5974 (including the generation of error messages), and then produces the
   5975 internal representation described here.  This representation contains a
   5976 complete representation for the entire translation unit provided as
   5977 input to the front end.  This representation is then typically processed
   5978 by a code-generator in order to produce machine code, but could also be
   5979 used in the creation of source browsers, intelligent editors, automatic
   5980 documentation generators, interpreters, and any other programs needing
   5981 the ability to process C or C++ code.
   5982 
   5983  This chapter explains the internal representation.  In particular, it
   5984 documents the internal representation for C and C++ source constructs,
   5985 and the macros, functions, and variables that can be used to access
   5986 these constructs.  The C++ representation is largely a superset of the
   5987 representation used in the C front end.  There is only one construct
   5988 used in C that does not appear in the C++ front end and that is the GNU
   5989 "nested function" extension.  Many of the macros documented here do not
   5990 apply in C because the corresponding language constructs do not appear
   5991 in C.
   5992 
   5993  If you are developing a "back end", be it is a code-generator or some
   5994 other tool, that uses this representation, you may occasionally find
   5995 that you need to ask questions not easily answered by the functions and
   5996 macros available here.  If that situation occurs, it is quite likely
   5997 that GCC already supports the functionality you desire, but that the
   5998 interface is simply not documented here.  In that case, you should ask
   5999 the GCC maintainers (via mail to <gcc (a] gcc.gnu.org>) about documenting
   6000 the functionality you require.  Similarly, if you find yourself writing
   6001 functions that do not deal directly with your back end, but instead
   6002 might be useful to other people using the GCC front end, you should
   6003 submit your patches for inclusion in GCC.
   6004 
   6005 * Menu:
   6006 
   6007 * Deficiencies::        Topics net yet covered in this document.
   6008 * Tree overview::       All about `tree's.
   6009 * Types::               Fundamental and aggregate types.
   6010 * Scopes::              Namespaces and classes.
   6011 * Functions::           Overloading, function bodies, and linkage.
   6012 * Declarations::        Type declarations and variables.
   6013 * Attributes::          Declaration and type attributes.
   6014 * Expression trees::    From `typeid' to `throw'.
   6015 
   6016 
   6017 File: gccint.info,  Node: Deficiencies,  Next: Tree overview,  Up: Trees
   6018 
   6019 9.1 Deficiencies
   6020 ================
   6021 
   6022 There are many places in which this document is incomplet and incorrekt.
   6023 It is, as of yet, only _preliminary_ documentation.
   6024 
   6025 
   6026 File: gccint.info,  Node: Tree overview,  Next: Types,  Prev: Deficiencies,  Up: Trees
   6027 
   6028 9.2 Overview
   6029 ============
   6030 
   6031 The central data structure used by the internal representation is the
   6032 `tree'.  These nodes, while all of the C type `tree', are of many
   6033 varieties.  A `tree' is a pointer type, but the object to which it
   6034 points may be of a variety of types.  From this point forward, we will
   6035 refer to trees in ordinary type, rather than in `this font', except
   6036 when talking about the actual C type `tree'.
   6037 
   6038  You can tell what kind of node a particular tree is by using the
   6039 `TREE_CODE' macro.  Many, many macros take trees as input and return
   6040 trees as output.  However, most macros require a certain kind of tree
   6041 node as input.  In other words, there is a type-system for trees, but
   6042 it is not reflected in the C type-system.
   6043 
   6044  For safety, it is useful to configure GCC with `--enable-checking'.
   6045 Although this results in a significant performance penalty (since all
   6046 tree types are checked at run-time), and is therefore inappropriate in a
   6047 release version, it is extremely helpful during the development process.
   6048 
   6049  Many macros behave as predicates.  Many, although not all, of these
   6050 predicates end in `_P'.  Do not rely on the result type of these macros
   6051 being of any particular type.  You may, however, rely on the fact that
   6052 the type can be compared to `0', so that statements like
   6053      if (TEST_P (t) && !TEST_P (y))
   6054        x = 1;
   6055  and
   6056      int i = (TEST_P (t) != 0);
   6057  are legal.  Macros that return `int' values now may be changed to
   6058 return `tree' values, or other pointers in the future.  Even those that
   6059 continue to return `int' may return multiple nonzero codes where
   6060 previously they returned only zero and one.  Therefore, you should not
   6061 write code like
   6062      if (TEST_P (t) == 1)
   6063  as this code is not guaranteed to work correctly in the future.
   6064 
   6065  You should not take the address of values returned by the macros or
   6066 functions described here.  In particular, no guarantee is given that the
   6067 values are lvalues.
   6068 
   6069  In general, the names of macros are all in uppercase, while the names
   6070 of functions are entirely in lowercase.  There are rare exceptions to
   6071 this rule.  You should assume that any macro or function whose name is
   6072 made up entirely of uppercase letters may evaluate its arguments more
   6073 than once.  You may assume that a macro or function whose name is made
   6074 up entirely of lowercase letters will evaluate its arguments only once.
   6075 
   6076  The `error_mark_node' is a special tree.  Its tree code is
   6077 `ERROR_MARK', but since there is only ever one node with that code, the
   6078 usual practice is to compare the tree against `error_mark_node'.  (This
   6079 test is just a test for pointer equality.)  If an error has occurred
   6080 during front-end processing the flag `errorcount' will be set.  If the
   6081 front end has encountered code it cannot handle, it will issue a
   6082 message to the user and set `sorrycount'.  When these flags are set,
   6083 any macro or function which normally returns a tree of a particular
   6084 kind may instead return the `error_mark_node'.  Thus, if you intend to
   6085 do any processing of erroneous code, you must be prepared to deal with
   6086 the `error_mark_node'.
   6087 
   6088  Occasionally, a particular tree slot (like an operand to an expression,
   6089 or a particular field in a declaration) will be referred to as
   6090 "reserved for the back end".  These slots are used to store RTL when
   6091 the tree is converted to RTL for use by the GCC back end.  However, if
   6092 that process is not taking place (e.g., if the front end is being hooked
   6093 up to an intelligent editor), then those slots may be used by the back
   6094 end presently in use.
   6095 
   6096  If you encounter situations that do not match this documentation, such
   6097 as tree nodes of types not mentioned here, or macros documented to
   6098 return entities of a particular kind that instead return entities of
   6099 some different kind, you have found a bug, either in the front end or in
   6100 the documentation.  Please report these bugs as you would any other bug.
   6101 
   6102 * Menu:
   6103 
   6104 * Macros and Functions::Macros and functions that can be used with all trees.
   6105 * Identifiers::         The names of things.
   6106 * Containers::          Lists and vectors.
   6107 
   6108 
   6109 File: gccint.info,  Node: Macros and Functions,  Next: Identifiers,  Up: Tree overview
   6110 
   6111 9.2.1 Trees
   6112 -----------
   6113 
   6114 This section is not here yet.
   6115 
   6116 
   6117 File: gccint.info,  Node: Identifiers,  Next: Containers,  Prev: Macros and Functions,  Up: Tree overview
   6118 
   6119 9.2.2 Identifiers
   6120 -----------------
   6121 
   6122 An `IDENTIFIER_NODE' represents a slightly more general concept that
   6123 the standard C or C++ concept of identifier.  In particular, an
   6124 `IDENTIFIER_NODE' may contain a `$', or other extraordinary characters.
   6125 
   6126  There are never two distinct `IDENTIFIER_NODE's representing the same
   6127 identifier.  Therefore, you may use pointer equality to compare
   6128 `IDENTIFIER_NODE's, rather than using a routine like `strcmp'.
   6129 
   6130  You can use the following macros to access identifiers:
   6131 `IDENTIFIER_POINTER'
   6132      The string represented by the identifier, represented as a
   6133      `char*'.  This string is always `NUL'-terminated, and contains no
   6134      embedded `NUL' characters.
   6135 
   6136 `IDENTIFIER_LENGTH'
   6137      The length of the string returned by `IDENTIFIER_POINTER', not
   6138      including the trailing `NUL'.  This value of `IDENTIFIER_LENGTH
   6139      (x)' is always the same as `strlen (IDENTIFIER_POINTER (x))'.
   6140 
   6141 `IDENTIFIER_OPNAME_P'
   6142      This predicate holds if the identifier represents the name of an
   6143      overloaded operator.  In this case, you should not depend on the
   6144      contents of either the `IDENTIFIER_POINTER' or the
   6145      `IDENTIFIER_LENGTH'.
   6146 
   6147 `IDENTIFIER_TYPENAME_P'
   6148      This predicate holds if the identifier represents the name of a
   6149      user-defined conversion operator.  In this case, the `TREE_TYPE' of
   6150      the `IDENTIFIER_NODE' holds the type to which the conversion
   6151      operator converts.
   6152 
   6153 
   6154 
   6155 File: gccint.info,  Node: Containers,  Prev: Identifiers,  Up: Tree overview
   6156 
   6157 9.2.3 Containers
   6158 ----------------
   6159 
   6160 Two common container data structures can be represented directly with
   6161 tree nodes.  A `TREE_LIST' is a singly linked list containing two trees
   6162 per node.  These are the `TREE_PURPOSE' and `TREE_VALUE' of each node.
   6163 (Often, the `TREE_PURPOSE' contains some kind of tag, or additional
   6164 information, while the `TREE_VALUE' contains the majority of the
   6165 payload.  In other cases, the `TREE_PURPOSE' is simply `NULL_TREE',
   6166 while in still others both the `TREE_PURPOSE' and `TREE_VALUE' are of
   6167 equal stature.)  Given one `TREE_LIST' node, the next node is found by
   6168 following the `TREE_CHAIN'.  If the `TREE_CHAIN' is `NULL_TREE', then
   6169 you have reached the end of the list.
   6170 
   6171  A `TREE_VEC' is a simple vector.  The `TREE_VEC_LENGTH' is an integer
   6172 (not a tree) giving the number of nodes in the vector.  The nodes
   6173 themselves are accessed using the `TREE_VEC_ELT' macro, which takes two
   6174 arguments.  The first is the `TREE_VEC' in question; the second is an
   6175 integer indicating which element in the vector is desired.  The
   6176 elements are indexed from zero.
   6177 
   6178 
   6179 File: gccint.info,  Node: Types,  Next: Scopes,  Prev: Tree overview,  Up: Trees
   6180 
   6181 9.3 Types
   6182 =========
   6183 
   6184 All types have corresponding tree nodes.  However, you should not assume
   6185 that there is exactly one tree node corresponding to each type.  There
   6186 are often multiple nodes corresponding to the same type.
   6187 
   6188  For the most part, different kinds of types have different tree codes.
   6189 (For example, pointer types use a `POINTER_TYPE' code while arrays use
   6190 an `ARRAY_TYPE' code.)  However, pointers to member functions use the
   6191 `RECORD_TYPE' code.  Therefore, when writing a `switch' statement that
   6192 depends on the code associated with a particular type, you should take
   6193 care to handle pointers to member functions under the `RECORD_TYPE'
   6194 case label.
   6195 
   6196  In C++, an array type is not qualified; rather the type of the array
   6197 elements is qualified.  This situation is reflected in the intermediate
   6198 representation.  The macros described here will always examine the
   6199 qualification of the underlying element type when applied to an array
   6200 type.  (If the element type is itself an array, then the recursion
   6201 continues until a non-array type is found, and the qualification of this
   6202 type is examined.)  So, for example, `CP_TYPE_CONST_P' will hold of the
   6203 type `const int ()[7]', denoting an array of seven `int's.
   6204 
   6205  The following functions and macros deal with cv-qualification of types:
   6206 `CP_TYPE_QUALS'
   6207      This macro returns the set of type qualifiers applied to this type.
   6208      This value is `TYPE_UNQUALIFIED' if no qualifiers have been
   6209      applied.  The `TYPE_QUAL_CONST' bit is set if the type is
   6210      `const'-qualified.  The `TYPE_QUAL_VOLATILE' bit is set if the
   6211      type is `volatile'-qualified.  The `TYPE_QUAL_RESTRICT' bit is set
   6212      if the type is `restrict'-qualified.
   6213 
   6214 `CP_TYPE_CONST_P'
   6215      This macro holds if the type is `const'-qualified.
   6216 
   6217 `CP_TYPE_VOLATILE_P'
   6218      This macro holds if the type is `volatile'-qualified.
   6219 
   6220 `CP_TYPE_RESTRICT_P'
   6221      This macro holds if the type is `restrict'-qualified.
   6222 
   6223 `CP_TYPE_CONST_NON_VOLATILE_P'
   6224      This predicate holds for a type that is `const'-qualified, but
   6225      _not_ `volatile'-qualified; other cv-qualifiers are ignored as
   6226      well: only the `const'-ness is tested.
   6227 
   6228 `TYPE_MAIN_VARIANT'
   6229      This macro returns the unqualified version of a type.  It may be
   6230      applied to an unqualified type, but it is not always the identity
   6231      function in that case.
   6232 
   6233  A few other macros and functions are usable with all types:
   6234 `TYPE_SIZE'
   6235      The number of bits required to represent the type, represented as
   6236      an `INTEGER_CST'.  For an incomplete type, `TYPE_SIZE' will be
   6237      `NULL_TREE'.
   6238 
   6239 `TYPE_ALIGN'
   6240      The alignment of the type, in bits, represented as an `int'.
   6241 
   6242 `TYPE_NAME'
   6243      This macro returns a declaration (in the form of a `TYPE_DECL') for
   6244      the type.  (Note this macro does _not_ return a `IDENTIFIER_NODE',
   6245      as you might expect, given its name!)  You can look at the
   6246      `DECL_NAME' of the `TYPE_DECL' to obtain the actual name of the
   6247      type.  The `TYPE_NAME' will be `NULL_TREE' for a type that is not
   6248      a built-in type, the result of a typedef, or a named class type.
   6249 
   6250 `CP_INTEGRAL_TYPE'
   6251      This predicate holds if the type is an integral type.  Notice that
   6252      in C++, enumerations are _not_ integral types.
   6253 
   6254 `ARITHMETIC_TYPE_P'
   6255      This predicate holds if the type is an integral type (in the C++
   6256      sense) or a floating point type.
   6257 
   6258 `CLASS_TYPE_P'
   6259      This predicate holds for a class-type.
   6260 
   6261 `TYPE_BUILT_IN'
   6262      This predicate holds for a built-in type.
   6263 
   6264 `TYPE_PTRMEM_P'
   6265      This predicate holds if the type is a pointer to data member.
   6266 
   6267 `TYPE_PTR_P'
   6268      This predicate holds if the type is a pointer type, and the
   6269      pointee is not a data member.
   6270 
   6271 `TYPE_PTRFN_P'
   6272      This predicate holds for a pointer to function type.
   6273 
   6274 `TYPE_PTROB_P'
   6275      This predicate holds for a pointer to object type.  Note however
   6276      that it does not hold for the generic pointer to object type `void
   6277      *'.  You may use `TYPE_PTROBV_P' to test for a pointer to object
   6278      type as well as `void *'.
   6279 
   6280 `TYPE_CANONICAL'
   6281      This macro returns the "canonical" type for the given type node.
   6282      Canonical types are used to improve performance in the C++ and
   6283      Objective-C++ front ends by allowing efficient comparison between
   6284      two type nodes in `same_type_p': if the `TYPE_CANONICAL' values of
   6285      the types are equal, the types are equivalent; otherwise, the types
   6286      are not equivalent. The notion of equivalence for canonical types
   6287      is the same as the notion of type equivalence in the language
   6288      itself. For instance,
   6289 
   6290      When `TYPE_CANONICAL' is `NULL_TREE', there is no canonical type
   6291      for the given type node. In this case, comparison between this
   6292      type and any other type requires the compiler to perform a deep,
   6293      "structural" comparison to see if the two type nodes have the same
   6294      form and properties.
   6295 
   6296      The canonical type for a node is always the most fundamental type
   6297      in the equivalence class of types. For instance, `int' is its own
   6298      canonical type. A typedef `I' of `int' will have `int' as its
   6299      canonical type. Similarly, `I*' and a typedef `IP' (defined to
   6300      `I*') will has `int*' as their canonical type. When building a new
   6301      type node, be sure to set `TYPE_CANONICAL' to the appropriate
   6302      canonical type. If the new type is a compound type (built from
   6303      other types), and any of those other types require structural
   6304      equality, use `SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the
   6305      new type also requires structural equality. Finally, if for some
   6306      reason you cannot guarantee that `TYPE_CANONICAL' will point to
   6307      the canonical type, use `SET_TYPE_STRUCTURAL_EQUALITY' to make
   6308      sure that the new type-and any type constructed based on
   6309      it-requires structural equality. If you suspect that the canonical
   6310      type system is miscomparing types, pass `--param
   6311      verify-canonical-types=1' to the compiler or configure with
   6312      `--enable-checking' to force the compiler to verify its
   6313      canonical-type comparisons against the structural comparisons; the
   6314      compiler will then print any warnings if the canonical types
   6315      miscompare.
   6316 
   6317 `TYPE_STRUCTURAL_EQUALITY_P'
   6318      This predicate holds when the node requires structural equality
   6319      checks, e.g., when `TYPE_CANONICAL' is `NULL_TREE'.
   6320 
   6321 `SET_TYPE_STRUCTURAL_EQUALITY'
   6322      This macro states that the type node it is given requires
   6323      structural equality checks, e.g., it sets `TYPE_CANONICAL' to
   6324      `NULL_TREE'.
   6325 
   6326 `same_type_p'
   6327      This predicate takes two types as input, and holds if they are the
   6328      same type.  For example, if one type is a `typedef' for the other,
   6329      or both are `typedef's for the same type.  This predicate also
   6330      holds if the two trees given as input are simply copies of one
   6331      another; i.e., there is no difference between them at the source
   6332      level, but, for whatever reason, a duplicate has been made in the
   6333      representation.  You should never use `==' (pointer equality) to
   6334      compare types; always use `same_type_p' instead.
   6335 
   6336  Detailed below are the various kinds of types, and the macros that can
   6337 be used to access them.  Although other kinds of types are used
   6338 elsewhere in G++, the types described here are the only ones that you
   6339 will encounter while examining the intermediate representation.
   6340 
   6341 `VOID_TYPE'
   6342      Used to represent the `void' type.
   6343 
   6344 `INTEGER_TYPE'
   6345      Used to represent the various integral types, including `char',
   6346      `short', `int', `long', and `long long'.  This code is not used
   6347      for enumeration types, nor for the `bool' type.  The
   6348      `TYPE_PRECISION' is the number of bits used in the representation,
   6349      represented as an `unsigned int'.  (Note that in the general case
   6350      this is not the same value as `TYPE_SIZE'; suppose that there were
   6351      a 24-bit integer type, but that alignment requirements for the ABI
   6352      required 32-bit alignment.  Then, `TYPE_SIZE' would be an
   6353      `INTEGER_CST' for 32, while `TYPE_PRECISION' would be 24.)  The
   6354      integer type is unsigned if `TYPE_UNSIGNED' holds; otherwise, it
   6355      is signed.
   6356 
   6357      The `TYPE_MIN_VALUE' is an `INTEGER_CST' for the smallest integer
   6358      that may be represented by this type.  Similarly, the
   6359      `TYPE_MAX_VALUE' is an `INTEGER_CST' for the largest integer that
   6360      may be represented by this type.
   6361 
   6362 `REAL_TYPE'
   6363      Used to represent the `float', `double', and `long double' types.
   6364      The number of bits in the floating-point representation is given
   6365      by `TYPE_PRECISION', as in the `INTEGER_TYPE' case.
   6366 
   6367 `FIXED_POINT_TYPE'
   6368      Used to represent the `short _Fract', `_Fract', `long _Fract',
   6369      `long long _Fract', `short _Accum', `_Accum', `long _Accum', and
   6370      `long long _Accum' types.  The number of bits in the fixed-point
   6371      representation is given by `TYPE_PRECISION', as in the
   6372      `INTEGER_TYPE' case.  There may be padding bits, fractional bits
   6373      and integral bits.  The number of fractional bits is given by
   6374      `TYPE_FBIT', and the number of integral bits is given by
   6375      `TYPE_IBIT'.  The fixed-point type is unsigned if `TYPE_UNSIGNED'
   6376      holds; otherwise, it is signed.  The fixed-point type is
   6377      saturating if `TYPE_SATURATING' holds; otherwise, it is not
   6378      saturating.
   6379 
   6380 `COMPLEX_TYPE'
   6381      Used to represent GCC built-in `__complex__' data types.  The
   6382      `TREE_TYPE' is the type of the real and imaginary parts.
   6383 
   6384 `ENUMERAL_TYPE'
   6385      Used to represent an enumeration type.  The `TYPE_PRECISION' gives
   6386      (as an `int'), the number of bits used to represent the type.  If
   6387      there are no negative enumeration constants, `TYPE_UNSIGNED' will
   6388      hold.  The minimum and maximum enumeration constants may be
   6389      obtained with `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE', respectively;
   6390      each of these macros returns an `INTEGER_CST'.
   6391 
   6392      The actual enumeration constants themselves may be obtained by
   6393      looking at the `TYPE_VALUES'.  This macro will return a
   6394      `TREE_LIST', containing the constants.  The `TREE_PURPOSE' of each
   6395      node will be an `IDENTIFIER_NODE' giving the name of the constant;
   6396      the `TREE_VALUE' will be an `INTEGER_CST' giving the value
   6397      assigned to that constant.  These constants will appear in the
   6398      order in which they were declared.  The `TREE_TYPE' of each of
   6399      these constants will be the type of enumeration type itself.
   6400 
   6401 `BOOLEAN_TYPE'
   6402      Used to represent the `bool' type.
   6403 
   6404 `POINTER_TYPE'
   6405      Used to represent pointer types, and pointer to data member types.
   6406      The `TREE_TYPE' gives the type to which this type points.  If the
   6407      type is a pointer to data member type, then `TYPE_PTRMEM_P' will
   6408      hold.  For a pointer to data member type of the form `T X::*',
   6409      `TYPE_PTRMEM_CLASS_TYPE' will be the type `X', while
   6410      `TYPE_PTRMEM_POINTED_TO_TYPE' will be the type `T'.
   6411 
   6412 `REFERENCE_TYPE'
   6413      Used to represent reference types.  The `TREE_TYPE' gives the type
   6414      to which this type refers.
   6415 
   6416 `FUNCTION_TYPE'
   6417      Used to represent the type of non-member functions and of static
   6418      member functions.  The `TREE_TYPE' gives the return type of the
   6419      function.  The `TYPE_ARG_TYPES' are a `TREE_LIST' of the argument
   6420      types.  The `TREE_VALUE' of each node in this list is the type of
   6421      the corresponding argument; the `TREE_PURPOSE' is an expression
   6422      for the default argument value, if any.  If the last node in the
   6423      list is `void_list_node' (a `TREE_LIST' node whose `TREE_VALUE' is
   6424      the `void_type_node'), then functions of this type do not take
   6425      variable arguments.  Otherwise, they do take a variable number of
   6426      arguments.
   6427 
   6428      Note that in C (but not in C++) a function declared like `void f()'
   6429      is an unprototyped function taking a variable number of arguments;
   6430      the `TYPE_ARG_TYPES' of such a function will be `NULL'.
   6431 
   6432 `METHOD_TYPE'
   6433      Used to represent the type of a non-static member function.  Like a
   6434      `FUNCTION_TYPE', the return type is given by the `TREE_TYPE'.  The
   6435      type of `*this', i.e., the class of which functions of this type
   6436      are a member, is given by the `TYPE_METHOD_BASETYPE'.  The
   6437      `TYPE_ARG_TYPES' is the parameter list, as for a `FUNCTION_TYPE',
   6438      and includes the `this' argument.
   6439 
   6440 `ARRAY_TYPE'
   6441      Used to represent array types.  The `TREE_TYPE' gives the type of
   6442      the elements in the array.  If the array-bound is present in the
   6443      type, the `TYPE_DOMAIN' is an `INTEGER_TYPE' whose
   6444      `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE' will be the lower and upper
   6445      bounds of the array, respectively.  The `TYPE_MIN_VALUE' will
   6446      always be an `INTEGER_CST' for zero, while the `TYPE_MAX_VALUE'
   6447      will be one less than the number of elements in the array, i.e.,
   6448      the highest value which may be used to index an element in the
   6449      array.
   6450 
   6451 `RECORD_TYPE'
   6452      Used to represent `struct' and `class' types, as well as pointers
   6453      to member functions and similar constructs in other languages.
   6454      `TYPE_FIELDS' contains the items contained in this type, each of
   6455      which can be a `FIELD_DECL', `VAR_DECL', `CONST_DECL', or
   6456      `TYPE_DECL'.  You may not make any assumptions about the ordering
   6457      of the fields in the type or whether one or more of them overlap.
   6458      If `TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member
   6459      type.  In that case, the `TYPE_PTRMEMFUNC_FN_TYPE' is a
   6460      `POINTER_TYPE' pointing to a `METHOD_TYPE'.  The `METHOD_TYPE' is
   6461      the type of a function pointed to by the pointer-to-member
   6462      function.  If `TYPE_PTRMEMFUNC_P' does not hold, this type is a
   6463      class type.  For more information, see *note Classes::.
   6464 
   6465 `UNION_TYPE'
   6466      Used to represent `union' types.  Similar to `RECORD_TYPE' except
   6467      that all `FIELD_DECL' nodes in `TYPE_FIELD' start at bit position
   6468      zero.
   6469 
   6470 `QUAL_UNION_TYPE'
   6471      Used to represent part of a variant record in Ada.  Similar to
   6472      `UNION_TYPE' except that each `FIELD_DECL' has a `DECL_QUALIFIER'
   6473      field, which contains a boolean expression that indicates whether
   6474      the field is present in the object.  The type will only have one
   6475      field, so each field's `DECL_QUALIFIER' is only evaluated if none
   6476      of the expressions in the previous fields in `TYPE_FIELDS' are
   6477      nonzero.  Normally these expressions will reference a field in the
   6478      outer object using a `PLACEHOLDER_EXPR'.
   6479 
   6480 `UNKNOWN_TYPE'
   6481      This node is used to represent a type the knowledge of which is
   6482      insufficient for a sound processing.
   6483 
   6484 `OFFSET_TYPE'
   6485      This node is used to represent a pointer-to-data member.  For a
   6486      data member `X::m' the `TYPE_OFFSET_BASETYPE' is `X' and the
   6487      `TREE_TYPE' is the type of `m'.
   6488 
   6489 `TYPENAME_TYPE'
   6490      Used to represent a construct of the form `typename T::A'.  The
   6491      `TYPE_CONTEXT' is `T'; the `TYPE_NAME' is an `IDENTIFIER_NODE' for
   6492      `A'.  If the type is specified via a template-id, then
   6493      `TYPENAME_TYPE_FULLNAME' yields a `TEMPLATE_ID_EXPR'.  The
   6494      `TREE_TYPE' is non-`NULL' if the node is implicitly generated in
   6495      support for the implicit typename extension; in which case the
   6496      `TREE_TYPE' is a type node for the base-class.
   6497 
   6498 `TYPEOF_TYPE'
   6499      Used to represent the `__typeof__' extension.  The `TYPE_FIELDS'
   6500      is the expression the type of which is being represented.
   6501 
   6502  There are variables whose values represent some of the basic types.
   6503 These include:
   6504 `void_type_node'
   6505      A node for `void'.
   6506 
   6507 `integer_type_node'
   6508      A node for `int'.
   6509 
   6510 `unsigned_type_node.'
   6511      A node for `unsigned int'.
   6512 
   6513 `char_type_node.'
   6514      A node for `char'.
   6515  It may sometimes be useful to compare one of these variables with a
   6516 type in hand, using `same_type_p'.
   6517 
   6518 
   6519 File: gccint.info,  Node: Scopes,  Next: Functions,  Prev: Types,  Up: Trees
   6520 
   6521 9.4 Scopes
   6522 ==========
   6523 
   6524 The root of the entire intermediate representation is the variable
   6525 `global_namespace'.  This is the namespace specified with `::' in C++
   6526 source code.  All other namespaces, types, variables, functions, and so
   6527 forth can be found starting with this namespace.
   6528 
   6529  Besides namespaces, the other high-level scoping construct in C++ is
   6530 the class.  (Throughout this manual the term "class" is used to mean the
   6531 types referred to in the ANSI/ISO C++ Standard as classes; these include
   6532 types defined with the `class', `struct', and `union' keywords.)
   6533 
   6534 * Menu:
   6535 
   6536 * Namespaces::          Member functions, types, etc.
   6537 * Classes::             Members, bases, friends, etc.
   6538 
   6539 
   6540 File: gccint.info,  Node: Namespaces,  Next: Classes,  Up: Scopes
   6541 
   6542 9.4.1 Namespaces
   6543 ----------------
   6544 
   6545 A namespace is represented by a `NAMESPACE_DECL' node.
   6546 
   6547  However, except for the fact that it is distinguished as the root of
   6548 the representation, the global namespace is no different from any other
   6549 namespace.  Thus, in what follows, we describe namespaces generally,
   6550 rather than the global namespace in particular.
   6551 
   6552  The following macros and functions can be used on a `NAMESPACE_DECL':
   6553 
   6554 `DECL_NAME'
   6555      This macro is used to obtain the `IDENTIFIER_NODE' corresponding to
   6556      the unqualified name of the name of the namespace (*note
   6557      Identifiers::).  The name of the global namespace is `::', even
   6558      though in C++ the global namespace is unnamed.  However, you
   6559      should use comparison with `global_namespace', rather than
   6560      `DECL_NAME' to determine whether or not a namespace is the global
   6561      one.  An unnamed namespace will have a `DECL_NAME' equal to
   6562      `anonymous_namespace_name'.  Within a single translation unit, all
   6563      unnamed namespaces will have the same name.
   6564 
   6565 `DECL_CONTEXT'
   6566      This macro returns the enclosing namespace.  The `DECL_CONTEXT' for
   6567      the `global_namespace' is `NULL_TREE'.
   6568 
   6569 `DECL_NAMESPACE_ALIAS'
   6570      If this declaration is for a namespace alias, then
   6571      `DECL_NAMESPACE_ALIAS' is the namespace for which this one is an
   6572      alias.
   6573 
   6574      Do not attempt to use `cp_namespace_decls' for a namespace which is
   6575      an alias.  Instead, follow `DECL_NAMESPACE_ALIAS' links until you
   6576      reach an ordinary, non-alias, namespace, and call
   6577      `cp_namespace_decls' there.
   6578 
   6579 `DECL_NAMESPACE_STD_P'
   6580      This predicate holds if the namespace is the special `::std'
   6581      namespace.
   6582 
   6583 `cp_namespace_decls'
   6584      This function will return the declarations contained in the
   6585      namespace, including types, overloaded functions, other
   6586      namespaces, and so forth.  If there are no declarations, this
   6587      function will return `NULL_TREE'.  The declarations are connected
   6588      through their `TREE_CHAIN' fields.
   6589 
   6590      Although most entries on this list will be declarations,
   6591      `TREE_LIST' nodes may also appear.  In this case, the `TREE_VALUE'
   6592      will be an `OVERLOAD'.  The value of the `TREE_PURPOSE' is
   6593      unspecified; back ends should ignore this value.  As with the
   6594      other kinds of declarations returned by `cp_namespace_decls', the
   6595      `TREE_CHAIN' will point to the next declaration in this list.
   6596 
   6597      For more information on the kinds of declarations that can occur
   6598      on this list, *Note Declarations::.  Some declarations will not
   6599      appear on this list.  In particular, no `FIELD_DECL',
   6600      `LABEL_DECL', or `PARM_DECL' nodes will appear here.
   6601 
   6602      This function cannot be used with namespaces that have
   6603      `DECL_NAMESPACE_ALIAS' set.
   6604 
   6605 
   6606 
   6607 File: gccint.info,  Node: Classes,  Prev: Namespaces,  Up: Scopes
   6608 
   6609 9.4.2 Classes
   6610 -------------
   6611 
   6612 A class type is represented by either a `RECORD_TYPE' or a
   6613 `UNION_TYPE'.  A class declared with the `union' tag is represented by
   6614 a `UNION_TYPE', while classes declared with either the `struct' or the
   6615 `class' tag are represented by `RECORD_TYPE's.  You can use the
   6616 `CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular
   6617 type is a `class' as opposed to a `struct'.  This macro will be true
   6618 only for classes declared with the `class' tag.
   6619 
   6620  Almost all non-function members are available on the `TYPE_FIELDS'
   6621 list.  Given one member, the next can be found by following the
   6622 `TREE_CHAIN'.  You should not depend in any way on the order in which
   6623 fields appear on this list.  All nodes on this list will be `DECL'
   6624 nodes.  A `FIELD_DECL' is used to represent a non-static data member, a
   6625 `VAR_DECL' is used to represent a static data member, and a `TYPE_DECL'
   6626 is used to represent a type.  Note that the `CONST_DECL' for an
   6627 enumeration constant will appear on this list, if the enumeration type
   6628 was declared in the class.  (Of course, the `TYPE_DECL' for the
   6629 enumeration type will appear here as well.)  There are no entries for
   6630 base classes on this list.  In particular, there is no `FIELD_DECL' for
   6631 the "base-class portion" of an object.
   6632 
   6633  The `TYPE_VFIELD' is a compiler-generated field used to point to
   6634 virtual function tables.  It may or may not appear on the `TYPE_FIELDS'
   6635 list.  However, back ends should handle the `TYPE_VFIELD' just like all
   6636 the entries on the `TYPE_FIELDS' list.
   6637 
   6638  The function members are available on the `TYPE_METHODS' list.  Again,
   6639 subsequent members are found by following the `TREE_CHAIN' field.  If a
   6640 function is overloaded, each of the overloaded functions appears; no
   6641 `OVERLOAD' nodes appear on the `TYPE_METHODS' list.  Implicitly
   6642 declared functions (including default constructors, copy constructors,
   6643 assignment operators, and destructors) will appear on this list as well.
   6644 
   6645  Every class has an associated "binfo", which can be obtained with
   6646 `TYPE_BINFO'.  Binfos are used to represent base-classes.  The binfo
   6647 given by `TYPE_BINFO' is the degenerate case, whereby every class is
   6648 considered to be its own base-class.  The base binfos for a particular
   6649 binfo are held in a vector, whose length is obtained with
   6650 `BINFO_N_BASE_BINFOS'.  The base binfos themselves are obtained with
   6651 `BINFO_BASE_BINFO' and `BINFO_BASE_ITERATE'.  To add a new binfo, use
   6652 `BINFO_BASE_APPEND'.  The vector of base binfos can be obtained with
   6653 `BINFO_BASE_BINFOS', but normally you do not need to use that.  The
   6654 class type associated with a binfo is given by `BINFO_TYPE'.  It is not
   6655 always the case that `BINFO_TYPE (TYPE_BINFO (x))', because of typedefs
   6656 and qualified types.  Neither is it the case that `TYPE_BINFO
   6657 (BINFO_TYPE (y))' is the same binfo as `y'.  The reason is that if `y'
   6658 is a binfo representing a base-class `B' of a derived class `D', then
   6659 `BINFO_TYPE (y)' will be `B', and `TYPE_BINFO (BINFO_TYPE (y))' will be
   6660 `B' as its own base-class, rather than as a base-class of `D'.
   6661 
   6662  The access to a base type can be found with `BINFO_BASE_ACCESS'.  This
   6663 will produce `access_public_node', `access_private_node' or
   6664 `access_protected_node'.  If bases are always public,
   6665 `BINFO_BASE_ACCESSES' may be `NULL'.
   6666 
   6667  `BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited
   6668 virtually or not.  The other flags, `BINFO_MARKED_P' and `BINFO_FLAG_1'
   6669 to `BINFO_FLAG_6' can be used for language specific use.
   6670 
   6671  The following macros can be used on a tree node representing a
   6672 class-type.
   6673 
   6674 `LOCAL_CLASS_P'
   6675      This predicate holds if the class is local class _i.e._ declared
   6676      inside a function body.
   6677 
   6678 `TYPE_POLYMORPHIC_P'
   6679      This predicate holds if the class has at least one virtual function
   6680      (declared or inherited).
   6681 
   6682 `TYPE_HAS_DEFAULT_CONSTRUCTOR'
   6683      This predicate holds whenever its argument represents a class-type
   6684      with default constructor.
   6685 
   6686 `CLASSTYPE_HAS_MUTABLE'
   6687 `TYPE_HAS_MUTABLE_P'
   6688      These predicates hold for a class-type having a mutable data
   6689      member.
   6690 
   6691 `CLASSTYPE_NON_POD_P'
   6692      This predicate holds only for class-types that are not PODs.
   6693 
   6694 `TYPE_HAS_NEW_OPERATOR'
   6695      This predicate holds for a class-type that defines `operator new'.
   6696 
   6697 `TYPE_HAS_ARRAY_NEW_OPERATOR'
   6698      This predicate holds for a class-type for which `operator new[]'
   6699      is defined.
   6700 
   6701 `TYPE_OVERLOADS_CALL_EXPR'
   6702      This predicate holds for class-type for which the function call
   6703      `operator()' is overloaded.
   6704 
   6705 `TYPE_OVERLOADS_ARRAY_REF'
   6706      This predicate holds for a class-type that overloads `operator[]'
   6707 
   6708 `TYPE_OVERLOADS_ARROW'
   6709      This predicate holds for a class-type for which `operator->' is
   6710      overloaded.
   6711 
   6712 
   6713 
   6714 File: gccint.info,  Node: Declarations,  Next: Attributes,  Prev: Functions,  Up: Trees
   6715 
   6716 9.5 Declarations
   6717 ================
   6718 
   6719 This section covers the various kinds of declarations that appear in the
   6720 internal representation, except for declarations of functions
   6721 (represented by `FUNCTION_DECL' nodes), which are described in *Note
   6722 Functions::.
   6723 
   6724 * Menu:
   6725 
   6726 * Working with declarations::  Macros and functions that work on
   6727 declarations.
   6728 * Internal structure:: How declaration nodes are represented.
   6729 
   6730 
   6731 File: gccint.info,  Node: Working with declarations,  Next: Internal structure,  Up: Declarations
   6732 
   6733 9.5.1 Working with declarations
   6734 -------------------------------
   6735 
   6736 Some macros can be used with any kind of declaration.  These include:
   6737 `DECL_NAME'
   6738      This macro returns an `IDENTIFIER_NODE' giving the name of the
   6739      entity.
   6740 
   6741 `TREE_TYPE'
   6742      This macro returns the type of the entity declared.
   6743 
   6744 `TREE_FILENAME'
   6745      This macro returns the name of the file in which the entity was
   6746      declared, as a `char*'.  For an entity declared implicitly by the
   6747      compiler (like `__builtin_memcpy'), this will be the string
   6748      `"<internal>"'.
   6749 
   6750 `TREE_LINENO'
   6751      This macro returns the line number at which the entity was
   6752      declared, as an `int'.
   6753 
   6754 `DECL_ARTIFICIAL'
   6755      This predicate holds if the declaration was implicitly generated
   6756      by the compiler.  For example, this predicate will hold of an
   6757      implicitly declared member function, or of the `TYPE_DECL'
   6758      implicitly generated for a class type.  Recall that in C++ code
   6759      like:
   6760           struct S {};
   6761      is roughly equivalent to C code like:
   6762           struct S {};
   6763           typedef struct S S;
   6764      The implicitly generated `typedef' declaration is represented by a
   6765      `TYPE_DECL' for which `DECL_ARTIFICIAL' holds.
   6766 
   6767 `DECL_NAMESPACE_SCOPE_P'
   6768      This predicate holds if the entity was declared at a namespace
   6769      scope.
   6770 
   6771 `DECL_CLASS_SCOPE_P'
   6772      This predicate holds if the entity was declared at a class scope.
   6773 
   6774 `DECL_FUNCTION_SCOPE_P'
   6775      This predicate holds if the entity was declared inside a function
   6776      body.
   6777 
   6778 
   6779  The various kinds of declarations include:
   6780 `LABEL_DECL'
   6781      These nodes are used to represent labels in function bodies.  For
   6782      more information, see *Note Functions::.  These nodes only appear
   6783      in block scopes.
   6784 
   6785 `CONST_DECL'
   6786      These nodes are used to represent enumeration constants.  The
   6787      value of the constant is given by `DECL_INITIAL' which will be an
   6788      `INTEGER_CST' with the same type as the `TREE_TYPE' of the
   6789      `CONST_DECL', i.e., an `ENUMERAL_TYPE'.
   6790 
   6791 `RESULT_DECL'
   6792      These nodes represent the value returned by a function.  When a
   6793      value is assigned to a `RESULT_DECL', that indicates that the
   6794      value should be returned, via bitwise copy, by the function.  You
   6795      can use `DECL_SIZE' and `DECL_ALIGN' on a `RESULT_DECL', just as
   6796      with a `VAR_DECL'.
   6797 
   6798 `TYPE_DECL'
   6799      These nodes represent `typedef' declarations.  The `TREE_TYPE' is
   6800      the type declared to have the name given by `DECL_NAME'.  In some
   6801      cases, there is no associated name.
   6802 
   6803 `VAR_DECL'
   6804      These nodes represent variables with namespace or block scope, as
   6805      well as static data members.  The `DECL_SIZE' and `DECL_ALIGN' are
   6806      analogous to `TYPE_SIZE' and `TYPE_ALIGN'.  For a declaration, you
   6807      should always use the `DECL_SIZE' and `DECL_ALIGN' rather than the
   6808      `TYPE_SIZE' and `TYPE_ALIGN' given by the `TREE_TYPE', since
   6809      special attributes may have been applied to the variable to give
   6810      it a particular size and alignment.  You may use the predicates
   6811      `DECL_THIS_STATIC' or `DECL_THIS_EXTERN' to test whether the
   6812      storage class specifiers `static' or `extern' were used to declare
   6813      a variable.
   6814 
   6815      If this variable is initialized (but does not require a
   6816      constructor), the `DECL_INITIAL' will be an expression for the
   6817      initializer.  The initializer should be evaluated, and a bitwise
   6818      copy into the variable performed.  If the `DECL_INITIAL' is the
   6819      `error_mark_node', there is an initializer, but it is given by an
   6820      explicit statement later in the code; no bitwise copy is required.
   6821 
   6822      GCC provides an extension that allows either automatic variables,
   6823      or global variables, to be placed in particular registers.  This
   6824      extension is being used for a particular `VAR_DECL' if
   6825      `DECL_REGISTER' holds for the `VAR_DECL', and if
   6826      `DECL_ASSEMBLER_NAME' is not equal to `DECL_NAME'.  In that case,
   6827      `DECL_ASSEMBLER_NAME' is the name of the register into which the
   6828      variable will be placed.
   6829 
   6830 `PARM_DECL'
   6831      Used to represent a parameter to a function.  Treat these nodes
   6832      similarly to `VAR_DECL' nodes.  These nodes only appear in the
   6833      `DECL_ARGUMENTS' for a `FUNCTION_DECL'.
   6834 
   6835      The `DECL_ARG_TYPE' for a `PARM_DECL' is the type that will
   6836      actually be used when a value is passed to this function.  It may
   6837      be a wider type than the `TREE_TYPE' of the parameter; for
   6838      example, the ordinary type might be `short' while the
   6839      `DECL_ARG_TYPE' is `int'.
   6840 
   6841 `FIELD_DECL'
   6842      These nodes represent non-static data members.  The `DECL_SIZE' and
   6843      `DECL_ALIGN' behave as for `VAR_DECL' nodes.  The position of the
   6844      field within the parent record is specified by a combination of
   6845      three attributes.  `DECL_FIELD_OFFSET' is the position, counting
   6846      in bytes, of the `DECL_OFFSET_ALIGN'-bit sized word containing the
   6847      bit of the field closest to the beginning of the structure.
   6848      `DECL_FIELD_BIT_OFFSET' is the bit offset of the first bit of the
   6849      field within this word; this may be nonzero even for fields that
   6850      are not bit-fields, since `DECL_OFFSET_ALIGN' may be greater than
   6851      the natural alignment of the field's type.
   6852 
   6853      If `DECL_C_BIT_FIELD' holds, this field is a bit-field.  In a
   6854      bit-field, `DECL_BIT_FIELD_TYPE' also contains the type that was
   6855      originally specified for it, while DECL_TYPE may be a modified
   6856      type with lesser precision, according to the size of the bit field.
   6857 
   6858 `NAMESPACE_DECL'
   6859      *Note Namespaces::.
   6860 
   6861 `TEMPLATE_DECL'
   6862      These nodes are used to represent class, function, and variable
   6863      (static data member) templates.  The
   6864      `DECL_TEMPLATE_SPECIALIZATIONS' are a `TREE_LIST'.  The
   6865      `TREE_VALUE' of each node in the list is a `TEMPLATE_DECL's or
   6866      `FUNCTION_DECL's representing specializations (including
   6867      instantiations) of this template.  Back ends can safely ignore
   6868      `TEMPLATE_DECL's, but should examine `FUNCTION_DECL' nodes on the
   6869      specializations list just as they would ordinary `FUNCTION_DECL'
   6870      nodes.
   6871 
   6872      For a class template, the `DECL_TEMPLATE_INSTANTIATIONS' list
   6873      contains the instantiations.  The `TREE_VALUE' of each node is an
   6874      instantiation of the class.  The `DECL_TEMPLATE_SPECIALIZATIONS'
   6875      contains partial specializations of the class.
   6876 
   6877 `USING_DECL'
   6878      Back ends can safely ignore these nodes.
   6879 
   6880 
   6881 
   6882 File: gccint.info,  Node: Internal structure,  Prev: Working with declarations,  Up: Declarations
   6883 
   6884 9.5.2 Internal structure
   6885 ------------------------
   6886 
   6887 `DECL' nodes are represented internally as a hierarchy of structures.
   6888 
   6889 * Menu:
   6890 
   6891 * Current structure hierarchy::  The current DECL node structure
   6892 hierarchy.
   6893 * Adding new DECL node types:: How to add a new DECL node to a
   6894 frontend.
   6895 
   6896 
   6897 File: gccint.info,  Node: Current structure hierarchy,  Next: Adding new DECL node types,  Up: Internal structure
   6898 
   6899 9.5.2.1 Current structure hierarchy
   6900 ...................................
   6901 
   6902 `struct tree_decl_minimal'
   6903      This is the minimal structure to inherit from in order for common
   6904      `DECL' macros to work.  The fields it contains are a unique ID,
   6905      source location, context, and name.
   6906 
   6907 `struct tree_decl_common'
   6908      This structure inherits from `struct tree_decl_minimal'.  It
   6909      contains fields that most `DECL' nodes need, such as a field to
   6910      store alignment, machine mode, size, and attributes.
   6911 
   6912 `struct tree_field_decl'
   6913      This structure inherits from `struct tree_decl_common'.  It is
   6914      used to represent `FIELD_DECL'.
   6915 
   6916 `struct tree_label_decl'
   6917      This structure inherits from `struct tree_decl_common'.  It is
   6918      used to represent `LABEL_DECL'.
   6919 
   6920 `struct tree_translation_unit_decl'
   6921      This structure inherits from `struct tree_decl_common'.  It is
   6922      used to represent `TRANSLATION_UNIT_DECL'.
   6923 
   6924 `struct tree_decl_with_rtl'
   6925      This structure inherits from `struct tree_decl_common'.  It
   6926      contains a field to store the low-level RTL associated with a
   6927      `DECL' node.
   6928 
   6929 `struct tree_result_decl'
   6930      This structure inherits from `struct tree_decl_with_rtl'.  It is
   6931      used to represent `RESULT_DECL'.
   6932 
   6933 `struct tree_const_decl'
   6934      This structure inherits from `struct tree_decl_with_rtl'.  It is
   6935      used to represent `CONST_DECL'.
   6936 
   6937 `struct tree_parm_decl'
   6938      This structure inherits from `struct tree_decl_with_rtl'.  It is
   6939      used to represent `PARM_DECL'.
   6940 
   6941 `struct tree_decl_with_vis'
   6942      This structure inherits from `struct tree_decl_with_rtl'.  It
   6943      contains fields necessary to store visibility information, as well
   6944      as a section name and assembler name.
   6945 
   6946 `struct tree_var_decl'
   6947      This structure inherits from `struct tree_decl_with_vis'.  It is
   6948      used to represent `VAR_DECL'.
   6949 
   6950 `struct tree_function_decl'
   6951      This structure inherits from `struct tree_decl_with_vis'.  It is
   6952      used to represent `FUNCTION_DECL'.
   6953 
   6954 
   6955 
   6956 File: gccint.info,  Node: Adding new DECL node types,  Prev: Current structure hierarchy,  Up: Internal structure
   6957 
   6958 9.5.2.2 Adding new DECL node types
   6959 ..................................
   6960 
   6961 Adding a new `DECL' tree consists of the following steps
   6962 
   6963 Add a new tree code for the `DECL' node
   6964      For language specific `DECL' nodes, there is a `.def' file in each
   6965      frontend directory where the tree code should be added.  For
   6966      `DECL' nodes that are part of the middle-end, the code should be
   6967      added to `tree.def'.
   6968 
   6969 Create a new structure type for the `DECL' node
   6970      These structures should inherit from one of the existing
   6971      structures in the language hierarchy by using that structure as
   6972      the first member.
   6973 
   6974           struct tree_foo_decl
   6975           {
   6976              struct tree_decl_with_vis common;
   6977           }
   6978 
   6979      Would create a structure name `tree_foo_decl' that inherits from
   6980      `struct tree_decl_with_vis'.
   6981 
   6982      For language specific `DECL' nodes, this new structure type should
   6983      go in the appropriate `.h' file.  For `DECL' nodes that are part
   6984      of the middle-end, the structure type should go in `tree.h'.
   6985 
   6986 Add a member to the tree structure enumerator for the node
   6987      For garbage collection and dynamic checking purposes, each `DECL'
   6988      node structure type is required to have a unique enumerator value
   6989      specified with it.  For language specific `DECL' nodes, this new
   6990      enumerator value should go in the appropriate `.def' file.  For
   6991      `DECL' nodes that are part of the middle-end, the enumerator
   6992      values are specified in `treestruct.def'.
   6993 
   6994 Update `union tree_node'
   6995      In order to make your new structure type usable, it must be added
   6996      to `union tree_node'.  For language specific `DECL' nodes, a new
   6997      entry should be added to the appropriate `.h' file of the form
   6998             struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl;
   6999      For `DECL' nodes that are part of the middle-end, the additional
   7000      member goes directly into `union tree_node' in `tree.h'.
   7001 
   7002 Update dynamic checking info
   7003      In order to be able to check whether accessing a named portion of
   7004      `union tree_node' is legal, and whether a certain `DECL' node
   7005      contains one of the enumerated `DECL' node structures in the
   7006      hierarchy, a simple lookup table is used.  This lookup table needs
   7007      to be kept up to date with the tree structure hierarchy, or else
   7008      checking and containment macros will fail inappropriately.
   7009 
   7010      For language specific `DECL' nodes, their is an `init_ts' function
   7011      in an appropriate `.c' file, which initializes the lookup table.
   7012      Code setting up the table for new `DECL' nodes should be added
   7013      there.  For each `DECL' tree code and enumerator value
   7014      representing a member of the inheritance  hierarchy, the table
   7015      should contain 1 if that tree code inherits (directly or
   7016      indirectly) from that member.  Thus, a `FOO_DECL' node derived
   7017      from `struct decl_with_rtl', and enumerator value `TS_FOO_DECL',
   7018      would be set up as follows
   7019           tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1;
   7020           tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1;
   7021           tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1;
   7022           tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1;
   7023 
   7024      For `DECL' nodes that are part of the middle-end, the setup code
   7025      goes into `tree.c'.
   7026 
   7027 Add macros to access any new fields and flags
   7028      Each added field or flag should have a macro that is used to access
   7029      it, that performs appropriate checking to ensure only the right
   7030      type of `DECL' nodes access the field.
   7031 
   7032      These macros generally take the following form
   7033           #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname
   7034      However, if the structure is simply a base class for further
   7035      structures, something like the following should be used
   7036           #define BASE_STRUCT_CHECK(T) CONTAINS_STRUCT_CHECK(T, TS_BASE_STRUCT)
   7037           #define BASE_STRUCT_FIELDNAME(NODE) \
   7038              (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname
   7039 
   7040 
   7041 
   7042 File: gccint.info,  Node: Functions,  Next: Declarations,  Prev: Scopes,  Up: Trees
   7043 
   7044 9.6 Functions
   7045 =============
   7046 
   7047 A function is represented by a `FUNCTION_DECL' node.  A set of
   7048 overloaded functions is sometimes represented by a `OVERLOAD' node.
   7049 
   7050  An `OVERLOAD' node is not a declaration, so none of the `DECL_' macros
   7051 should be used on an `OVERLOAD'.  An `OVERLOAD' node is similar to a
   7052 `TREE_LIST'.  Use `OVL_CURRENT' to get the function associated with an
   7053 `OVERLOAD' node; use `OVL_NEXT' to get the next `OVERLOAD' node in the
   7054 list of overloaded functions.  The macros `OVL_CURRENT' and `OVL_NEXT'
   7055 are actually polymorphic; you can use them to work with `FUNCTION_DECL'
   7056 nodes as well as with overloads.  In the case of a `FUNCTION_DECL',
   7057 `OVL_CURRENT' will always return the function itself, and `OVL_NEXT'
   7058 will always be `NULL_TREE'.
   7059 
   7060  To determine the scope of a function, you can use the `DECL_CONTEXT'
   7061 macro.  This macro will return the class (either a `RECORD_TYPE' or a
   7062 `UNION_TYPE') or namespace (a `NAMESPACE_DECL') of which the function
   7063 is a member.  For a virtual function, this macro returns the class in
   7064 which the function was actually defined, not the base class in which
   7065 the virtual declaration occurred.
   7066 
   7067  If a friend function is defined in a class scope, the
   7068 `DECL_FRIEND_CONTEXT' macro can be used to determine the class in which
   7069 it was defined.  For example, in
   7070      class C { friend void f() {} };
   7071  the `DECL_CONTEXT' for `f' will be the `global_namespace', but the
   7072 `DECL_FRIEND_CONTEXT' will be the `RECORD_TYPE' for `C'.
   7073 
   7074  In C, the `DECL_CONTEXT' for a function maybe another function.  This
   7075 representation indicates that the GNU nested function extension is in
   7076 use.  For details on the semantics of nested functions, see the GCC
   7077 Manual.  The nested function can refer to local variables in its
   7078 containing function.  Such references are not explicitly marked in the
   7079 tree structure; back ends must look at the `DECL_CONTEXT' for the
   7080 referenced `VAR_DECL'.  If the `DECL_CONTEXT' for the referenced
   7081 `VAR_DECL' is not the same as the function currently being processed,
   7082 and neither `DECL_EXTERNAL' nor `DECL_STATIC' hold, then the reference
   7083 is to a local variable in a containing function, and the back end must
   7084 take appropriate action.
   7085 
   7086 * Menu:
   7087 
   7088 * Function Basics::     Function names, linkage, and so forth.
   7089 * Function Bodies::     The statements that make up a function body.
   7090 
   7091 
   7092 File: gccint.info,  Node: Function Basics,  Next: Function Bodies,  Up: Functions
   7093 
   7094 9.6.1 Function Basics
   7095 ---------------------
   7096 
   7097 The following macros and functions can be used on a `FUNCTION_DECL':
   7098 `DECL_MAIN_P'
   7099      This predicate holds for a function that is the program entry point
   7100      `::code'.
   7101 
   7102 `DECL_NAME'
   7103      This macro returns the unqualified name of the function, as an
   7104      `IDENTIFIER_NODE'.  For an instantiation of a function template,
   7105      the `DECL_NAME' is the unqualified name of the template, not
   7106      something like `f<int>'.  The value of `DECL_NAME' is undefined
   7107      when used on a constructor, destructor, overloaded operator, or
   7108      type-conversion operator, or any function that is implicitly
   7109      generated by the compiler.  See below for macros that can be used
   7110      to distinguish these cases.
   7111 
   7112 `DECL_ASSEMBLER_NAME'
   7113      This macro returns the mangled name of the function, also an
   7114      `IDENTIFIER_NODE'.  This name does not contain leading underscores
   7115      on systems that prefix all identifiers with underscores.  The
   7116      mangled name is computed in the same way on all platforms; if
   7117      special processing is required to deal with the object file format
   7118      used on a particular platform, it is the responsibility of the
   7119      back end to perform those modifications.  (Of course, the back end
   7120      should not modify `DECL_ASSEMBLER_NAME' itself.)
   7121 
   7122      Using `DECL_ASSEMBLER_NAME' will cause additional memory to be
   7123      allocated (for the mangled name of the entity) so it should be used
   7124      only when emitting assembly code.  It should not be used within the
   7125      optimizers to determine whether or not two declarations are the
   7126      same, even though some of the existing optimizers do use it in
   7127      that way.  These uses will be removed over time.
   7128 
   7129 `DECL_EXTERNAL'
   7130      This predicate holds if the function is undefined.
   7131 
   7132 `TREE_PUBLIC'
   7133      This predicate holds if the function has external linkage.
   7134 
   7135 `DECL_LOCAL_FUNCTION_P'
   7136      This predicate holds if the function was declared at block scope,
   7137      even though it has a global scope.
   7138 
   7139 `DECL_ANTICIPATED'
   7140      This predicate holds if the function is a built-in function but its
   7141      prototype is not yet explicitly declared.
   7142 
   7143 `DECL_EXTERN_C_FUNCTION_P'
   7144      This predicate holds if the function is declared as an ``extern
   7145      "C"'' function.
   7146 
   7147 `DECL_LINKONCE_P'
   7148      This macro holds if multiple copies of this function may be
   7149      emitted in various translation units.  It is the responsibility of
   7150      the linker to merge the various copies.  Template instantiations
   7151      are the most common example of functions for which
   7152      `DECL_LINKONCE_P' holds; G++ instantiates needed templates in all
   7153      translation units which require them, and then relies on the
   7154      linker to remove duplicate instantiations.
   7155 
   7156      FIXME: This macro is not yet implemented.
   7157 
   7158 `DECL_FUNCTION_MEMBER_P'
   7159      This macro holds if the function is a member of a class, rather
   7160      than a member of a namespace.
   7161 
   7162 `DECL_STATIC_FUNCTION_P'
   7163      This predicate holds if the function a static member function.
   7164 
   7165 `DECL_NONSTATIC_MEMBER_FUNCTION_P'
   7166      This macro holds for a non-static member function.
   7167 
   7168 `DECL_CONST_MEMFUNC_P'
   7169      This predicate holds for a `const'-member function.
   7170 
   7171 `DECL_VOLATILE_MEMFUNC_P'
   7172      This predicate holds for a `volatile'-member function.
   7173 
   7174 `DECL_CONSTRUCTOR_P'
   7175      This macro holds if the function is a constructor.
   7176 
   7177 `DECL_NONCONVERTING_P'
   7178      This predicate holds if the constructor is a non-converting
   7179      constructor.
   7180 
   7181 `DECL_COMPLETE_CONSTRUCTOR_P'
   7182      This predicate holds for a function which is a constructor for an
   7183      object of a complete type.
   7184 
   7185 `DECL_BASE_CONSTRUCTOR_P'
   7186      This predicate holds for a function which is a constructor for a
   7187      base class sub-object.
   7188 
   7189 `DECL_COPY_CONSTRUCTOR_P'
   7190      This predicate holds for a function which is a copy-constructor.
   7191 
   7192 `DECL_DESTRUCTOR_P'
   7193      This macro holds if the function is a destructor.
   7194 
   7195 `DECL_COMPLETE_DESTRUCTOR_P'
   7196      This predicate holds if the function is the destructor for an
   7197      object a complete type.
   7198 
   7199 `DECL_OVERLOADED_OPERATOR_P'
   7200      This macro holds if the function is an overloaded operator.
   7201 
   7202 `DECL_CONV_FN_P'
   7203      This macro holds if the function is a type-conversion operator.
   7204 
   7205 `DECL_GLOBAL_CTOR_P'
   7206      This predicate holds if the function is a file-scope initialization
   7207      function.
   7208 
   7209 `DECL_GLOBAL_DTOR_P'
   7210      This predicate holds if the function is a file-scope finalization
   7211      function.
   7212 
   7213 `DECL_THUNK_P'
   7214      This predicate holds if the function is a thunk.
   7215 
   7216      These functions represent stub code that adjusts the `this' pointer
   7217      and then jumps to another function.  When the jumped-to function
   7218      returns, control is transferred directly to the caller, without
   7219      returning to the thunk.  The first parameter to the thunk is
   7220      always the `this' pointer; the thunk should add `THUNK_DELTA' to
   7221      this value.  (The `THUNK_DELTA' is an `int', not an `INTEGER_CST'.)
   7222 
   7223      Then, if `THUNK_VCALL_OFFSET' (an `INTEGER_CST') is nonzero the
   7224      adjusted `this' pointer must be adjusted again.  The complete
   7225      calculation is given by the following pseudo-code:
   7226 
   7227           this += THUNK_DELTA
   7228           if (THUNK_VCALL_OFFSET)
   7229             this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET]
   7230 
   7231      Finally, the thunk should jump to the location given by
   7232      `DECL_INITIAL'; this will always be an expression for the address
   7233      of a function.
   7234 
   7235 `DECL_NON_THUNK_FUNCTION_P'
   7236      This predicate holds if the function is _not_ a thunk function.
   7237 
   7238 `GLOBAL_INIT_PRIORITY'
   7239      If either `DECL_GLOBAL_CTOR_P' or `DECL_GLOBAL_DTOR_P' holds, then
   7240      this gives the initialization priority for the function.  The
   7241      linker will arrange that all functions for which
   7242      `DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority
   7243      before `main' is called.  When the program exits, all functions for
   7244      which `DECL_GLOBAL_DTOR_P' holds are run in the reverse order.
   7245 
   7246 `DECL_ARTIFICIAL'
   7247      This macro holds if the function was implicitly generated by the
   7248      compiler, rather than explicitly declared.  In addition to
   7249      implicitly generated class member functions, this macro holds for
   7250      the special functions created to implement static initialization
   7251      and destruction, to compute run-time type information, and so
   7252      forth.
   7253 
   7254 `DECL_ARGUMENTS'
   7255      This macro returns the `PARM_DECL' for the first argument to the
   7256      function.  Subsequent `PARM_DECL' nodes can be obtained by
   7257      following the `TREE_CHAIN' links.
   7258 
   7259 `DECL_RESULT'
   7260      This macro returns the `RESULT_DECL' for the function.
   7261 
   7262 `TREE_TYPE'
   7263      This macro returns the `FUNCTION_TYPE' or `METHOD_TYPE' for the
   7264      function.
   7265 
   7266 `TYPE_RAISES_EXCEPTIONS'
   7267      This macro returns the list of exceptions that a (member-)function
   7268      can raise.  The returned list, if non `NULL', is comprised of nodes
   7269      whose `TREE_VALUE' represents a type.
   7270 
   7271 `TYPE_NOTHROW_P'
   7272      This predicate holds when the exception-specification of its
   7273      arguments if of the form ``()''.
   7274 
   7275 `DECL_ARRAY_DELETE_OPERATOR_P'
   7276      This predicate holds if the function an overloaded `operator
   7277      delete[]'.
   7278 
   7279 
   7280 
   7281 File: gccint.info,  Node: Function Bodies,  Prev: Function Basics,  Up: Functions
   7282 
   7283 9.6.2 Function Bodies
   7284 ---------------------
   7285 
   7286 A function that has a definition in the current translation unit will
   7287 have a non-`NULL' `DECL_INITIAL'.  However, back ends should not make
   7288 use of the particular value given by `DECL_INITIAL'.
   7289 
   7290  The `DECL_SAVED_TREE' macro will give the complete body of the
   7291 function.
   7292 
   7293 9.6.2.1 Statements
   7294 ..................
   7295 
   7296 There are tree nodes corresponding to all of the source-level statement
   7297 constructs, used within the C and C++ frontends.  These are enumerated
   7298 here, together with a list of the various macros that can be used to
   7299 obtain information about them.  There are a few macros that can be used
   7300 with all statements:
   7301 
   7302 `STMT_IS_FULL_EXPR_P'
   7303      In C++, statements normally constitute "full expressions";
   7304      temporaries created during a statement are destroyed when the
   7305      statement is complete.  However, G++ sometimes represents
   7306      expressions by statements; these statements will not have
   7307      `STMT_IS_FULL_EXPR_P' set.  Temporaries created during such
   7308      statements should be destroyed when the innermost enclosing
   7309      statement with `STMT_IS_FULL_EXPR_P' set is exited.
   7310 
   7311 
   7312  Here is the list of the various statement nodes, and the macros used to
   7313 access them.  This documentation describes the use of these nodes in
   7314 non-template functions (including instantiations of template functions).
   7315 In template functions, the same nodes are used, but sometimes in
   7316 slightly different ways.
   7317 
   7318  Many of the statements have substatements.  For example, a `while'
   7319 loop will have a body, which is itself a statement.  If the substatement
   7320 is `NULL_TREE', it is considered equivalent to a statement consisting
   7321 of a single `;', i.e., an expression statement in which the expression
   7322 has been omitted.  A substatement may in fact be a list of statements,
   7323 connected via their `TREE_CHAIN's.  So, you should always process the
   7324 statement tree by looping over substatements, like this:
   7325      void process_stmt (stmt)
   7326           tree stmt;
   7327      {
   7328        while (stmt)
   7329          {
   7330            switch (TREE_CODE (stmt))
   7331              {
   7332              case IF_STMT:
   7333                process_stmt (THEN_CLAUSE (stmt));
   7334                /* More processing here.  */
   7335                break;
   7336 
   7337              ...
   7338              }
   7339 
   7340            stmt = TREE_CHAIN (stmt);
   7341          }
   7342      }
   7343  In other words, while the `then' clause of an `if' statement in C++
   7344 can be only one statement (although that one statement may be a
   7345 compound statement), the intermediate representation will sometimes use
   7346 several statements chained together.
   7347 
   7348 `ASM_EXPR'
   7349      Used to represent an inline assembly statement.  For an inline
   7350      assembly statement like:
   7351           asm ("mov x, y");
   7352      The `ASM_STRING' macro will return a `STRING_CST' node for `"mov
   7353      x, y"'.  If the original statement made use of the
   7354      extended-assembly syntax, then `ASM_OUTPUTS', `ASM_INPUTS', and
   7355      `ASM_CLOBBERS' will be the outputs, inputs, and clobbers for the
   7356      statement, represented as `STRING_CST' nodes.  The
   7357      extended-assembly syntax looks like:
   7358           asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
   7359      The first string is the `ASM_STRING', containing the instruction
   7360      template.  The next two strings are the output and inputs,
   7361      respectively; this statement has no clobbers.  As this example
   7362      indicates, "plain" assembly statements are merely a special case
   7363      of extended assembly statements; they have no cv-qualifiers,
   7364      outputs, inputs, or clobbers.  All of the strings will be
   7365      `NUL'-terminated, and will contain no embedded `NUL'-characters.
   7366 
   7367      If the assembly statement is declared `volatile', or if the
   7368      statement was not an extended assembly statement, and is therefore
   7369      implicitly volatile, then the predicate `ASM_VOLATILE_P' will hold
   7370      of the `ASM_EXPR'.
   7371 
   7372 `BREAK_STMT'
   7373      Used to represent a `break' statement.  There are no additional
   7374      fields.
   7375 
   7376 `CASE_LABEL_EXPR'
   7377      Use to represent a `case' label, range of `case' labels, or a
   7378      `default' label.  If `CASE_LOW' is `NULL_TREE', then this is a
   7379      `default' label.  Otherwise, if `CASE_HIGH' is `NULL_TREE', then
   7380      this is an ordinary `case' label.  In this case, `CASE_LOW' is an
   7381      expression giving the value of the label.  Both `CASE_LOW' and
   7382      `CASE_HIGH' are `INTEGER_CST' nodes.  These values will have the
   7383      same type as the condition expression in the switch statement.
   7384 
   7385      Otherwise, if both `CASE_LOW' and `CASE_HIGH' are defined, the
   7386      statement is a range of case labels.  Such statements originate
   7387      with the extension that allows users to write things of the form:
   7388           case 2 ... 5:
   7389      The first value will be `CASE_LOW', while the second will be
   7390      `CASE_HIGH'.
   7391 
   7392 `CLEANUP_STMT'
   7393      Used to represent an action that should take place upon exit from
   7394      the enclosing scope.  Typically, these actions are calls to
   7395      destructors for local objects, but back ends cannot rely on this
   7396      fact.  If these nodes are in fact representing such destructors,
   7397      `CLEANUP_DECL' will be the `VAR_DECL' destroyed.  Otherwise,
   7398      `CLEANUP_DECL' will be `NULL_TREE'.  In any case, the
   7399      `CLEANUP_EXPR' is the expression to execute.  The cleanups
   7400      executed on exit from a scope should be run in the reverse order
   7401      of the order in which the associated `CLEANUP_STMT's were
   7402      encountered.
   7403 
   7404 `CONTINUE_STMT'
   7405      Used to represent a `continue' statement.  There are no additional
   7406      fields.
   7407 
   7408 `CTOR_STMT'
   7409      Used to mark the beginning (if `CTOR_BEGIN_P' holds) or end (if
   7410      `CTOR_END_P' holds of the main body of a constructor.  See also
   7411      `SUBOBJECT' for more information on how to use these nodes.
   7412 
   7413 `DECL_STMT'
   7414      Used to represent a local declaration.  The `DECL_STMT_DECL' macro
   7415      can be used to obtain the entity declared.  This declaration may
   7416      be a `LABEL_DECL', indicating that the label declared is a local
   7417      label.  (As an extension, GCC allows the declaration of labels
   7418      with scope.)  In C, this declaration may be a `FUNCTION_DECL',
   7419      indicating the use of the GCC nested function extension.  For more
   7420      information, *note Functions::.
   7421 
   7422 `DO_STMT'
   7423      Used to represent a `do' loop.  The body of the loop is given by
   7424      `DO_BODY' while the termination condition for the loop is given by
   7425      `DO_COND'.  The condition for a `do'-statement is always an
   7426      expression.
   7427 
   7428 `EMPTY_CLASS_EXPR'
   7429      Used to represent a temporary object of a class with no data whose
   7430      address is never taken.  (All such objects are interchangeable.)
   7431      The `TREE_TYPE' represents the type of the object.
   7432 
   7433 `EXPR_STMT'
   7434      Used to represent an expression statement.  Use `EXPR_STMT_EXPR' to
   7435      obtain the expression.
   7436 
   7437 `FOR_STMT'
   7438      Used to represent a `for' statement.  The `FOR_INIT_STMT' is the
   7439      initialization statement for the loop.  The `FOR_COND' is the
   7440      termination condition.  The `FOR_EXPR' is the expression executed
   7441      right before the `FOR_COND' on each loop iteration; often, this
   7442      expression increments a counter.  The body of the loop is given by
   7443      `FOR_BODY'.  Note that `FOR_INIT_STMT' and `FOR_BODY' return
   7444      statements, while `FOR_COND' and `FOR_EXPR' return expressions.
   7445 
   7446 `GOTO_EXPR'
   7447      Used to represent a `goto' statement.  The `GOTO_DESTINATION' will
   7448      usually be a `LABEL_DECL'.  However, if the "computed goto"
   7449      extension has been used, the `GOTO_DESTINATION' will be an
   7450      arbitrary expression indicating the destination.  This expression
   7451      will always have pointer type.
   7452 
   7453 `HANDLER'
   7454      Used to represent a C++ `catch' block.  The `HANDLER_TYPE' is the
   7455      type of exception that will be caught by this handler; it is equal
   7456      (by pointer equality) to `NULL' if this handler is for all types.
   7457      `HANDLER_PARMS' is the `DECL_STMT' for the catch parameter, and
   7458      `HANDLER_BODY' is the code for the block itself.
   7459 
   7460 `IF_STMT'
   7461      Used to represent an `if' statement.  The `IF_COND' is the
   7462      expression.
   7463 
   7464      If the condition is a `TREE_LIST', then the `TREE_PURPOSE' is a
   7465      statement (usually a `DECL_STMT').  Each time the condition is
   7466      evaluated, the statement should be executed.  Then, the
   7467      `TREE_VALUE' should be used as the conditional expression itself.
   7468      This representation is used to handle C++ code like this:
   7469 
   7470           if (int i = 7) ...
   7471 
   7472      where there is a new local variable (or variables) declared within
   7473      the condition.
   7474 
   7475      The `THEN_CLAUSE' represents the statement given by the `then'
   7476      condition, while the `ELSE_CLAUSE' represents the statement given
   7477      by the `else' condition.
   7478 
   7479 `LABEL_EXPR'
   7480      Used to represent a label.  The `LABEL_DECL' declared by this
   7481      statement can be obtained with the `LABEL_EXPR_LABEL' macro.  The
   7482      `IDENTIFIER_NODE' giving the name of the label can be obtained from
   7483      the `LABEL_DECL' with `DECL_NAME'.
   7484 
   7485 `RETURN_STMT'
   7486      Used to represent a `return' statement.  The `RETURN_EXPR' is the
   7487      expression returned; it will be `NULL_TREE' if the statement was
   7488      just
   7489           return;
   7490 
   7491 `SUBOBJECT'
   7492      In a constructor, these nodes are used to mark the point at which a
   7493      subobject of `this' is fully constructed.  If, after this point, an
   7494      exception is thrown before a `CTOR_STMT' with `CTOR_END_P' set is
   7495      encountered, the `SUBOBJECT_CLEANUP' must be executed.  The
   7496      cleanups must be executed in the reverse order in which they
   7497      appear.
   7498 
   7499 `SWITCH_STMT'
   7500      Used to represent a `switch' statement.  The `SWITCH_STMT_COND' is
   7501      the expression on which the switch is occurring.  See the
   7502      documentation for an `IF_STMT' for more information on the
   7503      representation used for the condition.  The `SWITCH_STMT_BODY' is
   7504      the body of the switch statement.   The `SWITCH_STMT_TYPE' is the
   7505      original type of switch expression as given in the source, before
   7506      any compiler conversions.
   7507 
   7508 `TRY_BLOCK'
   7509      Used to represent a `try' block.  The body of the try block is
   7510      given by `TRY_STMTS'.  Each of the catch blocks is a `HANDLER'
   7511      node.  The first handler is given by `TRY_HANDLERS'.  Subsequent
   7512      handlers are obtained by following the `TREE_CHAIN' link from one
   7513      handler to the next.  The body of the handler is given by
   7514      `HANDLER_BODY'.
   7515 
   7516      If `CLEANUP_P' holds of the `TRY_BLOCK', then the `TRY_HANDLERS'
   7517      will not be a `HANDLER' node.  Instead, it will be an expression
   7518      that should be executed if an exception is thrown in the try
   7519      block.  It must rethrow the exception after executing that code.
   7520      And, if an exception is thrown while the expression is executing,
   7521      `terminate' must be called.
   7522 
   7523 `USING_STMT'
   7524      Used to represent a `using' directive.  The namespace is given by
   7525      `USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL.  This node
   7526      is needed inside template functions, to implement using directives
   7527      during instantiation.
   7528 
   7529 `WHILE_STMT'
   7530      Used to represent a `while' loop.  The `WHILE_COND' is the
   7531      termination condition for the loop.  See the documentation for an
   7532      `IF_STMT' for more information on the representation used for the
   7533      condition.
   7534 
   7535      The `WHILE_BODY' is the body of the loop.
   7536 
   7537 
   7538 
   7539 File: gccint.info,  Node: Attributes,  Next: Expression trees,  Prev: Declarations,  Up: Trees
   7540 
   7541 9.7 Attributes in trees
   7542 =======================
   7543 
   7544 Attributes, as specified using the `__attribute__' keyword, are
   7545 represented internally as a `TREE_LIST'.  The `TREE_PURPOSE' is the
   7546 name of the attribute, as an `IDENTIFIER_NODE'.  The `TREE_VALUE' is a
   7547 `TREE_LIST' of the arguments of the attribute, if any, or `NULL_TREE'
   7548 if there are no arguments; the arguments are stored as the `TREE_VALUE'
   7549 of successive entries in the list, and may be identifiers or
   7550 expressions.  The `TREE_CHAIN' of the attribute is the next attribute
   7551 in a list of attributes applying to the same declaration or type, or
   7552 `NULL_TREE' if there are no further attributes in the list.
   7553 
   7554  Attributes may be attached to declarations and to types; these
   7555 attributes may be accessed with the following macros.  All attributes
   7556 are stored in this way, and many also cause other changes to the
   7557 declaration or type or to other internal compiler data structures.
   7558 
   7559  -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL)
   7560      This macro returns the attributes on the declaration DECL.
   7561 
   7562  -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE)
   7563      This macro returns the attributes on the type TYPE.
   7564 
   7565 
   7566 File: gccint.info,  Node: Expression trees,  Prev: Attributes,  Up: Trees
   7567 
   7568 9.8 Expressions
   7569 ===============
   7570 
   7571 The internal representation for expressions is for the most part quite
   7572 straightforward.  However, there are a few facts that one must bear in
   7573 mind.  In particular, the expression "tree" is actually a directed
   7574 acyclic graph.  (For example there may be many references to the integer
   7575 constant zero throughout the source program; many of these will be
   7576 represented by the same expression node.)  You should not rely on
   7577 certain kinds of node being shared, nor should you rely on certain
   7578 kinds of nodes being unshared.
   7579 
   7580  The following macros can be used with all expression nodes:
   7581 
   7582 `TREE_TYPE'
   7583      Returns the type of the expression.  This value may not be
   7584      precisely the same type that would be given the expression in the
   7585      original program.
   7586 
   7587  In what follows, some nodes that one might expect to always have type
   7588 `bool' are documented to have either integral or boolean type.  At some
   7589 point in the future, the C front end may also make use of this same
   7590 intermediate representation, and at this point these nodes will
   7591 certainly have integral type.  The previous sentence is not meant to
   7592 imply that the C++ front end does not or will not give these nodes
   7593 integral type.
   7594 
   7595  Below, we list the various kinds of expression nodes.  Except where
   7596 noted otherwise, the operands to an expression are accessed using the
   7597 `TREE_OPERAND' macro.  For example, to access the first operand to a
   7598 binary plus expression `expr', use:
   7599 
   7600      TREE_OPERAND (expr, 0)
   7601  As this example indicates, the operands are zero-indexed.
   7602 
   7603  All the expressions starting with `OMP_' represent directives and
   7604 clauses used by the OpenMP API `http://www.openmp.org/'.
   7605 
   7606  The table below begins with constants, moves on to unary expressions,
   7607 then proceeds to binary expressions, and concludes with various other
   7608 kinds of expressions:
   7609 
   7610 `INTEGER_CST'
   7611      These nodes represent integer constants.  Note that the type of
   7612      these constants is obtained with `TREE_TYPE'; they are not always
   7613      of type `int'.  In particular, `char' constants are represented
   7614      with `INTEGER_CST' nodes.  The value of the integer constant `e' is
   7615      given by
   7616           ((TREE_INT_CST_HIGH (e) << HOST_BITS_PER_WIDE_INT)
   7617           + TREE_INST_CST_LOW (e))
   7618      HOST_BITS_PER_WIDE_INT is at least thirty-two on all platforms.
   7619      Both `TREE_INT_CST_HIGH' and `TREE_INT_CST_LOW' return a
   7620      `HOST_WIDE_INT'.  The value of an `INTEGER_CST' is interpreted as
   7621      a signed or unsigned quantity depending on the type of the
   7622      constant.  In general, the expression given above will overflow,
   7623      so it should not be used to calculate the value of the constant.
   7624 
   7625      The variable `integer_zero_node' is an integer constant with value
   7626      zero.  Similarly, `integer_one_node' is an integer constant with
   7627      value one.  The `size_zero_node' and `size_one_node' variables are
   7628      analogous, but have type `size_t' rather than `int'.
   7629 
   7630      The function `tree_int_cst_lt' is a predicate which holds if its
   7631      first argument is less than its second.  Both constants are
   7632      assumed to have the same signedness (i.e., either both should be
   7633      signed or both should be unsigned.)  The full width of the
   7634      constant is used when doing the comparison; the usual rules about
   7635      promotions and conversions are ignored.  Similarly,
   7636      `tree_int_cst_equal' holds if the two constants are equal.  The
   7637      `tree_int_cst_sgn' function returns the sign of a constant.  The
   7638      value is `1', `0', or `-1' according on whether the constant is
   7639      greater than, equal to, or less than zero.  Again, the signedness
   7640      of the constant's type is taken into account; an unsigned constant
   7641      is never less than zero, no matter what its bit-pattern.
   7642 
   7643 `REAL_CST'
   7644      FIXME: Talk about how to obtain representations of this constant,
   7645      do comparisons, and so forth.
   7646 
   7647 `FIXED_CST'
   7648      These nodes represent fixed-point constants.  The type of these
   7649      constants is obtained with `TREE_TYPE'.  `TREE_FIXED_CST_PTR'
   7650      points to to struct fixed_value;  `TREE_FIXED_CST' returns the
   7651      structure itself.  Struct fixed_value contains `data' with the
   7652      size of two HOST_BITS_PER_WIDE_INT and `mode' as the associated
   7653      fixed-point machine mode for `data'.
   7654 
   7655 `COMPLEX_CST'
   7656      These nodes are used to represent complex number constants, that
   7657      is a `__complex__' whose parts are constant nodes.  The
   7658      `TREE_REALPART' and `TREE_IMAGPART' return the real and the
   7659      imaginary parts respectively.
   7660 
   7661 `VECTOR_CST'
   7662      These nodes are used to represent vector constants, whose parts are
   7663      constant nodes.  Each individual constant node is either an
   7664      integer or a double constant node.  The first operand is a
   7665      `TREE_LIST' of the constant nodes and is accessed through
   7666      `TREE_VECTOR_CST_ELTS'.
   7667 
   7668 `STRING_CST'
   7669      These nodes represent string-constants.  The `TREE_STRING_LENGTH'
   7670      returns the length of the string, as an `int'.  The
   7671      `TREE_STRING_POINTER' is a `char*' containing the string itself.
   7672      The string may not be `NUL'-terminated, and it may contain
   7673      embedded `NUL' characters.  Therefore, the `TREE_STRING_LENGTH'
   7674      includes the trailing `NUL' if it is present.
   7675 
   7676      For wide string constants, the `TREE_STRING_LENGTH' is the number
   7677      of bytes in the string, and the `TREE_STRING_POINTER' points to an
   7678      array of the bytes of the string, as represented on the target
   7679      system (that is, as integers in the target endianness).  Wide and
   7680      non-wide string constants are distinguished only by the `TREE_TYPE'
   7681      of the `STRING_CST'.
   7682 
   7683      FIXME: The formats of string constants are not well-defined when
   7684      the target system bytes are not the same width as host system
   7685      bytes.
   7686 
   7687 `PTRMEM_CST'
   7688      These nodes are used to represent pointer-to-member constants.  The
   7689      `PTRMEM_CST_CLASS' is the class type (either a `RECORD_TYPE' or
   7690      `UNION_TYPE' within which the pointer points), and the
   7691      `PTRMEM_CST_MEMBER' is the declaration for the pointed to object.
   7692      Note that the `DECL_CONTEXT' for the `PTRMEM_CST_MEMBER' is in
   7693      general different from the `PTRMEM_CST_CLASS'.  For example, given:
   7694           struct B { int i; };
   7695           struct D : public B {};
   7696           int D::*dp = &D::i;
   7697      The `PTRMEM_CST_CLASS' for `&D::i' is `D', even though the
   7698      `DECL_CONTEXT' for the `PTRMEM_CST_MEMBER' is `B', since `B::i' is
   7699      a member of `B', not `D'.
   7700 
   7701 `VAR_DECL'
   7702      These nodes represent variables, including static data members.
   7703      For more information, *note Declarations::.
   7704 
   7705 `NEGATE_EXPR'
   7706      These nodes represent unary negation of the single operand, for
   7707      both integer and floating-point types.  The type of negation can be
   7708      determined by looking at the type of the expression.
   7709 
   7710      The behavior of this operation on signed arithmetic overflow is
   7711      controlled by the `flag_wrapv' and `flag_trapv' variables.
   7712 
   7713 `ABS_EXPR'
   7714      These nodes represent the absolute value of the single operand, for
   7715      both integer and floating-point types.  This is typically used to
   7716      implement the `abs', `labs' and `llabs' builtins for integer
   7717      types, and the `fabs', `fabsf' and `fabsl' builtins for floating
   7718      point types.  The type of abs operation can be determined by
   7719      looking at the type of the expression.
   7720 
   7721      This node is not used for complex types.  To represent the modulus
   7722      or complex abs of a complex value, use the `BUILT_IN_CABS',
   7723      `BUILT_IN_CABSF' or `BUILT_IN_CABSL' builtins, as used to
   7724      implement the C99 `cabs', `cabsf' and `cabsl' built-in functions.
   7725 
   7726 `BIT_NOT_EXPR'
   7727      These nodes represent bitwise complement, and will always have
   7728      integral type.  The only operand is the value to be complemented.
   7729 
   7730 `TRUTH_NOT_EXPR'
   7731      These nodes represent logical negation, and will always have
   7732      integral (or boolean) type.  The operand is the value being
   7733      negated.  The type of the operand and that of the result are
   7734      always of `BOOLEAN_TYPE' or `INTEGER_TYPE'.
   7735 
   7736 `PREDECREMENT_EXPR'
   7737 `PREINCREMENT_EXPR'
   7738 `POSTDECREMENT_EXPR'
   7739 `POSTINCREMENT_EXPR'
   7740      These nodes represent increment and decrement expressions.  The
   7741      value of the single operand is computed, and the operand
   7742      incremented or decremented.  In the case of `PREDECREMENT_EXPR' and
   7743      `PREINCREMENT_EXPR', the value of the expression is the value
   7744      resulting after the increment or decrement; in the case of
   7745      `POSTDECREMENT_EXPR' and `POSTINCREMENT_EXPR' is the value before
   7746      the increment or decrement occurs.  The type of the operand, like
   7747      that of the result, will be either integral, boolean, or
   7748      floating-point.
   7749 
   7750 `ADDR_EXPR'
   7751      These nodes are used to represent the address of an object.  (These
   7752      expressions will always have pointer or reference type.)  The
   7753      operand may be another expression, or it may be a declaration.
   7754 
   7755      As an extension, GCC allows users to take the address of a label.
   7756      In this case, the operand of the `ADDR_EXPR' will be a
   7757      `LABEL_DECL'.  The type of such an expression is `void*'.
   7758 
   7759      If the object addressed is not an lvalue, a temporary is created,
   7760      and the address of the temporary is used.
   7761 
   7762 `INDIRECT_REF'
   7763      These nodes are used to represent the object pointed to by a
   7764      pointer.  The operand is the pointer being dereferenced; it will
   7765      always have pointer or reference type.
   7766 
   7767 `FIX_TRUNC_EXPR'
   7768      These nodes represent conversion of a floating-point value to an
   7769      integer.  The single operand will have a floating-point type, while
   7770      the complete expression will have an integral (or boolean) type.
   7771      The operand is rounded towards zero.
   7772 
   7773 `FLOAT_EXPR'
   7774      These nodes represent conversion of an integral (or boolean) value
   7775      to a floating-point value.  The single operand will have integral
   7776      type, while the complete expression will have a floating-point
   7777      type.
   7778 
   7779      FIXME: How is the operand supposed to be rounded?  Is this
   7780      dependent on `-mieee'?
   7781 
   7782 `COMPLEX_EXPR'
   7783      These nodes are used to represent complex numbers constructed from
   7784      two expressions of the same (integer or real) type.  The first
   7785      operand is the real part and the second operand is the imaginary
   7786      part.
   7787 
   7788 `CONJ_EXPR'
   7789      These nodes represent the conjugate of their operand.
   7790 
   7791 `REALPART_EXPR'
   7792 `IMAGPART_EXPR'
   7793      These nodes represent respectively the real and the imaginary parts
   7794      of complex numbers (their sole argument).
   7795 
   7796 `NON_LVALUE_EXPR'
   7797      These nodes indicate that their one and only operand is not an
   7798      lvalue.  A back end can treat these identically to the single
   7799      operand.
   7800 
   7801 `NOP_EXPR'
   7802      These nodes are used to represent conversions that do not require
   7803      any code-generation.  For example, conversion of a `char*' to an
   7804      `int*' does not require any code be generated; such a conversion is
   7805      represented by a `NOP_EXPR'.  The single operand is the expression
   7806      to be converted.  The conversion from a pointer to a reference is
   7807      also represented with a `NOP_EXPR'.
   7808 
   7809 `CONVERT_EXPR'
   7810      These nodes are similar to `NOP_EXPR's, but are used in those
   7811      situations where code may need to be generated.  For example, if an
   7812      `int*' is converted to an `int' code may need to be generated on
   7813      some platforms.  These nodes are never used for C++-specific
   7814      conversions, like conversions between pointers to different
   7815      classes in an inheritance hierarchy.  Any adjustments that need to
   7816      be made in such cases are always indicated explicitly.  Similarly,
   7817      a user-defined conversion is never represented by a
   7818      `CONVERT_EXPR'; instead, the function calls are made explicit.
   7819 
   7820 `FIXED_CONVERT_EXPR'
   7821      These nodes are used to represent conversions that involve
   7822      fixed-point values.  For example, from a fixed-point value to
   7823      another fixed-point value, from an integer to a fixed-point value,
   7824      from a fixed-point value to an integer, from a floating-point
   7825      value to a fixed-point value, or from a fixed-point value to a
   7826      floating-point value.
   7827 
   7828 `THROW_EXPR'
   7829      These nodes represent `throw' expressions.  The single operand is
   7830      an expression for the code that should be executed to throw the
   7831      exception.  However, there is one implicit action not represented
   7832      in that expression; namely the call to `__throw'.  This function
   7833      takes no arguments.  If `setjmp'/`longjmp' exceptions are used, the
   7834      function `__sjthrow' is called instead.  The normal GCC back end
   7835      uses the function `emit_throw' to generate this code; you can
   7836      examine this function to see what needs to be done.
   7837 
   7838 `LSHIFT_EXPR'
   7839 `RSHIFT_EXPR'
   7840      These nodes represent left and right shifts, respectively.  The
   7841      first operand is the value to shift; it will always be of integral
   7842      type.  The second operand is an expression for the number of bits
   7843      by which to shift.  Right shift should be treated as arithmetic,
   7844      i.e., the high-order bits should be zero-filled when the
   7845      expression has unsigned type and filled with the sign bit when the
   7846      expression has signed type.  Note that the result is undefined if
   7847      the second operand is larger than or equal to the first operand's
   7848      type size.
   7849 
   7850 `BIT_IOR_EXPR'
   7851 `BIT_XOR_EXPR'
   7852 `BIT_AND_EXPR'
   7853      These nodes represent bitwise inclusive or, bitwise exclusive or,
   7854      and bitwise and, respectively.  Both operands will always have
   7855      integral type.
   7856 
   7857 `TRUTH_ANDIF_EXPR'
   7858 `TRUTH_ORIF_EXPR'
   7859      These nodes represent logical "and" and logical "or", respectively.
   7860      These operators are not strict; i.e., the second operand is
   7861      evaluated only if the value of the expression is not determined by
   7862      evaluation of the first operand.  The type of the operands and
   7863      that of the result are always of `BOOLEAN_TYPE' or `INTEGER_TYPE'.
   7864 
   7865 `TRUTH_AND_EXPR'
   7866 `TRUTH_OR_EXPR'
   7867 `TRUTH_XOR_EXPR'
   7868      These nodes represent logical and, logical or, and logical
   7869      exclusive or.  They are strict; both arguments are always
   7870      evaluated.  There are no corresponding operators in C or C++, but
   7871      the front end will sometimes generate these expressions anyhow, if
   7872      it can tell that strictness does not matter.  The type of the
   7873      operands and that of the result are always of `BOOLEAN_TYPE' or
   7874      `INTEGER_TYPE'.
   7875 
   7876 `POINTER_PLUS_EXPR'
   7877      This node represents pointer arithmetic.  The first operand is
   7878      always a pointer/reference type.  The second operand is always an
   7879      unsigned integer type compatible with sizetype.  This is the only
   7880      binary arithmetic operand that can operate on pointer types.
   7881 
   7882 `PLUS_EXPR'
   7883 `MINUS_EXPR'
   7884 `MULT_EXPR'
   7885      These nodes represent various binary arithmetic operations.
   7886      Respectively, these operations are addition, subtraction (of the
   7887      second operand from the first) and multiplication.  Their operands
   7888      may have either integral or floating type, but there will never be
   7889      case in which one operand is of floating type and the other is of
   7890      integral type.
   7891 
   7892      The behavior of these operations on signed arithmetic overflow is
   7893      controlled by the `flag_wrapv' and `flag_trapv' variables.
   7894 
   7895 `RDIV_EXPR'
   7896      This node represents a floating point division operation.
   7897 
   7898 `TRUNC_DIV_EXPR'
   7899 `FLOOR_DIV_EXPR'
   7900 `CEIL_DIV_EXPR'
   7901 `ROUND_DIV_EXPR'
   7902      These nodes represent integer division operations that return an
   7903      integer result.  `TRUNC_DIV_EXPR' rounds towards zero,
   7904      `FLOOR_DIV_EXPR' rounds towards negative infinity, `CEIL_DIV_EXPR'
   7905      rounds towards positive infinity and `ROUND_DIV_EXPR' rounds to
   7906      the closest integer.  Integer division in C and C++ is truncating,
   7907      i.e. `TRUNC_DIV_EXPR'.
   7908 
   7909      The behavior of these operations on signed arithmetic overflow,
   7910      when dividing the minimum signed integer by minus one, is
   7911      controlled by the `flag_wrapv' and `flag_trapv' variables.
   7912 
   7913 `TRUNC_MOD_EXPR'
   7914 `FLOOR_MOD_EXPR'
   7915 `CEIL_MOD_EXPR'
   7916 `ROUND_MOD_EXPR'
   7917      These nodes represent the integer remainder or modulus operation.
   7918      The integer modulus of two operands `a' and `b' is defined as `a -
   7919      (a/b)*b' where the division calculated using the corresponding
   7920      division operator.  Hence for `TRUNC_MOD_EXPR' this definition
   7921      assumes division using truncation towards zero, i.e.
   7922      `TRUNC_DIV_EXPR'.  Integer remainder in C and C++ uses truncating
   7923      division, i.e. `TRUNC_MOD_EXPR'.
   7924 
   7925 `EXACT_DIV_EXPR'
   7926      The `EXACT_DIV_EXPR' code is used to represent integer divisions
   7927      where the numerator is known to be an exact multiple of the
   7928      denominator.  This allows the backend to choose between the faster
   7929      of `TRUNC_DIV_EXPR', `CEIL_DIV_EXPR' and `FLOOR_DIV_EXPR' for the
   7930      current target.
   7931 
   7932 `ARRAY_REF'
   7933      These nodes represent array accesses.  The first operand is the
   7934      array; the second is the index.  To calculate the address of the
   7935      memory accessed, you must scale the index by the size of the type
   7936      of the array elements.  The type of these expressions must be the
   7937      type of a component of the array.  The third and fourth operands
   7938      are used after gimplification to represent the lower bound and
   7939      component size but should not be used directly; call
   7940      `array_ref_low_bound' and `array_ref_element_size' instead.
   7941 
   7942 `ARRAY_RANGE_REF'
   7943      These nodes represent access to a range (or "slice") of an array.
   7944      The operands are the same as that for `ARRAY_REF' and have the same
   7945      meanings.  The type of these expressions must be an array whose
   7946      component type is the same as that of the first operand.  The
   7947      range of that array type determines the amount of data these
   7948      expressions access.
   7949 
   7950 `TARGET_MEM_REF'
   7951      These nodes represent memory accesses whose address directly map to
   7952      an addressing mode of the target architecture.  The first argument
   7953      is `TMR_SYMBOL' and must be a `VAR_DECL' of an object with a fixed
   7954      address.  The second argument is `TMR_BASE' and the third one is
   7955      `TMR_INDEX'.  The fourth argument is `TMR_STEP' and must be an
   7956      `INTEGER_CST'.  The fifth argument is `TMR_OFFSET' and must be an
   7957      `INTEGER_CST'.  Any of the arguments may be NULL if the
   7958      appropriate component does not appear in the address.  Address of
   7959      the `TARGET_MEM_REF' is determined in the following way.
   7960 
   7961           &TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET
   7962 
   7963      The sixth argument is the reference to the original memory access,
   7964      which is preserved for the purposes of the RTL alias analysis.
   7965      The seventh argument is a tag representing the results of tree
   7966      level alias analysis.
   7967 
   7968 `LT_EXPR'
   7969 `LE_EXPR'
   7970 `GT_EXPR'
   7971 `GE_EXPR'
   7972 `EQ_EXPR'
   7973 `NE_EXPR'
   7974      These nodes represent the less than, less than or equal to, greater
   7975      than, greater than or equal to, equal, and not equal comparison
   7976      operators.  The first and second operand with either be both of
   7977      integral type or both of floating type.  The result type of these
   7978      expressions will always be of integral or boolean type.  These
   7979      operations return the result type's zero value for false, and the
   7980      result type's one value for true.
   7981 
   7982      For floating point comparisons, if we honor IEEE NaNs and either
   7983      operand is NaN, then `NE_EXPR' always returns true and the
   7984      remaining operators always return false.  On some targets,
   7985      comparisons against an IEEE NaN, other than equality and
   7986      inequality, may generate a floating point exception.
   7987 
   7988 `ORDERED_EXPR'
   7989 `UNORDERED_EXPR'
   7990      These nodes represent non-trapping ordered and unordered comparison
   7991      operators.  These operations take two floating point operands and
   7992      determine whether they are ordered or unordered relative to each
   7993      other.  If either operand is an IEEE NaN, their comparison is
   7994      defined to be unordered, otherwise the comparison is defined to be
   7995      ordered.  The result type of these expressions will always be of
   7996      integral or boolean type.  These operations return the result
   7997      type's zero value for false, and the result type's one value for
   7998      true.
   7999 
   8000 `UNLT_EXPR'
   8001 `UNLE_EXPR'
   8002 `UNGT_EXPR'
   8003 `UNGE_EXPR'
   8004 `UNEQ_EXPR'
   8005 `LTGT_EXPR'
   8006      These nodes represent the unordered comparison operators.  These
   8007      operations take two floating point operands and determine whether
   8008      the operands are unordered or are less than, less than or equal to,
   8009      greater than, greater than or equal to, or equal respectively.  For
   8010      example, `UNLT_EXPR' returns true if either operand is an IEEE NaN
   8011      or the first operand is less than the second.  With the possible
   8012      exception of `LTGT_EXPR', all of these operations are guaranteed
   8013      not to generate a floating point exception.  The result type of
   8014      these expressions will always be of integral or boolean type.
   8015      These operations return the result type's zero value for false,
   8016      and the result type's one value for true.
   8017 
   8018 `MODIFY_EXPR'
   8019      These nodes represent assignment.  The left-hand side is the first
   8020      operand; the right-hand side is the second operand.  The left-hand
   8021      side will be a `VAR_DECL', `INDIRECT_REF', `COMPONENT_REF', or
   8022      other lvalue.
   8023 
   8024      These nodes are used to represent not only assignment with `=' but
   8025      also compound assignments (like `+='), by reduction to `='
   8026      assignment.  In other words, the representation for `i += 3' looks
   8027      just like that for `i = i + 3'.
   8028 
   8029 `INIT_EXPR'
   8030      These nodes are just like `MODIFY_EXPR', but are used only when a
   8031      variable is initialized, rather than assigned to subsequently.
   8032      This means that we can assume that the target of the
   8033      initialization is not used in computing its own value; any
   8034      reference to the lhs in computing the rhs is undefined.
   8035 
   8036 `COMPONENT_REF'
   8037      These nodes represent non-static data member accesses.  The first
   8038      operand is the object (rather than a pointer to it); the second
   8039      operand is the `FIELD_DECL' for the data member.  The third
   8040      operand represents the byte offset of the field, but should not be
   8041      used directly; call `component_ref_field_offset' instead.
   8042 
   8043 `COMPOUND_EXPR'
   8044      These nodes represent comma-expressions.  The first operand is an
   8045      expression whose value is computed and thrown away prior to the
   8046      evaluation of the second operand.  The value of the entire
   8047      expression is the value of the second operand.
   8048 
   8049 `COND_EXPR'
   8050      These nodes represent `?:' expressions.  The first operand is of
   8051      boolean or integral type.  If it evaluates to a nonzero value, the
   8052      second operand should be evaluated, and returned as the value of
   8053      the expression.  Otherwise, the third operand is evaluated, and
   8054      returned as the value of the expression.
   8055 
   8056      The second operand must have the same type as the entire
   8057      expression, unless it unconditionally throws an exception or calls
   8058      a noreturn function, in which case it should have void type.  The
   8059      same constraints apply to the third operand.  This allows array
   8060      bounds checks to be represented conveniently as `(i >= 0 && i <
   8061      10) ? i : abort()'.
   8062 
   8063      As a GNU extension, the C language front-ends allow the second
   8064      operand of the `?:' operator may be omitted in the source.  For
   8065      example, `x ? : 3' is equivalent to `x ? x : 3', assuming that `x'
   8066      is an expression without side-effects.  In the tree
   8067      representation, however, the second operand is always present,
   8068      possibly protected by `SAVE_EXPR' if the first argument does cause
   8069      side-effects.
   8070 
   8071 `CALL_EXPR'
   8072      These nodes are used to represent calls to functions, including
   8073      non-static member functions.  `CALL_EXPR's are implemented as
   8074      expression nodes with a variable number of operands.  Rather than
   8075      using `TREE_OPERAND' to extract them, it is preferable to use the
   8076      specialized accessor macros and functions that operate
   8077      specifically on `CALL_EXPR' nodes.
   8078 
   8079      `CALL_EXPR_FN' returns a pointer to the function to call; it is
   8080      always an expression whose type is a `POINTER_TYPE'.
   8081 
   8082      The number of arguments to the call is returned by
   8083      `call_expr_nargs', while the arguments themselves can be accessed
   8084      with the `CALL_EXPR_ARG' macro.  The arguments are zero-indexed
   8085      and numbered left-to-right.  You can iterate over the arguments
   8086      using `FOR_EACH_CALL_EXPR_ARG', as in:
   8087 
   8088           tree call, arg;
   8089           call_expr_arg_iterator iter;
   8090           FOR_EACH_CALL_EXPR_ARG (arg, iter, call)
   8091             /* arg is bound to successive arguments of call.  */
   8092             ...;
   8093 
   8094      For non-static member functions, there will be an operand
   8095      corresponding to the `this' pointer.  There will always be
   8096      expressions corresponding to all of the arguments, even if the
   8097      function is declared with default arguments and some arguments are
   8098      not explicitly provided at the call sites.
   8099 
   8100      `CALL_EXPR's also have a `CALL_EXPR_STATIC_CHAIN' operand that is
   8101      used to implement nested functions.  This operand is otherwise
   8102      null.
   8103 
   8104 `STMT_EXPR'
   8105      These nodes are used to represent GCC's statement-expression
   8106      extension.  The statement-expression extension allows code like
   8107      this:
   8108           int f() { return ({ int j; j = 3; j + 7; }); }
   8109      In other words, an sequence of statements may occur where a single
   8110      expression would normally appear.  The `STMT_EXPR' node represents
   8111      such an expression.  The `STMT_EXPR_STMT' gives the statement
   8112      contained in the expression.  The value of the expression is the
   8113      value of the last sub-statement in the body.  More precisely, the
   8114      value is the value computed by the last statement nested inside
   8115      `BIND_EXPR', `TRY_FINALLY_EXPR', or `TRY_CATCH_EXPR'.  For
   8116      example, in:
   8117           ({ 3; })
   8118      the value is `3' while in:
   8119           ({ if (x) { 3; } })
   8120      there is no value.  If the `STMT_EXPR' does not yield a value,
   8121      it's type will be `void'.
   8122 
   8123 `BIND_EXPR'
   8124      These nodes represent local blocks.  The first operand is a list of
   8125      variables, connected via their `TREE_CHAIN' field.  These will
   8126      never require cleanups.  The scope of these variables is just the
   8127      body of the `BIND_EXPR'.  The body of the `BIND_EXPR' is the
   8128      second operand.
   8129 
   8130 `LOOP_EXPR'
   8131      These nodes represent "infinite" loops.  The `LOOP_EXPR_BODY'
   8132      represents the body of the loop.  It should be executed forever,
   8133      unless an `EXIT_EXPR' is encountered.
   8134 
   8135 `EXIT_EXPR'
   8136      These nodes represent conditional exits from the nearest enclosing
   8137      `LOOP_EXPR'.  The single operand is the condition; if it is
   8138      nonzero, then the loop should be exited.  An `EXIT_EXPR' will only
   8139      appear within a `LOOP_EXPR'.
   8140 
   8141 `CLEANUP_POINT_EXPR'
   8142      These nodes represent full-expressions.  The single operand is an
   8143      expression to evaluate.  Any destructor calls engendered by the
   8144      creation of temporaries during the evaluation of that expression
   8145      should be performed immediately after the expression is evaluated.
   8146 
   8147 `CONSTRUCTOR'
   8148      These nodes represent the brace-enclosed initializers for a
   8149      structure or array.  The first operand is reserved for use by the
   8150      back end.  The second operand is a `TREE_LIST'.  If the
   8151      `TREE_TYPE' of the `CONSTRUCTOR' is a `RECORD_TYPE' or
   8152      `UNION_TYPE', then the `TREE_PURPOSE' of each node in the
   8153      `TREE_LIST' will be a `FIELD_DECL' and the `TREE_VALUE' of each
   8154      node will be the expression used to initialize that field.
   8155 
   8156      If the `TREE_TYPE' of the `CONSTRUCTOR' is an `ARRAY_TYPE', then
   8157      the `TREE_PURPOSE' of each element in the `TREE_LIST' will be an
   8158      `INTEGER_CST' or a `RANGE_EXPR' of two `INTEGER_CST's.  A single
   8159      `INTEGER_CST' indicates which element of the array (indexed from
   8160      zero) is being assigned to.  A `RANGE_EXPR' indicates an inclusive
   8161      range of elements to initialize.  In both cases the `TREE_VALUE'
   8162      is the corresponding initializer.  It is re-evaluated for each
   8163      element of a `RANGE_EXPR'.  If the `TREE_PURPOSE' is `NULL_TREE',
   8164      then the initializer is for the next available array element.
   8165 
   8166      In the front end, you should not depend on the fields appearing in
   8167      any particular order.  However, in the middle end, fields must
   8168      appear in declaration order.  You should not assume that all
   8169      fields will be represented.  Unrepresented fields will be set to
   8170      zero.
   8171 
   8172 `COMPOUND_LITERAL_EXPR'
   8173      These nodes represent ISO C99 compound literals.  The
   8174      `COMPOUND_LITERAL_EXPR_DECL_STMT' is a `DECL_STMT' containing an
   8175      anonymous `VAR_DECL' for the unnamed object represented by the
   8176      compound literal; the `DECL_INITIAL' of that `VAR_DECL' is a
   8177      `CONSTRUCTOR' representing the brace-enclosed list of initializers
   8178      in the compound literal.  That anonymous `VAR_DECL' can also be
   8179      accessed directly by the `COMPOUND_LITERAL_EXPR_DECL' macro.
   8180 
   8181 `SAVE_EXPR'
   8182      A `SAVE_EXPR' represents an expression (possibly involving
   8183      side-effects) that is used more than once.  The side-effects should
   8184      occur only the first time the expression is evaluated.  Subsequent
   8185      uses should just reuse the computed value.  The first operand to
   8186      the `SAVE_EXPR' is the expression to evaluate.  The side-effects
   8187      should be executed where the `SAVE_EXPR' is first encountered in a
   8188      depth-first preorder traversal of the expression tree.
   8189 
   8190 `TARGET_EXPR'
   8191      A `TARGET_EXPR' represents a temporary object.  The first operand
   8192      is a `VAR_DECL' for the temporary variable.  The second operand is
   8193      the initializer for the temporary.  The initializer is evaluated
   8194      and, if non-void, copied (bitwise) into the temporary.  If the
   8195      initializer is void, that means that it will perform the
   8196      initialization itself.
   8197 
   8198      Often, a `TARGET_EXPR' occurs on the right-hand side of an
   8199      assignment, or as the second operand to a comma-expression which is
   8200      itself the right-hand side of an assignment, etc.  In this case,
   8201      we say that the `TARGET_EXPR' is "normal"; otherwise, we say it is
   8202      "orphaned".  For a normal `TARGET_EXPR' the temporary variable
   8203      should be treated as an alias for the left-hand side of the
   8204      assignment, rather than as a new temporary variable.
   8205 
   8206      The third operand to the `TARGET_EXPR', if present, is a
   8207      cleanup-expression (i.e., destructor call) for the temporary.  If
   8208      this expression is orphaned, then this expression must be executed
   8209      when the statement containing this expression is complete.  These
   8210      cleanups must always be executed in the order opposite to that in
   8211      which they were encountered.  Note that if a temporary is created
   8212      on one branch of a conditional operator (i.e., in the second or
   8213      third operand to a `COND_EXPR'), the cleanup must be run only if
   8214      that branch is actually executed.
   8215 
   8216      See `STMT_IS_FULL_EXPR_P' for more information about running these
   8217      cleanups.
   8218 
   8219 `AGGR_INIT_EXPR'
   8220      An `AGGR_INIT_EXPR' represents the initialization as the return
   8221      value of a function call, or as the result of a constructor.  An
   8222      `AGGR_INIT_EXPR' will only appear as a full-expression, or as the
   8223      second operand of a `TARGET_EXPR'.  `AGGR_INIT_EXPR's have a
   8224      representation similar to that of `CALL_EXPR's.  You can use the
   8225      `AGGR_INIT_EXPR_FN' and `AGGR_INIT_EXPR_ARG' macros to access the
   8226      function to call and the arguments to pass.
   8227 
   8228      If `AGGR_INIT_VIA_CTOR_P' holds of the `AGGR_INIT_EXPR', then the
   8229      initialization is via a constructor call.  The address of the
   8230      `AGGR_INIT_EXPR_SLOT' operand, which is always a `VAR_DECL', is
   8231      taken, and this value replaces the first argument in the argument
   8232      list.
   8233 
   8234      In either case, the expression is void.
   8235 
   8236 `VA_ARG_EXPR'
   8237      This node is used to implement support for the C/C++ variable
   8238      argument-list mechanism.  It represents expressions like `va_arg
   8239      (ap, type)'.  Its `TREE_TYPE' yields the tree representation for
   8240      `type' and its sole argument yields the representation for `ap'.
   8241 
   8242 `CHANGE_DYNAMIC_TYPE_EXPR'
   8243      Indicates the special aliasing required by C++ placement new.  It
   8244      has two operands: a type and a location.  It means that the
   8245      dynamic type of the location is changing to be the specified type.
   8246      The alias analysis code takes this into account when doing type
   8247      based alias analysis.
   8248 
   8249 `OMP_PARALLEL'
   8250      Represents `#pragma omp parallel [clause1 ... clauseN]'. It has
   8251      four operands:
   8252 
   8253      Operand `OMP_PARALLEL_BODY' is valid while in GENERIC and High
   8254      GIMPLE forms.  It contains the body of code to be executed by all
   8255      the threads.  During GIMPLE lowering, this operand becomes `NULL'
   8256      and the body is emitted linearly after `OMP_PARALLEL'.
   8257 
   8258      Operand `OMP_PARALLEL_CLAUSES' is the list of clauses associated
   8259      with the directive.
   8260 
   8261      Operand `OMP_PARALLEL_FN' is created by `pass_lower_omp', it
   8262      contains the `FUNCTION_DECL' for the function that will contain
   8263      the body of the parallel region.
   8264 
   8265      Operand `OMP_PARALLEL_DATA_ARG' is also created by
   8266      `pass_lower_omp'. If there are shared variables to be communicated
   8267      to the children threads, this operand will contain the `VAR_DECL'
   8268      that contains all the shared values and variables.
   8269 
   8270 `OMP_FOR'
   8271      Represents `#pragma omp for [clause1 ... clauseN]'.  It has 5
   8272      operands:
   8273 
   8274      Operand `OMP_FOR_BODY' contains the loop body.
   8275 
   8276      Operand `OMP_FOR_CLAUSES' is the list of clauses associated with
   8277      the directive.
   8278 
   8279      Operand `OMP_FOR_INIT' is the loop initialization code of the form
   8280      `VAR = N1'.
   8281 
   8282      Operand `OMP_FOR_COND' is the loop conditional expression of the
   8283      form `VAR {<,>,<=,>=} N2'.
   8284 
   8285      Operand `OMP_FOR_INCR' is the loop index increment of the form
   8286      `VAR {+=,-=} INCR'.
   8287 
   8288      Operand `OMP_FOR_PRE_BODY' contains side-effect code from operands
   8289      `OMP_FOR_INIT', `OMP_FOR_COND' and `OMP_FOR_INC'.  These
   8290      side-effects are part of the `OMP_FOR' block but must be evaluated
   8291      before the start of loop body.
   8292 
   8293      The loop index variable `VAR' must be a signed integer variable,
   8294      which is implicitly private to each thread.  Bounds `N1' and `N2'
   8295      and the increment expression `INCR' are required to be loop
   8296      invariant integer expressions that are evaluated without any
   8297      synchronization. The evaluation order, frequency of evaluation and
   8298      side-effects are unspecified by the standard.
   8299 
   8300 `OMP_SECTIONS'
   8301      Represents `#pragma omp sections [clause1 ... clauseN]'.
   8302 
   8303      Operand `OMP_SECTIONS_BODY' contains the sections body, which in
   8304      turn contains a set of `OMP_SECTION' nodes for each of the
   8305      concurrent sections delimited by `#pragma omp section'.
   8306 
   8307      Operand `OMP_SECTIONS_CLAUSES' is the list of clauses associated
   8308      with the directive.
   8309 
   8310 `OMP_SECTION'
   8311      Section delimiter for `OMP_SECTIONS'.
   8312 
   8313 `OMP_SINGLE'
   8314      Represents `#pragma omp single'.
   8315 
   8316      Operand `OMP_SINGLE_BODY' contains the body of code to be executed
   8317      by a single thread.
   8318 
   8319      Operand `OMP_SINGLE_CLAUSES' is the list of clauses associated
   8320      with the directive.
   8321 
   8322 `OMP_MASTER'
   8323      Represents `#pragma omp master'.
   8324 
   8325      Operand `OMP_MASTER_BODY' contains the body of code to be executed
   8326      by the master thread.
   8327 
   8328 `OMP_ORDERED'
   8329      Represents `#pragma omp ordered'.
   8330 
   8331      Operand `OMP_ORDERED_BODY' contains the body of code to be
   8332      executed in the sequential order dictated by the loop index
   8333      variable.
   8334 
   8335 `OMP_CRITICAL'
   8336      Represents `#pragma omp critical [name]'.
   8337 
   8338      Operand `OMP_CRITICAL_BODY' is the critical section.
   8339 
   8340      Operand `OMP_CRITICAL_NAME' is an optional identifier to label the
   8341      critical section.
   8342 
   8343 `OMP_RETURN'
   8344      This does not represent any OpenMP directive, it is an artificial
   8345      marker to indicate the end of the body of an OpenMP. It is used by
   8346      the flow graph (`tree-cfg.c') and OpenMP region building code
   8347      (`omp-low.c').
   8348 
   8349 `OMP_CONTINUE'
   8350      Similarly, this instruction does not represent an OpenMP
   8351      directive, it is used by `OMP_FOR' and `OMP_SECTIONS' to mark the
   8352      place where the code needs to loop to the next iteration (in the
   8353      case of `OMP_FOR') or the next section (in the case of
   8354      `OMP_SECTIONS').
   8355 
   8356      In some cases, `OMP_CONTINUE' is placed right before `OMP_RETURN'.
   8357      But if there are cleanups that need to occur right after the
   8358      looping body, it will be emitted between `OMP_CONTINUE' and
   8359      `OMP_RETURN'.
   8360 
   8361 `OMP_ATOMIC'
   8362      Represents `#pragma omp atomic'.
   8363 
   8364      Operand 0 is the address at which the atomic operation is to be
   8365      performed.
   8366 
   8367      Operand 1 is the expression to evaluate.  The gimplifier tries
   8368      three alternative code generation strategies.  Whenever possible,
   8369      an atomic update built-in is used.  If that fails, a
   8370      compare-and-swap loop is attempted.  If that also fails, a regular
   8371      critical section around the expression is used.
   8372 
   8373 `OMP_CLAUSE'
   8374      Represents clauses associated with one of the `OMP_' directives.
   8375      Clauses are represented by separate sub-codes defined in `tree.h'.
   8376      Clauses codes can be one of: `OMP_CLAUSE_PRIVATE',
   8377      `OMP_CLAUSE_SHARED', `OMP_CLAUSE_FIRSTPRIVATE',
   8378      `OMP_CLAUSE_LASTPRIVATE', `OMP_CLAUSE_COPYIN',
   8379      `OMP_CLAUSE_COPYPRIVATE', `OMP_CLAUSE_IF',
   8380      `OMP_CLAUSE_NUM_THREADS', `OMP_CLAUSE_SCHEDULE',
   8381      `OMP_CLAUSE_NOWAIT', `OMP_CLAUSE_ORDERED', `OMP_CLAUSE_DEFAULT',
   8382      and `OMP_CLAUSE_REDUCTION'.  Each code represents the
   8383      corresponding OpenMP clause.
   8384 
   8385      Clauses associated with the same directive are chained together
   8386      via `OMP_CLAUSE_CHAIN'. Those clauses that accept a list of
   8387      variables are restricted to exactly one, accessed with
   8388      `OMP_CLAUSE_VAR'.  Therefore, multiple variables under the same
   8389      clause `C' need to be represented as multiple `C' clauses chained
   8390      together.  This facilitates adding new clauses during compilation.
   8391 
   8392 `VEC_LSHIFT_EXPR'
   8393 
   8394 `VEC_RSHIFT_EXPR'
   8395      These nodes represent whole vector left and right shifts,
   8396      respectively.  The first operand is the vector to shift; it will
   8397      always be of vector type.  The second operand is an expression for
   8398      the number of bits by which to shift.  Note that the result is
   8399      undefined if the second operand is larger than or equal to the
   8400      first operand's type size.
   8401 
   8402 `VEC_WIDEN_MULT_HI_EXPR'
   8403 
   8404 `VEC_WIDEN_MULT_LO_EXPR'
   8405      These nodes represent widening vector multiplication of the high
   8406      and low parts of the two input vectors, respectively.  Their
   8407      operands are vectors that contain the same number of elements
   8408      (`N') of the same integral type.  The result is a vector that
   8409      contains half as many elements, of an integral type whose size is
   8410      twice as wide.  In the case of `VEC_WIDEN_MULT_HI_EXPR' the high
   8411      `N/2' elements of the two vector are multiplied to produce the
   8412      vector of `N/2' products. In the case of `VEC_WIDEN_MULT_LO_EXPR'
   8413      the low `N/2' elements of the two vector are multiplied to produce
   8414      the vector of `N/2' products.
   8415 
   8416 `VEC_UNPACK_HI_EXPR'
   8417 
   8418 `VEC_UNPACK_LO_EXPR'
   8419      These nodes represent unpacking of the high and low parts of the
   8420      input vector, respectively.  The single operand is a vector that
   8421      contains `N' elements of the same integral or floating point type.
   8422      The result is a vector that contains half as many elements, of an
   8423      integral or floating point type whose size is twice as wide.  In
   8424      the case of `VEC_UNPACK_HI_EXPR' the high `N/2' elements of the
   8425      vector are extracted and widened (promoted).  In the case of
   8426      `VEC_UNPACK_LO_EXPR' the low `N/2' elements of the vector are
   8427      extracted and widened (promoted).
   8428 
   8429 `VEC_UNPACK_FLOAT_HI_EXPR'
   8430 
   8431 `VEC_UNPACK_FLOAT_LO_EXPR'
   8432      These nodes represent unpacking of the high and low parts of the
   8433      input vector, where the values are converted from fixed point to
   8434      floating point.  The single operand is a vector that contains `N'
   8435      elements of the same integral type.  The result is a vector that
   8436      contains half as many elements of a floating point type whose size
   8437      is twice as wide.  In the case of `VEC_UNPACK_HI_EXPR' the high
   8438      `N/2' elements of the vector are extracted, converted and widened.
   8439      In the case of `VEC_UNPACK_LO_EXPR' the low `N/2' elements of the
   8440      vector are extracted, converted and widened.
   8441 
   8442 `VEC_PACK_TRUNC_EXPR'
   8443      This node represents packing of truncated elements of the two
   8444      input vectors into the output vector.  Input operands are vectors
   8445      that contain the same number of elements of the same integral or
   8446      floating point type.  The result is a vector that contains twice
   8447      as many elements of an integral or floating point type whose size
   8448      is half as wide. The elements of the two vectors are demoted and
   8449      merged (concatenated) to form the output vector.
   8450 
   8451 `VEC_PACK_SAT_EXPR'
   8452      This node represents packing of elements of the two input vectors
   8453      into the output vector using saturation.  Input operands are
   8454      vectors that contain the same number of elements of the same
   8455      integral type.  The result is a vector that contains twice as many
   8456      elements of an integral type whose size is half as wide.  The
   8457      elements of the two vectors are demoted and merged (concatenated)
   8458      to form the output vector.
   8459 
   8460 `VEC_PACK_FIX_TRUNC_EXPR'
   8461      This node represents packing of elements of the two input vectors
   8462      into the output vector, where the values are converted from
   8463      floating point to fixed point.  Input operands are vectors that
   8464      contain the same number of elements of a floating point type.  The
   8465      result is a vector that contains twice as many elements of an
   8466      integral type whose size is half as wide.  The elements of the two
   8467      vectors are merged (concatenated) to form the output vector.
   8468 
   8469 `VEC_EXTRACT_EVEN_EXPR'
   8470 
   8471 `VEC_EXTRACT_ODD_EXPR'
   8472      These nodes represent extracting of the even/odd elements of the
   8473      two input vectors, respectively. Their operands and result are
   8474      vectors that contain the same number of elements of the same type.
   8475 
   8476 `VEC_INTERLEAVE_HIGH_EXPR'
   8477 
   8478 `VEC_INTERLEAVE_LOW_EXPR'
   8479      These nodes represent merging and interleaving of the high/low
   8480      elements of the two input vectors, respectively. The operands and
   8481      the result are vectors that contain the same number of elements
   8482      (`N') of the same type.  In the case of
   8483      `VEC_INTERLEAVE_HIGH_EXPR', the high `N/2' elements of the first
   8484      input vector are interleaved with the high `N/2' elements of the
   8485      second input vector. In the case of `VEC_INTERLEAVE_LOW_EXPR', the
   8486      low `N/2' elements of the first input vector are interleaved with
   8487      the low `N/2' elements of the second input vector.
   8488 
   8489 
   8490 
   8491 File: gccint.info,  Node: Tree SSA,  Next: Loop Analysis and Representation,  Prev: Control Flow,  Up: Top
   8492 
   8493 10 Analysis and Optimization of GIMPLE Trees
   8494 ********************************************
   8495 
   8496 GCC uses three main intermediate languages to represent the program
   8497 during compilation: GENERIC, GIMPLE and RTL.  GENERIC is a
   8498 language-independent representation generated by each front end.  It is
   8499 used to serve as an interface between the parser and optimizer.
   8500 GENERIC is a common representation that is able to represent programs
   8501 written in all the languages supported by GCC.
   8502 
   8503  GIMPLE and RTL are used to optimize the program.  GIMPLE is used for
   8504 target and language independent optimizations (e.g., inlining, constant
   8505 propagation, tail call elimination, redundancy elimination, etc).  Much
   8506 like GENERIC, GIMPLE is a language independent, tree based
   8507 representation.  However, it differs from GENERIC in that the GIMPLE
   8508 grammar is more restrictive: expressions contain no more than 3
   8509 operands (except function calls), it has no control flow structures and
   8510 expressions with side-effects are only allowed on the right hand side
   8511 of assignments.  See the chapter describing GENERIC and GIMPLE for more
   8512 details.
   8513 
   8514  This chapter describes the data structures and functions used in the
   8515 GIMPLE optimizers (also known as "tree optimizers" or "middle end").
   8516 In particular, it focuses on all the macros, data structures, functions
   8517 and programming constructs needed to implement optimization passes for
   8518 GIMPLE.
   8519 
   8520 * Menu:
   8521 
   8522 * GENERIC::		A high-level language-independent representation.
   8523 * GIMPLE::              A lower-level factored tree representation.
   8524 * Annotations::		Attributes for statements and variables.
   8525 * Statement Operands::	Variables referenced by GIMPLE statements.
   8526 * SSA::			Static Single Assignment representation.
   8527 * Alias analysis::	Representing aliased loads and stores.
   8528 
   8529 
   8530 File: gccint.info,  Node: GENERIC,  Next: GIMPLE,  Up: Tree SSA
   8531 
   8532 10.1 GENERIC
   8533 ============
   8534 
   8535 The purpose of GENERIC is simply to provide a language-independent way
   8536 of representing an entire function in trees.  To this end, it was
   8537 necessary to add a few new tree codes to the back end, but most
   8538 everything was already there.  If you can express it with the codes in
   8539 `gcc/tree.def', it's GENERIC.
   8540 
   8541  Early on, there was a great deal of debate about how to think about
   8542 statements in a tree IL.  In GENERIC, a statement is defined as any
   8543 expression whose value, if any, is ignored.  A statement will always
   8544 have `TREE_SIDE_EFFECTS' set (or it will be discarded), but a
   8545 non-statement expression may also have side effects.  A `CALL_EXPR',
   8546 for instance.
   8547 
   8548  It would be possible for some local optimizations to work on the
   8549 GENERIC form of a function; indeed, the adapted tree inliner works fine
   8550 on GENERIC, but the current compiler performs inlining after lowering
   8551 to GIMPLE (a restricted form described in the next section).  Indeed,
   8552 currently the frontends perform this lowering before handing off to
   8553 `tree_rest_of_compilation', but this seems inelegant.
   8554 
   8555  If necessary, a front end can use some language-dependent tree codes
   8556 in its GENERIC representation, so long as it provides a hook for
   8557 converting them to GIMPLE and doesn't expect them to work with any
   8558 (hypothetical) optimizers that run before the conversion to GIMPLE.
   8559 The intermediate representation used while parsing C and C++ looks very
   8560 little like GENERIC, but the C and C++ gimplifier hooks are perfectly
   8561 happy to take it as input and spit out GIMPLE.
   8562 
   8563 
   8564 File: gccint.info,  Node: GIMPLE,  Next: Annotations,  Prev: GENERIC,  Up: Tree SSA
   8565 
   8566 10.2 GIMPLE
   8567 ===========
   8568 
   8569 GIMPLE is a simplified subset of GENERIC for use in optimization.  The
   8570 particular subset chosen (and the name) was heavily influenced by the
   8571 SIMPLE IL used by the McCAT compiler project at McGill University,
   8572 though we have made some different choices.  For one thing, SIMPLE
   8573 doesn't support `goto'; a production compiler can't afford that kind of
   8574 restriction.
   8575 
   8576  GIMPLE retains much of the structure of the parse trees: lexical
   8577 scopes are represented as containers, rather than markers.  However,
   8578 expressions are broken down into a 3-address form, using temporary
   8579 variables to hold intermediate values.  Also, control structures are
   8580 lowered to gotos.
   8581 
   8582  In GIMPLE no container node is ever used for its value; if a
   8583 `COND_EXPR' or `BIND_EXPR' has a value, it is stored into a temporary
   8584 within the controlled blocks, and that temporary is used in place of
   8585 the container.
   8586 
   8587  The compiler pass which lowers GENERIC to GIMPLE is referred to as the
   8588 `gimplifier'.  The gimplifier works recursively, replacing complex
   8589 statements with sequences of simple statements.
   8590 
   8591 * Menu:
   8592 
   8593 * Interfaces::
   8594 * Temporaries::
   8595 * GIMPLE Expressions::
   8596 * Statements::
   8597 * GIMPLE Example::
   8598 * Rough GIMPLE Grammar::
   8599 
   8600 
   8601 File: gccint.info,  Node: Interfaces,  Next: Temporaries,  Up: GIMPLE
   8602 
   8603 10.2.1 Interfaces
   8604 -----------------
   8605 
   8606 The tree representation of a function is stored in `DECL_SAVED_TREE'.
   8607 It is lowered to GIMPLE by a call to `gimplify_function_tree'.
   8608 
   8609  If a front end wants to include language-specific tree codes in the
   8610 tree representation which it provides to the back end, it must provide a
   8611 definition of `LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the
   8612 front end trees to GIMPLE.  Usually such a hook will involve much of
   8613 the same code for expanding front end trees to RTL.  This function can
   8614 return fully lowered GIMPLE, or it can return GENERIC trees and let the
   8615 main gimplifier lower them the rest of the way; this is often simpler.
   8616 GIMPLE that is not fully lowered is known as "high GIMPLE" and consists
   8617 of the IL before the pass `pass_lower_cf'.  High GIMPLE still contains
   8618 lexical scopes and nested expressions, while low GIMPLE exposes all of
   8619 the implicit jumps for control expressions like `COND_EXPR'.
   8620 
   8621  The C and C++ front ends currently convert directly from front end
   8622 trees to GIMPLE, and hand that off to the back end rather than first
   8623 converting to GENERIC.  Their gimplifier hooks know about all the
   8624 `_STMT' nodes and how to convert them to GENERIC forms.  There was some
   8625 work done on a genericization pass which would run first, but the
   8626 existence of `STMT_EXPR' meant that in order to convert all of the C
   8627 statements into GENERIC equivalents would involve walking the entire
   8628 tree anyway, so it was simpler to lower all the way.  This might change
   8629 in the future if someone writes an optimization pass which would work
   8630 better with higher-level trees, but currently the optimizers all expect
   8631 GIMPLE.
   8632 
   8633  A front end which wants to use the tree optimizers (and already has
   8634 some sort of whole-function tree representation) only needs to provide
   8635 a definition of `LANG_HOOKS_GIMPLIFY_EXPR', call
   8636 `gimplify_function_tree' to lower to GIMPLE, and then hand off to
   8637 `tree_rest_of_compilation' to compile and output the function.
   8638 
   8639  You can tell the compiler to dump a C-like representation of the GIMPLE
   8640 form with the flag `-fdump-tree-gimple'.
   8641 
   8642 
   8643 File: gccint.info,  Node: Temporaries,  Next: GIMPLE Expressions,  Prev: Interfaces,  Up: GIMPLE
   8644 
   8645 10.2.2 Temporaries
   8646 ------------------
   8647 
   8648 When gimplification encounters a subexpression which is too complex, it
   8649 creates a new temporary variable to hold the value of the subexpression,
   8650 and adds a new statement to initialize it before the current statement.
   8651 These special temporaries are known as `expression temporaries', and are
   8652 allocated using `get_formal_tmp_var'.  The compiler tries to always
   8653 evaluate identical expressions into the same temporary, to simplify
   8654 elimination of redundant calculations.
   8655 
   8656  We can only use expression temporaries when we know that it will not be
   8657 reevaluated before its value is used, and that it will not be otherwise
   8658 modified(1).  Other temporaries can be allocated using
   8659 `get_initialized_tmp_var' or `create_tmp_var'.
   8660 
   8661  Currently, an expression like `a = b + 5' is not reduced any further.
   8662 We tried converting it to something like
   8663        T1 = b + 5;
   8664        a = T1;
   8665  but this bloated the representation for minimal benefit.  However, a
   8666 variable which must live in memory cannot appear in an expression; its
   8667 value is explicitly loaded into a temporary first.  Similarly, storing
   8668 the value of an expression to a memory variable goes through a
   8669 temporary.
   8670 
   8671  ---------- Footnotes ----------
   8672 
   8673  (1) These restrictions are derived from those in Morgan 4.8.
   8674 
   8675 
   8676 File: gccint.info,  Node: GIMPLE Expressions,  Next: Statements,  Prev: Temporaries,  Up: GIMPLE
   8677 
   8678 10.2.3 Expressions
   8679 ------------------
   8680 
   8681 In general, expressions in GIMPLE consist of an operation and the
   8682 appropriate number of simple operands; these operands must either be a
   8683 GIMPLE rvalue (`is_gimple_val'), i.e. a constant or a register
   8684 variable.  More complex operands are factored out into temporaries, so
   8685 that
   8686        a = b + c + d
   8687  becomes
   8688        T1 = b + c;
   8689        a = T1 + d;
   8690 
   8691  The same rule holds for arguments to a `CALL_EXPR'.
   8692 
   8693  The target of an assignment is usually a variable, but can also be an
   8694 `INDIRECT_REF' or a compound lvalue as described below.
   8695 
   8696 * Menu:
   8697 
   8698 * Compound Expressions::
   8699 * Compound Lvalues::
   8700 * Conditional Expressions::
   8701 * Logical Operators::
   8702 
   8703 
   8704 File: gccint.info,  Node: Compound Expressions,  Next: Compound Lvalues,  Up: GIMPLE Expressions
   8705 
   8706 10.2.3.1 Compound Expressions
   8707 .............................
   8708 
   8709 The left-hand side of a C comma expression is simply moved into a
   8710 separate statement.
   8711 
   8712 
   8713 File: gccint.info,  Node: Compound Lvalues,  Next: Conditional Expressions,  Prev: Compound Expressions,  Up: GIMPLE Expressions
   8714 
   8715 10.2.3.2 Compound Lvalues
   8716 .........................
   8717 
   8718 Currently compound lvalues involving array and structure field
   8719 references are not broken down; an expression like `a.b[2] = 42' is not
   8720 reduced any further (though complex array subscripts are).  This
   8721 restriction is a workaround for limitations in later optimizers; if we
   8722 were to convert this to
   8723 
   8724        T1 = &a.b;
   8725        T1[2] = 42;
   8726 
   8727  alias analysis would not remember that the reference to `T1[2]' came
   8728 by way of `a.b', so it would think that the assignment could alias
   8729 another member of `a'; this broke `struct-alias-1.c'.  Future optimizer
   8730 improvements may make this limitation unnecessary.
   8731 
   8732 
   8733 File: gccint.info,  Node: Conditional Expressions,  Next: Logical Operators,  Prev: Compound Lvalues,  Up: GIMPLE Expressions
   8734 
   8735 10.2.3.3 Conditional Expressions
   8736 ................................
   8737 
   8738 A C `?:' expression is converted into an `if' statement with each
   8739 branch assigning to the same temporary.  So,
   8740 
   8741        a = b ? c : d;
   8742  becomes
   8743        if (b)
   8744          T1 = c;
   8745        else
   8746          T1 = d;
   8747        a = T1;
   8748 
   8749  Tree level if-conversion pass re-introduces `?:' expression, if
   8750 appropriate.  It is used to vectorize loops with conditions using
   8751 vector conditional operations.
   8752 
   8753  Note that in GIMPLE, `if' statements are also represented using
   8754 `COND_EXPR', as described below.
   8755 
   8756 
   8757 File: gccint.info,  Node: Logical Operators,  Prev: Conditional Expressions,  Up: GIMPLE Expressions
   8758 
   8759 10.2.3.4 Logical Operators
   8760 ..........................
   8761 
   8762 Except when they appear in the condition operand of a `COND_EXPR',
   8763 logical `and' and `or' operators are simplified as follows: `a = b &&
   8764 c' becomes
   8765 
   8766        T1 = (bool)b;
   8767        if (T1)
   8768          T1 = (bool)c;
   8769        a = T1;
   8770 
   8771  Note that `T1' in this example cannot be an expression temporary,
   8772 because it has two different assignments.
   8773 
   8774 
   8775 File: gccint.info,  Node: Statements,  Next: GIMPLE Example,  Prev: GIMPLE Expressions,  Up: GIMPLE
   8776 
   8777 10.2.4 Statements
   8778 -----------------
   8779 
   8780 Most statements will be assignment statements, represented by
   8781 `MODIFY_EXPR'.  A `CALL_EXPR' whose value is ignored can also be a
   8782 statement.  No other C expressions can appear at statement level; a
   8783 reference to a volatile object is converted into a `MODIFY_EXPR'.  In
   8784 GIMPLE form, type of `MODIFY_EXPR' is not meaningful.  Instead, use type
   8785 of LHS or RHS.
   8786 
   8787  There are also several varieties of complex statements.
   8788 
   8789 * Menu:
   8790 
   8791 * Blocks::
   8792 * Statement Sequences::
   8793 * Empty Statements::
   8794 * Loops::
   8795 * Selection Statements::
   8796 * Jumps::
   8797 * Cleanups::
   8798 * GIMPLE Exception Handling::
   8799 
   8800 
   8801 File: gccint.info,  Node: Blocks,  Next: Statement Sequences,  Up: Statements
   8802 
   8803 10.2.4.1 Blocks
   8804 ...............
   8805 
   8806 Block scopes and the variables they declare in GENERIC and GIMPLE are
   8807 expressed using the `BIND_EXPR' code, which in previous versions of GCC
   8808 was primarily used for the C statement-expression extension.
   8809 
   8810  Variables in a block are collected into `BIND_EXPR_VARS' in
   8811 declaration order.  Any runtime initialization is moved out of
   8812 `DECL_INITIAL' and into a statement in the controlled block.  When
   8813 gimplifying from C or C++, this initialization replaces the `DECL_STMT'.
   8814 
   8815  Variable-length arrays (VLAs) complicate this process, as their size
   8816 often refers to variables initialized earlier in the block.  To handle
   8817 this, we currently split the block at that point, and move the VLA into
   8818 a new, inner `BIND_EXPR'.  This strategy may change in the future.
   8819 
   8820  `DECL_SAVED_TREE' for a GIMPLE function will always be a `BIND_EXPR'
   8821 which contains declarations for the temporary variables used in the
   8822 function.
   8823 
   8824  A C++ program will usually contain more `BIND_EXPR's than there are
   8825 syntactic blocks in the source code, since several C++ constructs have
   8826 implicit scopes associated with them.  On the other hand, although the
   8827 C++ front end uses pseudo-scopes to handle cleanups for objects with
   8828 destructors, these don't translate into the GIMPLE form; multiple
   8829 declarations at the same level use the same `BIND_EXPR'.
   8830 
   8831 
   8832 File: gccint.info,  Node: Statement Sequences,  Next: Empty Statements,  Prev: Blocks,  Up: Statements
   8833 
   8834 10.2.4.2 Statement Sequences
   8835 ............................
   8836 
   8837 Multiple statements at the same nesting level are collected into a
   8838 `STATEMENT_LIST'.  Statement lists are modified and traversed using the
   8839 interface in `tree-iterator.h'.
   8840 
   8841 
   8842 File: gccint.info,  Node: Empty Statements,  Next: Loops,  Prev: Statement Sequences,  Up: Statements
   8843 
   8844 10.2.4.3 Empty Statements
   8845 .........................
   8846 
   8847 Whenever possible, statements with no effect are discarded.  But if they
   8848 are nested within another construct which cannot be discarded for some
   8849 reason, they are instead replaced with an empty statement, generated by
   8850 `build_empty_stmt'.  Initially, all empty statements were shared, after
   8851 the pattern of the Java front end, but this caused a lot of trouble in
   8852 practice.
   8853 
   8854  An empty statement is represented as `(void)0'.
   8855 
   8856 
   8857 File: gccint.info,  Node: Loops,  Next: Selection Statements,  Prev: Empty Statements,  Up: Statements
   8858 
   8859 10.2.4.4 Loops
   8860 ..............
   8861 
   8862 At one time loops were expressed in GIMPLE using `LOOP_EXPR', but now
   8863 they are lowered to explicit gotos.
   8864 
   8865 
   8866 File: gccint.info,  Node: Selection Statements,  Next: Jumps,  Prev: Loops,  Up: Statements
   8867 
   8868 10.2.4.5 Selection Statements
   8869 .............................
   8870 
   8871 A simple selection statement, such as the C `if' statement, is
   8872 expressed in GIMPLE using a void `COND_EXPR'.  If only one branch is
   8873 used, the other is filled with an empty statement.
   8874 
   8875  Normally, the condition expression is reduced to a simple comparison.
   8876 If it is a shortcut (`&&' or `||') expression, however, we try to break
   8877 up the `if' into multiple `if's so that the implied shortcut is taken
   8878 directly, much like the transformation done by `do_jump' in the RTL
   8879 expander.
   8880 
   8881  A `SWITCH_EXPR' in GIMPLE contains the condition and a `TREE_VEC' of
   8882 `CASE_LABEL_EXPR's describing the case values and corresponding
   8883 `LABEL_DECL's to jump to.  The body of the `switch' is moved after the
   8884 `SWITCH_EXPR'.
   8885 
   8886 
   8887 File: gccint.info,  Node: Jumps,  Next: Cleanups,  Prev: Selection Statements,  Up: Statements
   8888 
   8889 10.2.4.6 Jumps
   8890 ..............
   8891 
   8892 Other jumps are expressed by either `GOTO_EXPR' or `RETURN_EXPR'.
   8893 
   8894  The operand of a `GOTO_EXPR' must be either a label or a variable
   8895 containing the address to jump to.
   8896 
   8897  The operand of a `RETURN_EXPR' is either `NULL_TREE', `RESULT_DECL',
   8898 or a `MODIFY_EXPR' which sets the return value.  It would be nice to
   8899 move the `MODIFY_EXPR' into a separate statement, but the special
   8900 return semantics in `expand_return' make that difficult.  It may still
   8901 happen in the future, perhaps by moving most of that logic into
   8902 `expand_assignment'.
   8903 
   8904 
   8905 File: gccint.info,  Node: Cleanups,  Next: GIMPLE Exception Handling,  Prev: Jumps,  Up: Statements
   8906 
   8907 10.2.4.7 Cleanups
   8908 .................
   8909 
   8910 Destructors for local C++ objects and similar dynamic cleanups are
   8911 represented in GIMPLE by a `TRY_FINALLY_EXPR'.  `TRY_FINALLY_EXPR' has
   8912 two operands, both of which are a sequence of statements to execute.
   8913 The first sequence is executed.  When it completes the second sequence
   8914 is executed.
   8915 
   8916  The first sequence may complete in the following ways:
   8917 
   8918   1. Execute the last statement in the sequence and fall off the end.
   8919 
   8920   2. Execute a goto statement (`GOTO_EXPR') to an ordinary label
   8921      outside the sequence.
   8922 
   8923   3. Execute a return statement (`RETURN_EXPR').
   8924 
   8925   4. Throw an exception.  This is currently not explicitly represented
   8926      in GIMPLE.
   8927 
   8928 
   8929  The second sequence is not executed if the first sequence completes by
   8930 calling `setjmp' or `exit' or any other function that does not return.
   8931 The second sequence is also not executed if the first sequence
   8932 completes via a non-local goto or a computed goto (in general the
   8933 compiler does not know whether such a goto statement exits the first
   8934 sequence or not, so we assume that it doesn't).
   8935 
   8936  After the second sequence is executed, if it completes normally by
   8937 falling off the end, execution continues wherever the first sequence
   8938 would have continued, by falling off the end, or doing a goto, etc.
   8939 
   8940  `TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs
   8941 to appear on every edge out of the controlled block; this reduces the
   8942 freedom to move code across these edges.  Therefore, the EH lowering
   8943 pass which runs before most of the optimization passes eliminates these
   8944 expressions by explicitly adding the cleanup to each edge.  Rethrowing
   8945 the exception is represented using `RESX_EXPR'.
   8946 
   8947 
   8948 File: gccint.info,  Node: GIMPLE Exception Handling,  Prev: Cleanups,  Up: Statements
   8949 
   8950 10.2.4.8 Exception Handling
   8951 ...........................
   8952 
   8953 Other exception handling constructs are represented using
   8954 `TRY_CATCH_EXPR'.  `TRY_CATCH_EXPR' has two operands.  The first
   8955 operand is a sequence of statements to execute.  If executing these
   8956 statements does not throw an exception, then the second operand is
   8957 ignored.  Otherwise, if an exception is thrown, then the second operand
   8958 of the `TRY_CATCH_EXPR' is checked.  The second operand may have the
   8959 following forms:
   8960 
   8961   1. A sequence of statements to execute.  When an exception occurs,
   8962      these statements are executed, and then the exception is rethrown.
   8963 
   8964   2. A sequence of `CATCH_EXPR' expressions.  Each `CATCH_EXPR' has a
   8965      list of applicable exception types and handler code.  If the
   8966      thrown exception matches one of the caught types, the associated
   8967      handler code is executed.  If the handler code falls off the
   8968      bottom, execution continues after the original `TRY_CATCH_EXPR'.
   8969 
   8970   3. An `EH_FILTER_EXPR' expression.  This has a list of permitted
   8971      exception types, and code to handle a match failure.  If the
   8972      thrown exception does not match one of the allowed types, the
   8973      associated match failure code is executed.  If the thrown exception
   8974      does match, it continues unwinding the stack looking for the next
   8975      handler.
   8976 
   8977 
   8978  Currently throwing an exception is not directly represented in GIMPLE,
   8979 since it is implemented by calling a function.  At some point in the
   8980 future we will want to add some way to express that the call will throw
   8981 an exception of a known type.
   8982 
   8983  Just before running the optimizers, the compiler lowers the high-level
   8984 EH constructs above into a set of `goto's, magic labels, and EH
   8985 regions.  Continuing to unwind at the end of a cleanup is represented
   8986 with a `RESX_EXPR'.
   8987 
   8988 
   8989 File: gccint.info,  Node: GIMPLE Example,  Next: Rough GIMPLE Grammar,  Prev: Statements,  Up: GIMPLE
   8990 
   8991 10.2.5 GIMPLE Example
   8992 ---------------------
   8993 
   8994      struct A { A(); ~A(); };
   8995 
   8996      int i;
   8997      int g();
   8998      void f()
   8999      {
   9000        A a;
   9001        int j = (--i, i ? 0 : 1);
   9002 
   9003        for (int x = 42; x > 0; --x)
   9004          {
   9005            i += g()*4 + 32;
   9006          }
   9007      }
   9008 
   9009  becomes
   9010 
   9011      void f()
   9012      {
   9013        int i.0;
   9014        int T.1;
   9015        int iftmp.2;
   9016        int T.3;
   9017        int T.4;
   9018        int T.5;
   9019        int T.6;
   9020 
   9021        {
   9022          struct A a;
   9023          int j;
   9024 
   9025          __comp_ctor (&a);
   9026          try
   9027            {
   9028              i.0 = i;
   9029              T.1 = i.0 - 1;
   9030              i = T.1;
   9031              i.0 = i;
   9032              if (i.0 == 0)
   9033                iftmp.2 = 1;
   9034              else
   9035                iftmp.2 = 0;
   9036              j = iftmp.2;
   9037              {
   9038                int x;
   9039 
   9040                x = 42;
   9041                goto test;
   9042                loop:;
   9043 
   9044                T.3 = g ();
   9045                T.4 = T.3 * 4;
   9046                i.0 = i;
   9047                T.5 = T.4 + i.0;
   9048                T.6 = T.5 + 32;
   9049                i = T.6;
   9050                x = x - 1;
   9051 
   9052                test:;
   9053                if (x > 0)
   9054                  goto loop;
   9055                else
   9056                  goto break_;
   9057                break_:;
   9058              }
   9059            }
   9060          finally
   9061            {
   9062              __comp_dtor (&a);
   9063            }
   9064        }
   9065      }
   9066 
   9067 
   9068 File: gccint.info,  Node: Rough GIMPLE Grammar,  Prev: GIMPLE Example,  Up: GIMPLE
   9069 
   9070 10.2.6 Rough GIMPLE Grammar
   9071 ---------------------------
   9072 
   9073         function     : FUNCTION_DECL
   9074                              DECL_SAVED_TREE -> compound-stmt
   9075 
   9076         compound-stmt: STATEMENT_LIST
   9077                              members -> stmt
   9078 
   9079         stmt         : block
   9080                      | if-stmt
   9081                      | switch-stmt
   9082                      | goto-stmt
   9083                      | return-stmt
   9084                      | resx-stmt
   9085                      | label-stmt
   9086                      | try-stmt
   9087                      | modify-stmt
   9088                      | call-stmt
   9089 
   9090         block        : BIND_EXPR
   9091                              BIND_EXPR_VARS -> chain of DECLs
   9092                              BIND_EXPR_BLOCK -> BLOCK
   9093                              BIND_EXPR_BODY -> compound-stmt
   9094 
   9095         if-stmt      : COND_EXPR
   9096                              op0 -> condition
   9097                              op1 -> compound-stmt
   9098                              op2 -> compound-stmt
   9099 
   9100         switch-stmt  : SWITCH_EXPR
   9101                              op0 -> val
   9102                              op1 -> NULL
   9103                              op2 -> TREE_VEC of CASE_LABEL_EXPRs
   9104                                  The CASE_LABEL_EXPRs are sorted by CASE_LOW,
   9105                                  and default is last.
   9106 
   9107         goto-stmt    : GOTO_EXPR
   9108                              op0 -> LABEL_DECL | val
   9109 
   9110         return-stmt  : RETURN_EXPR
   9111                              op0 -> return-value
   9112 
   9113         return-value : NULL
   9114                      | RESULT_DECL
   9115                      | MODIFY_EXPR
   9116                              op0 -> RESULT_DECL
   9117                              op1 -> lhs
   9118 
   9119         resx-stmt    : RESX_EXPR
   9120 
   9121         label-stmt   : LABEL_EXPR
   9122                              op0 -> LABEL_DECL
   9123 
   9124         try-stmt     : TRY_CATCH_EXPR
   9125                              op0 -> compound-stmt
   9126                              op1 -> handler
   9127                      | TRY_FINALLY_EXPR
   9128                              op0 -> compound-stmt
   9129                              op1 -> compound-stmt
   9130 
   9131         handler      : catch-seq
   9132                      | EH_FILTER_EXPR
   9133                      | compound-stmt
   9134 
   9135         catch-seq    : STATEMENT_LIST
   9136                              members -> CATCH_EXPR
   9137 
   9138         modify-stmt  : MODIFY_EXPR
   9139                              op0 -> lhs
   9140                              op1 -> rhs
   9141 
   9142         call-stmt    : CALL_EXPR
   9143                              op0 -> val | OBJ_TYPE_REF
   9144                              op1 -> call-arg-list
   9145 
   9146         call-arg-list: TREE_LIST
   9147                              members -> lhs | CONST
   9148 
   9149         addr-expr-arg: ID
   9150                      | compref
   9151 
   9152         addressable  : addr-expr-arg
   9153                      | indirectref
   9154 
   9155         with-size-arg: addressable
   9156                      | call-stmt
   9157 
   9158         indirectref  : INDIRECT_REF
   9159                              op0 -> val
   9160 
   9161         lhs          : addressable
   9162                      | bitfieldref
   9163                      | WITH_SIZE_EXPR
   9164                              op0 -> with-size-arg
   9165                              op1 -> val
   9166 
   9167         min-lval     : ID
   9168                      | indirectref
   9169 
   9170         bitfieldref  : BIT_FIELD_REF
   9171                              op0 -> inner-compref
   9172                              op1 -> CONST
   9173                              op2 -> val
   9174 
   9175         compref      : inner-compref
   9176                      | TARGET_MEM_REF
   9177                              op0 -> ID
   9178                              op1 -> val
   9179                              op2 -> val
   9180                              op3 -> CONST
   9181                              op4 -> CONST
   9182                      | REALPART_EXPR
   9183                              op0 -> inner-compref
   9184                      | IMAGPART_EXPR
   9185                              op0 -> inner-compref
   9186 
   9187         inner-compref: min-lval
   9188                      | COMPONENT_REF
   9189                              op0 -> inner-compref
   9190                              op1 -> FIELD_DECL
   9191                              op2 -> val
   9192                      | ARRAY_REF
   9193                              op0 -> inner-compref
   9194                              op1 -> val
   9195                              op2 -> val
   9196                              op3 -> val
   9197                      | ARRAY_RANGE_REF
   9198                              op0 -> inner-compref
   9199                              op1 -> val
   9200                              op2 -> val
   9201                              op3 -> val
   9202                      | VIEW_CONVERT_EXPR
   9203                              op0 -> inner-compref
   9204 
   9205         condition    : val
   9206                      | RELOP
   9207                              op0 -> val
   9208                              op1 -> val
   9209 
   9210         val          : ID
   9211                      | invariant ADDR_EXPR
   9212                              op0 -> addr-expr-arg
   9213                      | CONST
   9214 
   9215         rhs          : lhs
   9216                      | CONST
   9217                      | call-stmt
   9218                      | ADDR_EXPR
   9219                              op0 -> addr-expr-arg
   9220                      | UNOP
   9221                              op0 -> val
   9222                      | BINOP
   9223                              op0 -> val
   9224                              op1 -> val
   9225                      | RELOP
   9226                              op0 -> val
   9227                              op1 -> val
   9228      		| COND_EXPR
   9229      			op0 -> condition
   9230      			op1 -> val
   9231      			op2 -> val
   9232 
   9233 
   9234 File: gccint.info,  Node: Annotations,  Next: Statement Operands,  Prev: GIMPLE,  Up: Tree SSA
   9235 
   9236 10.3 Annotations
   9237 ================
   9238 
   9239 The optimizers need to associate attributes with statements and
   9240 variables during the optimization process.  For instance, we need to
   9241 know what basic block a statement belongs to or whether a variable has
   9242 aliases.  All these attributes are stored in data structures called
   9243 annotations which are then linked to the field `ann' in `struct
   9244 tree_common'.
   9245 
   9246  Presently, we define annotations for statements (`stmt_ann_t'),
   9247 variables (`var_ann_t') and SSA names (`ssa_name_ann_t').  Annotations
   9248 are defined and documented in `tree-flow.h'.
   9249 
   9250 
   9251 File: gccint.info,  Node: Statement Operands,  Next: SSA,  Prev: Annotations,  Up: Tree SSA
   9252 
   9253 10.4 Statement Operands
   9254 =======================
   9255 
   9256 Almost every GIMPLE statement will contain a reference to a variable or
   9257 memory location.  Since statements come in different shapes and sizes,
   9258 their operands are going to be located at various spots inside the
   9259 statement's tree.  To facilitate access to the statement's operands,
   9260 they are organized into lists associated inside each statement's
   9261 annotation.  Each element in an operand list is a pointer to a
   9262 `VAR_DECL', `PARM_DECL' or `SSA_NAME' tree node.  This provides a very
   9263 convenient way of examining and replacing operands.
   9264 
   9265  Data flow analysis and optimization is done on all tree nodes
   9266 representing variables.  Any node for which `SSA_VAR_P' returns nonzero
   9267 is considered when scanning statement operands.  However, not all
   9268 `SSA_VAR_P' variables are processed in the same way.  For the purposes
   9269 of optimization, we need to distinguish between references to local
   9270 scalar variables and references to globals, statics, structures,
   9271 arrays, aliased variables, etc.  The reason is simple, the compiler can
   9272 gather complete data flow information for a local scalar.  On the other
   9273 hand, a global variable may be modified by a function call, it may not
   9274 be possible to keep track of all the elements of an array or the fields
   9275 of a structure, etc.
   9276 
   9277  The operand scanner gathers two kinds of operands: "real" and
   9278 "virtual".  An operand for which `is_gimple_reg' returns true is
   9279 considered real, otherwise it is a virtual operand.  We also
   9280 distinguish between uses and definitions.  An operand is used if its
   9281 value is loaded by the statement (e.g., the operand at the RHS of an
   9282 assignment).  If the statement assigns a new value to the operand, the
   9283 operand is considered a definition (e.g., the operand at the LHS of an
   9284 assignment).
   9285 
   9286  Virtual and real operands also have very different data flow
   9287 properties.  Real operands are unambiguous references to the full
   9288 object that they represent.  For instance, given
   9289 
   9290      {
   9291        int a, b;
   9292        a = b
   9293      }
   9294 
   9295  Since `a' and `b' are non-aliased locals, the statement `a = b' will
   9296 have one real definition and one real use because variable `b' is
   9297 completely modified with the contents of variable `a'.  Real definition
   9298 are also known as "killing definitions".  Similarly, the use of `a'
   9299 reads all its bits.
   9300 
   9301  In contrast, virtual operands are used with variables that can have a
   9302 partial or ambiguous reference.  This includes structures, arrays,
   9303 globals, and aliased variables.  In these cases, we have two types of
   9304 definitions.  For globals, structures, and arrays, we can determine from
   9305 a statement whether a variable of these types has a killing definition.
   9306 If the variable does, then the statement is marked as having a "must
   9307 definition" of that variable.  However, if a statement is only defining
   9308 a part of the variable (i.e. a field in a structure), or if we know
   9309 that a statement might define the variable but we cannot say for sure,
   9310 then we mark that statement as having a "may definition".  For
   9311 instance, given
   9312 
   9313      {
   9314        int a, b, *p;
   9315 
   9316        if (...)
   9317          p = &a;
   9318        else
   9319          p = &b;
   9320        *p = 5;
   9321        return *p;
   9322      }
   9323 
   9324  The assignment `*p = 5' may be a definition of `a' or `b'.  If we
   9325 cannot determine statically where `p' is pointing to at the time of the
   9326 store operation, we create virtual definitions to mark that statement
   9327 as a potential definition site for `a' and `b'.  Memory loads are
   9328 similarly marked with virtual use operands.  Virtual operands are shown
   9329 in tree dumps right before the statement that contains them.  To
   9330 request a tree dump with virtual operands, use the `-vops' option to
   9331 `-fdump-tree':
   9332 
   9333      {
   9334        int a, b, *p;
   9335 
   9336        if (...)
   9337          p = &a;
   9338        else
   9339          p = &b;
   9340        # a = VDEF <a>
   9341        # b = VDEF <b>
   9342        *p = 5;
   9343 
   9344        # VUSE <a>
   9345        # VUSE <b>
   9346        return *p;
   9347      }
   9348 
   9349  Notice that `VDEF' operands have two copies of the referenced
   9350 variable.  This indicates that this is not a killing definition of that
   9351 variable.  In this case we refer to it as a "may definition" or
   9352 "aliased store".  The presence of the second copy of the variable in
   9353 the `VDEF' operand will become important when the function is converted
   9354 into SSA form.  This will be used to link all the non-killing
   9355 definitions to prevent optimizations from making incorrect assumptions
   9356 about them.
   9357 
   9358  Operands are updated as soon as the statement is finished via a call
   9359 to `update_stmt'.  If statement elements are changed via `SET_USE' or
   9360 `SET_DEF', then no further action is required (i.e., those macros take
   9361 care of updating the statement).  If changes are made by manipulating
   9362 the statement's tree directly, then a call must be made to
   9363 `update_stmt' when complete.  Calling one of the `bsi_insert' routines
   9364 or `bsi_replace' performs an implicit call to `update_stmt'.
   9365 
   9366 10.4.1 Operand Iterators And Access Routines
   9367 --------------------------------------------
   9368 
   9369 Operands are collected by `tree-ssa-operands.c'.  They are stored
   9370 inside each statement's annotation and can be accessed through either
   9371 the operand iterators or an access routine.
   9372 
   9373  The following access routines are available for examining operands:
   9374 
   9375   1. `SINGLE_SSA_{USE,DEF,TREE}_OPERAND': These accessors will return
   9376      NULL unless there is exactly one operand matching the specified
   9377      flags.  If there is exactly one operand, the operand is returned
   9378      as either a `tree', `def_operand_p', or `use_operand_p'.
   9379 
   9380           tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags);
   9381           use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES);
   9382           def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS);
   9383 
   9384   2. `ZERO_SSA_OPERANDS': This macro returns true if there are no
   9385      operands matching the specified flags.
   9386 
   9387           if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS))
   9388             return;
   9389 
   9390   3. `NUM_SSA_OPERANDS': This macro Returns the number of operands
   9391      matching 'flags'.  This actually executes a loop to perform the
   9392      count, so only use this if it is really needed.
   9393 
   9394           int count = NUM_SSA_OPERANDS (stmt, flags)
   9395 
   9396  If you wish to iterate over some or all operands, use the
   9397 `FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND' iterator.  For example, to print
   9398 all the operands for a statement:
   9399 
   9400      void
   9401      print_ops (tree stmt)
   9402      {
   9403        ssa_op_iter;
   9404        tree var;
   9405 
   9406        FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS)
   9407          print_generic_expr (stderr, var, TDF_SLIM);
   9408      }
   9409 
   9410  How to choose the appropriate iterator:
   9411 
   9412   1. Determine whether you are need to see the operand pointers, or
   9413      just the     trees, and choose the appropriate macro:
   9414 
   9415           Need            Macro:
   9416           ----            -------
   9417           use_operand_p   FOR_EACH_SSA_USE_OPERAND
   9418           def_operand_p   FOR_EACH_SSA_DEF_OPERAND
   9419           tree            FOR_EACH_SSA_TREE_OPERAND
   9420 
   9421   2. You need to declare a variable of the type you are interested
   9422      in, and an ssa_op_iter structure which serves as the loop
   9423      controlling variable.
   9424 
   9425   3. Determine which operands you wish to use, and specify the flags of
   9426         those you are interested in.  They are documented in
   9427      `tree-ssa-operands.h':
   9428 
   9429           #define SSA_OP_USE              0x01    /* Real USE operands.  */
   9430           #define SSA_OP_DEF              0x02    /* Real DEF operands.  */
   9431           #define SSA_OP_VUSE             0x04    /* VUSE operands.  */
   9432           #define SSA_OP_VMAYUSE          0x08    /* USE portion of VDEFS.  */
   9433           #define SSA_OP_VDEF             0x10    /* DEF portion of VDEFS.  */
   9434 
   9435           /* These are commonly grouped operand flags.  */
   9436           #define SSA_OP_VIRTUAL_USES     (SSA_OP_VUSE | SSA_OP_VMAYUSE)
   9437           #define SSA_OP_VIRTUAL_DEFS     (SSA_OP_VDEF)
   9438           #define SSA_OP_ALL_USES         (SSA_OP_VIRTUAL_USES | SSA_OP_USE)
   9439           #define SSA_OP_ALL_DEFS         (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF)
   9440           #define SSA_OP_ALL_OPERANDS     (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS)
   9441 
   9442  So if you want to look at the use pointers for all the `USE' and
   9443 `VUSE' operands, you would do something like:
   9444 
   9445        use_operand_p use_p;
   9446        ssa_op_iter iter;
   9447 
   9448        FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE))
   9449          {
   9450            process_use_ptr (use_p);
   9451          }
   9452 
   9453  The `TREE' macro is basically the same as the `USE' and `DEF' macros,
   9454 only with the use or def dereferenced via `USE_FROM_PTR (use_p)' and
   9455 `DEF_FROM_PTR (def_p)'.  Since we aren't using operand pointers, use
   9456 and defs flags can be mixed.
   9457 
   9458        tree var;
   9459        ssa_op_iter iter;
   9460 
   9461        FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE)
   9462          {
   9463             print_generic_expr (stderr, var, TDF_SLIM);
   9464          }
   9465 
   9466  `VDEF's are broken into two flags, one for the `DEF' portion
   9467 (`SSA_OP_VDEF') and one for the USE portion (`SSA_OP_VMAYUSE').  If all
   9468 you want to look at are the `VDEF's together, there is a fourth
   9469 iterator macro for this, which returns both a def_operand_p and a
   9470 use_operand_p for each `VDEF' in the statement.  Note that you don't
   9471 need any flags for this one.
   9472 
   9473        use_operand_p use_p;
   9474        def_operand_p def_p;
   9475        ssa_op_iter iter;
   9476 
   9477        FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter)
   9478          {
   9479            my_code;
   9480          }
   9481 
   9482  There are many examples in the code as well, as well as the
   9483 documentation in `tree-ssa-operands.h'.
   9484 
   9485  There are also a couple of variants on the stmt iterators regarding PHI
   9486 nodes.
   9487 
   9488  `FOR_EACH_PHI_ARG' Works exactly like `FOR_EACH_SSA_USE_OPERAND',
   9489 except it works over `PHI' arguments instead of statement operands.
   9490 
   9491      /* Look at every virtual PHI use.  */
   9492      FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES)
   9493      {
   9494         my_code;
   9495      }
   9496 
   9497      /* Look at every real PHI use.  */
   9498      FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_USES)
   9499        my_code;
   9500 
   9501      /* Look at every every PHI use.  */
   9502      FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES)
   9503        my_code;
   9504 
   9505  `FOR_EACH_PHI_OR_STMT_{USE,DEF}' works exactly like
   9506 `FOR_EACH_SSA_{USE,DEF}_OPERAND', except it will function on either a
   9507 statement or a `PHI' node.  These should be used when it is appropriate
   9508 but they are not quite as efficient as the individual `FOR_EACH_PHI'
   9509 and `FOR_EACH_SSA' routines.
   9510 
   9511      FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags)
   9512        {
   9513           my_code;
   9514        }
   9515 
   9516      FOR_EACH_PHI_OR_STMT_DEF (def_operand_p, phi, iter, flags)
   9517        {
   9518           my_code;
   9519        }
   9520 
   9521 10.4.2 Immediate Uses
   9522 ---------------------
   9523 
   9524 Immediate use information is now always available.  Using the immediate
   9525 use iterators, you may examine every use of any `SSA_NAME'. For
   9526 instance, to change each use of `ssa_var' to `ssa_var2' and call
   9527 fold_stmt on each stmt after that is done:
   9528 
   9529        use_operand_p imm_use_p;
   9530        imm_use_iterator iterator;
   9531        tree ssa_var, stmt;
   9532 
   9533 
   9534        FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
   9535          {
   9536            FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
   9537              SET_USE (imm_use_p, ssa_var_2);
   9538            fold_stmt (stmt);
   9539          }
   9540 
   9541  There are 2 iterators which can be used. `FOR_EACH_IMM_USE_FAST' is
   9542 used when the immediate uses are not changed, i.e., you are looking at
   9543 the uses, but not setting them.
   9544 
   9545  If they do get changed, then care must be taken that things are not
   9546 changed under the iterators, so use the `FOR_EACH_IMM_USE_STMT' and
   9547 `FOR_EACH_IMM_USE_ON_STMT' iterators.  They attempt to preserve the
   9548 sanity of the use list by moving all the uses for a statement into a
   9549 controlled position, and then iterating over those uses.  Then the
   9550 optimization can manipulate the stmt when all the uses have been
   9551 processed.  This is a little slower than the FAST version since it adds
   9552 a placeholder element and must sort through the list a bit for each
   9553 statement.  This placeholder element must be also be removed if the
   9554 loop is terminated early.  The macro `BREAK_FROM_IMM_USE_SAFE' is
   9555 provided to do this :
   9556 
   9557        FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
   9558          {
   9559            if (stmt == last_stmt)
   9560              BREAK_FROM_SAFE_IMM_USE (iter);
   9561 
   9562            FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
   9563              SET_USE (imm_use_p, ssa_var_2);
   9564            fold_stmt (stmt);
   9565          }
   9566 
   9567  There are checks in `verify_ssa' which verify that the immediate use
   9568 list is up to date, as well as checking that an optimization didn't
   9569 break from the loop without using this macro.  It is safe to simply
   9570 'break'; from a `FOR_EACH_IMM_USE_FAST' traverse.
   9571 
   9572  Some useful functions and macros:
   9573   1. `has_zero_uses (ssa_var)' : Returns true if there are no uses of
   9574      `ssa_var'.
   9575 
   9576   2. `has_single_use (ssa_var)' : Returns true if there is only a
   9577      single use of `ssa_var'.
   9578 
   9579   3. `single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)' :
   9580      Returns true if there is only a single use of `ssa_var', and also
   9581      returns the use pointer and statement it occurs in in the second
   9582      and third parameters.
   9583 
   9584   4. `num_imm_uses (ssa_var)' : Returns the number of immediate uses of
   9585      `ssa_var'. It is better not to use this if possible since it simply
   9586      utilizes a loop to count the uses.
   9587 
   9588   5. `PHI_ARG_INDEX_FROM_USE (use_p)' : Given a use within a `PHI'
   9589      node, return the index number for the use.  An assert is triggered
   9590      if the use isn't located in a `PHI' node.
   9591 
   9592   6. `USE_STMT (use_p)' : Return the statement a use occurs in.
   9593 
   9594  Note that uses are not put into an immediate use list until their
   9595 statement is actually inserted into the instruction stream via a
   9596 `bsi_*' routine.
   9597 
   9598  It is also still possible to utilize lazy updating of statements, but
   9599 this should be used only when absolutely required.  Both alias analysis
   9600 and the dominator optimizations currently do this.
   9601 
   9602  When lazy updating is being used, the immediate use information is out
   9603 of date and cannot be used reliably.  Lazy updating is achieved by
   9604 simply marking statements modified via calls to `mark_stmt_modified'
   9605 instead of `update_stmt'.  When lazy updating is no longer required,
   9606 all the modified statements must have `update_stmt' called in order to
   9607 bring them up to date.  This must be done before the optimization is
   9608 finished, or `verify_ssa' will trigger an abort.
   9609 
   9610  This is done with a simple loop over the instruction stream:
   9611        block_stmt_iterator bsi;
   9612        basic_block bb;
   9613        FOR_EACH_BB (bb)
   9614          {
   9615            for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
   9616              update_stmt_if_modified (bsi_stmt (bsi));
   9617          }
   9618 
   9619 
   9620 File: gccint.info,  Node: SSA,  Next: Alias analysis,  Prev: Statement Operands,  Up: Tree SSA
   9621 
   9622 10.5 Static Single Assignment
   9623 =============================
   9624 
   9625 Most of the tree optimizers rely on the data flow information provided
   9626 by the Static Single Assignment (SSA) form.  We implement the SSA form
   9627 as described in `R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K.
   9628 Zadeck.  Efficiently Computing Static Single Assignment Form and the
   9629 Control Dependence Graph.  ACM Transactions on Programming Languages
   9630 and Systems, 13(4):451-490, October 1991'.
   9631 
   9632  The SSA form is based on the premise that program variables are
   9633 assigned in exactly one location in the program.  Multiple assignments
   9634 to the same variable create new versions of that variable.  Naturally,
   9635 actual programs are seldom in SSA form initially because variables tend
   9636 to be assigned multiple times.  The compiler modifies the program
   9637 representation so that every time a variable is assigned in the code, a
   9638 new version of the variable is created.  Different versions of the same
   9639 variable are distinguished by subscripting the variable name with its
   9640 version number.  Variables used in the right-hand side of expressions
   9641 are renamed so that their version number matches that of the most
   9642 recent assignment.
   9643 
   9644  We represent variable versions using `SSA_NAME' nodes.  The renaming
   9645 process in `tree-ssa.c' wraps every real and virtual operand with an
   9646 `SSA_NAME' node which contains the version number and the statement
   9647 that created the `SSA_NAME'.  Only definitions and virtual definitions
   9648 may create new `SSA_NAME' nodes.
   9649 
   9650  Sometimes, flow of control makes it impossible to determine the most
   9651 recent version of a variable.  In these cases, the compiler inserts an
   9652 artificial definition for that variable called "PHI function" or "PHI
   9653 node".  This new definition merges all the incoming versions of the
   9654 variable to create a new name for it.  For instance,
   9655 
   9656      if (...)
   9657        a_1 = 5;
   9658      else if (...)
   9659        a_2 = 2;
   9660      else
   9661        a_3 = 13;
   9662 
   9663      # a_4 = PHI <a_1, a_2, a_3>
   9664      return a_4;
   9665 
   9666  Since it is not possible to determine which of the three branches will
   9667 be taken at runtime, we don't know which of `a_1', `a_2' or `a_3' to
   9668 use at the return statement.  So, the SSA renamer creates a new version
   9669 `a_4' which is assigned the result of "merging" `a_1', `a_2' and `a_3'.
   9670 Hence, PHI nodes mean "one of these operands.  I don't know which".
   9671 
   9672  The following macros can be used to examine PHI nodes
   9673 
   9674  -- Macro: PHI_RESULT (PHI)
   9675      Returns the `SSA_NAME' created by PHI node PHI (i.e., PHI's LHS).
   9676 
   9677  -- Macro: PHI_NUM_ARGS (PHI)
   9678      Returns the number of arguments in PHI.  This number is exactly
   9679      the number of incoming edges to the basic block holding PHI.
   9680 
   9681  -- Macro: PHI_ARG_ELT (PHI, I)
   9682      Returns a tuple representing the Ith argument of PHI.  Each
   9683      element of this tuple contains an `SSA_NAME' VAR and the incoming
   9684      edge through which VAR flows.
   9685 
   9686  -- Macro: PHI_ARG_EDGE (PHI, I)
   9687      Returns the incoming edge for the Ith argument of PHI.
   9688 
   9689  -- Macro: PHI_ARG_DEF (PHI, I)
   9690      Returns the `SSA_NAME' for the Ith argument of PHI.
   9691 
   9692 10.5.1 Preserving the SSA form
   9693 ------------------------------
   9694 
   9695 Some optimization passes make changes to the function that invalidate
   9696 the SSA property.  This can happen when a pass has added new symbols or
   9697 changed the program so that variables that were previously aliased
   9698 aren't anymore.  Whenever something like this happens, the affected
   9699 symbols must be renamed into SSA form again.  Transformations that emit
   9700 new code or replicate existing statements will also need to update the
   9701 SSA form.
   9702 
   9703  Since GCC implements two different SSA forms for register and virtual
   9704 variables, keeping the SSA form up to date depends on whether you are
   9705 updating register or virtual names.  In both cases, the general idea
   9706 behind incremental SSA updates is similar: when new SSA names are
   9707 created, they typically are meant to replace other existing names in
   9708 the program.
   9709 
   9710  For instance, given the following code:
   9711 
   9712           1	L0:
   9713           2	x_1 = PHI (0, x_5)
   9714           3	if (x_1 < 10)
   9715           4	  if (x_1 > 7)
   9716           5	    y_2 = 0
   9717           6	  else
   9718           7	    y_3 = x_1 + x_7
   9719           8	  endif
   9720           9	  x_5 = x_1 + 1
   9721           10   goto L0;
   9722           11	endif
   9723 
   9724  Suppose that we insert new names `x_10' and `x_11' (lines `4' and `8').
   9725 
   9726           1	L0:
   9727           2	x_1 = PHI (0, x_5)
   9728           3	if (x_1 < 10)
   9729           4	  x_10 = ...
   9730           5	  if (x_1 > 7)
   9731           6	    y_2 = 0
   9732           7	  else
   9733           8	    x_11 = ...
   9734           9	    y_3 = x_1 + x_7
   9735           10	  endif
   9736           11	  x_5 = x_1 + 1
   9737           12	  goto L0;
   9738           13	endif
   9739 
   9740  We want to replace all the uses of `x_1' with the new definitions of
   9741 `x_10' and `x_11'.  Note that the only uses that should be replaced are
   9742 those at lines `5', `9' and `11'.  Also, the use of `x_7' at line `9'
   9743 should _not_ be replaced (this is why we cannot just mark symbol `x' for
   9744 renaming).
   9745 
   9746  Additionally, we may need to insert a PHI node at line `11' because
   9747 that is a merge point for `x_10' and `x_11'.  So the use of `x_1' at
   9748 line `11' will be replaced with the new PHI node.  The insertion of PHI
   9749 nodes is optional.  They are not strictly necessary to preserve the SSA
   9750 form, and depending on what the caller inserted, they may not even be
   9751 useful for the optimizers.
   9752 
   9753  Updating the SSA form is a two step process.  First, the pass has to
   9754 identify which names need to be updated and/or which symbols need to be
   9755 renamed into SSA form for the first time.  When new names are
   9756 introduced to replace existing names in the program, the mapping
   9757 between the old and the new names are registered by calling
   9758 `register_new_name_mapping' (note that if your pass creates new code by
   9759 duplicating basic blocks, the call to `tree_duplicate_bb' will set up
   9760 the necessary mappings automatically).  On the other hand, if your pass
   9761 exposes a new symbol that should be put in SSA form for the first time,
   9762 the new symbol should be registered with `mark_sym_for_renaming'.
   9763 
   9764  After the replacement mappings have been registered and new symbols
   9765 marked for renaming, a call to `update_ssa' makes the registered
   9766 changes.  This can be done with an explicit call or by creating `TODO'
   9767 flags in the `tree_opt_pass' structure for your pass.  There are
   9768 several `TODO' flags that control the behavior of `update_ssa':
   9769 
   9770    * `TODO_update_ssa'.  Update the SSA form inserting PHI nodes
   9771      for newly exposed symbols and virtual names marked for updating.
   9772          When updating real names, only insert PHI nodes for a real
   9773      name       `O_j' in blocks reached by all the new and old
   9774      definitions for       `O_j'.  If the iterated dominance frontier
   9775      for `O_j'       is not pruned, we may end up inserting PHI nodes
   9776      in blocks that       have one or more edges with no incoming
   9777      definition for       `O_j'.  This would lead to uninitialized
   9778      warnings for       `O_j''s symbol.
   9779 
   9780    * `TODO_update_ssa_no_phi'.  Update the SSA form without
   9781      inserting any new PHI nodes at all.  This is used by passes that
   9782         have either inserted all the PHI nodes themselves or passes
   9783      that       need only to patch use-def and def-def chains for
   9784      virtuals       (e.g., DCE).
   9785 
   9786    * `TODO_update_ssa_full_phi'.  Insert PHI nodes everywhere
   9787      they are needed.  No pruning of the IDF is done.  This is used
   9788       by passes that need the PHI nodes for `O_j' even if it
   9789      means that some arguments will come from the default definition
   9790        of `O_j''s symbol (e.g., `pass_linear_transform').
   9791 
   9792      WARNING: If you need to use this flag, chances are that your
   9793      pass may be doing something wrong.  Inserting PHI nodes for an
   9794       old name where not all edges carry a new replacement may lead to
   9795           silent codegen errors or spurious uninitialized warnings.
   9796 
   9797    * `TODO_update_ssa_only_virtuals'.  Passes that update the       SSA
   9798      form on their own may want to delegate the updating of
   9799      virtual names to the generic updater.  Since FUD chains are
   9800      easier to maintain, this simplifies the work they need to do.
   9801       NOTE: If this flag is used, any OLD->NEW mappings for real names
   9802           are explicitly destroyed and only the symbols marked for
   9803       renaming are processed.
   9804 
   9805 10.5.2 Preserving the virtual SSA form
   9806 --------------------------------------
   9807 
   9808 The virtual SSA form is harder to preserve than the non-virtual SSA form
   9809 mainly because the set of virtual operands for a statement may change at
   9810 what some would consider unexpected times.  In general, statement
   9811 modifications should be bracketed between calls to `push_stmt_changes'
   9812 and `pop_stmt_changes'.  For example,
   9813 
   9814          munge_stmt (tree stmt)
   9815          {
   9816             push_stmt_changes (&stmt);
   9817             ... rewrite STMT ...
   9818             pop_stmt_changes (&stmt);
   9819          }
   9820 
   9821  The call to `push_stmt_changes' saves the current state of the
   9822 statement operands and the call to `pop_stmt_changes' compares the
   9823 saved state with the current one and does the appropriate symbol
   9824 marking for the SSA renamer.
   9825 
   9826  It is possible to modify several statements at a time, provided that
   9827 `push_stmt_changes' and `pop_stmt_changes' are called in LIFO order, as
   9828 when processing a stack of statements.
   9829 
   9830  Additionally, if the pass discovers that it did not need to make
   9831 changes to the statement after calling `push_stmt_changes', it can
   9832 simply discard the topmost change buffer by calling
   9833 `discard_stmt_changes'.  This will avoid the expensive operand re-scan
   9834 operation and the buffer comparison that determines if symbols need to
   9835 be marked for renaming.
   9836 
   9837 10.5.3 Examining `SSA_NAME' nodes
   9838 ---------------------------------
   9839 
   9840 The following macros can be used to examine `SSA_NAME' nodes
   9841 
   9842  -- Macro: SSA_NAME_DEF_STMT (VAR)
   9843      Returns the statement S that creates the `SSA_NAME' VAR.  If S is
   9844      an empty statement (i.e., `IS_EMPTY_STMT (S)' returns `true'), it
   9845      means that the first reference to this variable is a USE or a VUSE.
   9846 
   9847  -- Macro: SSA_NAME_VERSION (VAR)
   9848      Returns the version number of the `SSA_NAME' object VAR.
   9849 
   9850 10.5.4 Walking use-def chains
   9851 -----------------------------
   9852 
   9853  -- Tree SSA function: void walk_use_def_chains (VAR, FN, DATA)
   9854      Walks use-def chains starting at the `SSA_NAME' node VAR.  Calls
   9855      function FN at each reaching definition found.  Function FN takes
   9856      three arguments: VAR, its defining statement (DEF_STMT) and a
   9857      generic pointer to whatever state information that FN may want to
   9858      maintain (DATA).  Function FN is able to stop the walk by
   9859      returning `true', otherwise in order to continue the walk, FN
   9860      should return `false'.
   9861 
   9862      Note, that if DEF_STMT is a `PHI' node, the semantics are slightly
   9863      different.  For each argument ARG of the PHI node, this function
   9864      will:
   9865 
   9866        1. Walk the use-def chains for ARG.
   9867 
   9868        2. Call `FN (ARG, PHI, DATA)'.
   9869 
   9870      Note how the first argument to FN is no longer the original
   9871      variable VAR, but the PHI argument currently being examined.  If
   9872      FN wants to get at VAR, it should call `PHI_RESULT' (PHI).
   9873 
   9874 10.5.5 Walking the dominator tree
   9875 ---------------------------------
   9876 
   9877  -- Tree SSA function: void walk_dominator_tree (WALK_DATA, BB)
   9878      This function walks the dominator tree for the current CFG calling
   9879      a set of callback functions defined in STRUCT DOM_WALK_DATA in
   9880      `domwalk.h'.  The call back functions you need to define give you
   9881      hooks to execute custom code at various points during traversal:
   9882 
   9883        1. Once to initialize any local data needed while processing
   9884            BB and its children.  This local data is pushed into an
   9885            internal stack which is automatically pushed and popped as
   9886           the       walker traverses the dominator tree.
   9887 
   9888        2. Once before traversing all the statements in the BB.
   9889 
   9890        3. Once for every statement inside BB.
   9891 
   9892        4. Once after traversing all the statements and before recursing
   9893                into BB's dominator children.
   9894 
   9895        5. It then recurses into all the dominator children of BB.
   9896 
   9897        6. After recursing into all the dominator children of BB it
   9898           can, optionally, traverse every statement in BB again
   9899           (i.e., repeating steps 2 and 3).
   9900 
   9901        7. Once after walking the statements in BB and BB's
   9902           dominator children.  At this stage, the block local data stack
   9903                is popped.
   9904 
   9905 
   9906 File: gccint.info,  Node: Alias analysis,  Prev: SSA,  Up: Tree SSA
   9907 
   9908 10.6 Alias analysis
   9909 ===================
   9910 
   9911 Alias analysis proceeds in 4 main phases:
   9912 
   9913   1. Structural alias analysis.
   9914 
   9915      This phase walks the types for structure variables, and determines
   9916      which of the fields can overlap using offset and size of each
   9917      field.  For each field, a "subvariable" called a "Structure field
   9918      tag" (SFT) is created, which represents that field as a separate
   9919      variable.  All accesses that could possibly overlap with a given
   9920      field will have virtual operands for the SFT of that field.
   9921 
   9922           struct foo
   9923           {
   9924             int a;
   9925             int b;
   9926           }
   9927           struct foo temp;
   9928           int bar (void)
   9929           {
   9930             int tmp1, tmp2, tmp3;
   9931             SFT.0_2 = VDEF <SFT.0_1>
   9932             temp.a = 5;
   9933             SFT.1_4 = VDEF <SFT.1_3>
   9934             temp.b = 6;
   9935 
   9936             VUSE <SFT.1_4>
   9937             tmp1_5 = temp.b;
   9938             VUSE <SFT.0_2>
   9939             tmp2_6 = temp.a;
   9940 
   9941             tmp3_7 = tmp1_5 + tmp2_6;
   9942             return tmp3_7;
   9943           }
   9944 
   9945      If you copy the symbol tag for a variable for some reason, you
   9946      probably also want to copy the subvariables for that variable.
   9947 
   9948   2. Points-to and escape analysis.
   9949 
   9950      This phase walks the use-def chains in the SSA web looking for
   9951      three things:
   9952 
   9953 
   9954 
   9955 
   9956         * Assignments of the form `P_i = &VAR'
   9957 
   9958         * Assignments of the form P_i = malloc()
   9959 
   9960         * Pointers and ADDR_EXPR that escape the current function.
   9961 
   9962      The concept of `escaping' is the same one used in the Java world.
   9963      When a pointer or an ADDR_EXPR escapes, it means that it has been
   9964      exposed outside of the current function.  So, assignment to global
   9965      variables, function arguments and returning a pointer are all
   9966      escape sites.
   9967 
   9968      This is where we are currently limited.  Since not everything is
   9969      renamed into SSA, we lose track of escape properties when a
   9970      pointer is stashed inside a field in a structure, for instance.
   9971      In those cases, we are assuming that the pointer does escape.
   9972 
   9973      We use escape analysis to determine whether a variable is
   9974      call-clobbered.  Simply put, if an ADDR_EXPR escapes, then the
   9975      variable is call-clobbered.  If a pointer P_i escapes, then all
   9976      the variables pointed-to by P_i (and its memory tag) also escape.
   9977 
   9978   3. Compute flow-sensitive aliases
   9979 
   9980      We have two classes of memory tags.  Memory tags associated with
   9981      the pointed-to data type of the pointers in the program.  These
   9982      tags are called "symbol memory tag" (SMT).  The other class are
   9983      those associated with SSA_NAMEs, called "name memory tag" (NMT).
   9984      The basic idea is that when adding operands for an INDIRECT_REF
   9985      *P_i, we will first check whether P_i has a name tag, if it does
   9986      we use it, because that will have more precise aliasing
   9987      information.  Otherwise, we use the standard symbol tag.
   9988 
   9989      In this phase, we go through all the pointers we found in
   9990      points-to analysis and create alias sets for the name memory tags
   9991      associated with each pointer P_i.  If P_i escapes, we mark
   9992      call-clobbered the variables it points to and its tag.
   9993 
   9994   4. Compute flow-insensitive aliases
   9995 
   9996      This pass will compare the alias set of every symbol memory tag and
   9997      every addressable variable found in the program.  Given a symbol
   9998      memory tag SMT and an addressable variable V.  If the alias sets
   9999      of SMT and V conflict (as computed by may_alias_p), then V is
   10000      marked as an alias tag and added to the alias set of SMT.
   10001 
   10002      Every language that wishes to perform language-specific alias
   10003      analysis should define a function that computes, given a `tree'
   10004      node, an alias set for the node.  Nodes in different alias sets
   10005      are not allowed to alias.  For an example, see the C front-end
   10006      function `c_get_alias_set'.
   10007 
   10008  For instance, consider the following function:
   10009 
   10010      foo (int i)
   10011      {
   10012        int *p, *q, a, b;
   10013 
   10014        if (i > 10)
   10015          p = &a;
   10016        else
   10017          q = &b;
   10018 
   10019        *p = 3;
   10020        *q = 5;
   10021        a = b + 2;
   10022        return *p;
   10023      }
   10024 
   10025  After aliasing analysis has finished, the symbol memory tag for
   10026 pointer `p' will have two aliases, namely variables `a' and `b'.  Every
   10027 time pointer `p' is dereferenced, we want to mark the operation as a
   10028 potential reference to `a' and `b'.
   10029 
   10030      foo (int i)
   10031      {
   10032        int *p, a, b;
   10033 
   10034        if (i_2 > 10)
   10035          p_4 = &a;
   10036        else
   10037          p_6 = &b;
   10038        # p_1 = PHI <p_4(1), p_6(2)>;
   10039 
   10040        # a_7 = VDEF <a_3>;
   10041        # b_8 = VDEF <b_5>;
   10042        *p_1 = 3;
   10043 
   10044        # a_9 = VDEF <a_7>
   10045        # VUSE <b_8>
   10046        a_9 = b_8 + 2;
   10047 
   10048        # VUSE <a_9>;
   10049        # VUSE <b_8>;
   10050        return *p_1;
   10051      }
   10052 
   10053  In certain cases, the list of may aliases for a pointer may grow too
   10054 large.  This may cause an explosion in the number of virtual operands
   10055 inserted in the code.  Resulting in increased memory consumption and
   10056 compilation time.
   10057 
   10058  When the number of virtual operands needed to represent aliased loads
   10059 and stores grows too large (configurable with `--param
   10060 max-aliased-vops'), alias sets are grouped to avoid severe compile-time
   10061 slow downs and memory consumption.  The alias grouping heuristic
   10062 proceeds as follows:
   10063 
   10064   1. Sort the list of pointers in decreasing number of contributed
   10065      virtual operands.
   10066 
   10067   2. Take the first pointer from the list and reverse the role of the
   10068      memory tag and its aliases.  Usually, whenever an aliased variable
   10069      Vi is found to alias with a memory tag T, we add Vi to the
   10070      may-aliases set for T.  Meaning that after alias analysis, we will
   10071      have:
   10072 
   10073           may-aliases(T) = { V1, V2, V3, ..., Vn }
   10074 
   10075      This means that every statement that references T, will get `n'
   10076      virtual operands for each of the Vi tags.  But, when alias
   10077      grouping is enabled, we make T an alias tag and add it to the
   10078      alias set of all the Vi variables:
   10079 
   10080           may-aliases(V1) = { T }
   10081           may-aliases(V2) = { T }
   10082           ...
   10083           may-aliases(Vn) = { T }
   10084 
   10085      This has two effects: (a) statements referencing T will only get a
   10086      single virtual operand, and, (b) all the variables Vi will now
   10087      appear to alias each other.  So, we lose alias precision to
   10088      improve compile time.  But, in theory, a program with such a high
   10089      level of aliasing should not be very optimizable in the first
   10090      place.
   10091 
   10092   3. Since variables may be in the alias set of more than one memory
   10093      tag, the grouping done in step (2) needs to be extended to all the
   10094      memory tags that have a non-empty intersection with the
   10095      may-aliases set of tag T.  For instance, if we originally had
   10096      these may-aliases sets:
   10097 
   10098           may-aliases(T) = { V1, V2, V3 }
   10099           may-aliases(R) = { V2, V4 }
   10100 
   10101      In step (2) we would have reverted the aliases for T as:
   10102 
   10103           may-aliases(V1) = { T }
   10104           may-aliases(V2) = { T }
   10105           may-aliases(V3) = { T }
   10106 
   10107      But note that now V2 is no longer aliased with R.  We could add R
   10108      to may-aliases(V2), but we are in the process of grouping aliases
   10109      to reduce virtual operands so what we do is add V4 to the grouping
   10110      to obtain:
   10111 
   10112           may-aliases(V1) = { T }
   10113           may-aliases(V2) = { T }
   10114           may-aliases(V3) = { T }
   10115           may-aliases(V4) = { T }
   10116 
   10117   4. If the total number of virtual operands due to aliasing is still
   10118      above the threshold set by max-alias-vops, go back to (2).
   10119 
   10120 
   10121 File: gccint.info,  Node: Loop Analysis and Representation,  Next: Machine Desc,  Prev: Tree SSA,  Up: Top
   10122 
   10123 11 Analysis and Representation of Loops
   10124 ***************************************
   10125 
   10126 GCC provides extensive infrastructure for work with natural loops, i.e.,
   10127 strongly connected components of CFG with only one entry block.  This
   10128 chapter describes representation of loops in GCC, both on GIMPLE and in
   10129 RTL, as well as the interfaces to loop-related analyses (induction
   10130 variable analysis and number of iterations analysis).
   10131 
   10132 * Menu:
   10133 
   10134 * Loop representation::		Representation and analysis of loops.
   10135 * Loop querying::		Getting information about loops.
   10136 * Loop manipulation::		Loop manipulation functions.
   10137 * LCSSA::			Loop-closed SSA form.
   10138 * Scalar evolutions::   	Induction variables on GIMPLE.
   10139 * loop-iv::			Induction variables on RTL.
   10140 * Number of iterations::	Number of iterations analysis.
   10141 * Dependency analysis::		Data dependency analysis.
   10142 * Lambda::			Linear loop transformations framework.
   10143 * Omega::			A solver for linear programming problems.
   10144 
   10145 
   10146 File: gccint.info,  Node: Loop representation,  Next: Loop querying,  Up: Loop Analysis and Representation
   10147 
   10148 11.1 Loop representation
   10149 ========================
   10150 
   10151 This chapter describes the representation of loops in GCC, and functions
   10152 that can be used to build, modify and analyze this representation.  Most
   10153 of the interfaces and data structures are declared in `cfgloop.h'.  At
   10154 the moment, loop structures are analyzed and this information is
   10155 updated only by the optimization passes that deal with loops, but some
   10156 efforts are being made to make it available throughout most of the
   10157 optimization passes.
   10158 
   10159  In general, a natural loop has one entry block (header) and possibly
   10160 several back edges (latches) leading to the header from the inside of
   10161 the loop.  Loops with several latches may appear if several loops share
   10162 a single header, or if there is a branching in the middle of the loop.
   10163 The representation of loops in GCC however allows only loops with a
   10164 single latch.  During loop analysis, headers of such loops are split and
   10165 forwarder blocks are created in order to disambiguate their structures.
   10166 Heuristic based on profile information and structure of the induction
   10167 variables in the loops is used to determine whether the latches
   10168 correspond to sub-loops or to control flow in a single loop.  This means
   10169 that the analysis sometimes changes the CFG, and if you run it in the
   10170 middle of an optimization pass, you must be able to deal with the new
   10171 blocks.  You may avoid CFG changes by passing
   10172 `LOOPS_MAY_HAVE_MULTIPLE_LATCHES' flag to the loop discovery, note
   10173 however that most other loop manipulation functions will not work
   10174 correctly for loops with multiple latch edges (the functions that only
   10175 query membership of blocks to loops and subloop relationships, or
   10176 enumerate and test loop exits, can be expected to work).
   10177 
   10178  Body of the loop is the set of blocks that are dominated by its header,
   10179 and reachable from its latch against the direction of edges in CFG.  The
   10180 loops are organized in a containment hierarchy (tree) such that all the
   10181 loops immediately contained inside loop L are the children of L in the
   10182 tree.  This tree is represented by the `struct loops' structure.  The
   10183 root of this tree is a fake loop that contains all blocks in the
   10184 function.  Each of the loops is represented in a `struct loop'
   10185 structure.  Each loop is assigned an index (`num' field of the `struct
   10186 loop' structure), and the pointer to the loop is stored in the
   10187 corresponding field of the `larray' vector in the loops structure.  The
   10188 indices do not have to be continuous, there may be empty (`NULL')
   10189 entries in the `larray' created by deleting loops.  Also, there is no
   10190 guarantee on the relative order of a loop and its subloops in the
   10191 numbering.  The index of a loop never changes.
   10192 
   10193  The entries of the `larray' field should not be accessed directly.
   10194 The function `get_loop' returns the loop description for a loop with
   10195 the given index.  `number_of_loops' function returns number of loops in
   10196 the function.  To traverse all loops, use `FOR_EACH_LOOP' macro.  The
   10197 `flags' argument of the macro is used to determine the direction of
   10198 traversal and the set of loops visited.  Each loop is guaranteed to be
   10199 visited exactly once, regardless of the changes to the loop tree, and
   10200 the loops may be removed during the traversal.  The newly created loops
   10201 are never traversed, if they need to be visited, this must be done
   10202 separately after their creation.  The `FOR_EACH_LOOP' macro allocates
   10203 temporary variables.  If the `FOR_EACH_LOOP' loop were ended using
   10204 break or goto, they would not be released; `FOR_EACH_LOOP_BREAK' macro
   10205 must be used instead.
   10206 
   10207  Each basic block contains the reference to the innermost loop it
   10208 belongs to (`loop_father').  For this reason, it is only possible to
   10209 have one `struct loops' structure initialized at the same time for each
   10210 CFG.  The global variable `current_loops' contains the `struct loops'
   10211 structure.  Many of the loop manipulation functions assume that
   10212 dominance information is up-to-date.
   10213 
   10214  The loops are analyzed through `loop_optimizer_init' function.  The
   10215 argument of this function is a set of flags represented in an integer
   10216 bitmask.  These flags specify what other properties of the loop
   10217 structures should be calculated/enforced and preserved later:
   10218 
   10219    * `LOOPS_MAY_HAVE_MULTIPLE_LATCHES': If this flag is set, no changes
   10220      to CFG will be performed in the loop analysis, in particular,
   10221      loops with multiple latch edges will not be disambiguated.  If a
   10222      loop has multiple latches, its latch block is set to NULL.  Most of
   10223      the loop manipulation functions will not work for loops in this
   10224      shape.  No other flags that require CFG changes can be passed to
   10225      loop_optimizer_init.
   10226 
   10227    * `LOOPS_HAVE_PREHEADERS': Forwarder blocks are created in such a
   10228      way that each loop has only one entry edge, and additionally, the
   10229      source block of this entry edge has only one successor.  This
   10230      creates a natural place where the code can be moved out of the
   10231      loop, and ensures that the entry edge of the loop leads from its
   10232      immediate super-loop.
   10233 
   10234    * `LOOPS_HAVE_SIMPLE_LATCHES': Forwarder blocks are created to force
   10235      the latch block of each loop to have only one successor.  This
   10236      ensures that the latch of the loop does not belong to any of its
   10237      sub-loops, and makes manipulation with the loops significantly
   10238      easier.  Most of the loop manipulation functions assume that the
   10239      loops are in this shape.  Note that with this flag, the "normal"
   10240      loop without any control flow inside and with one exit consists of
   10241      two basic blocks.
   10242 
   10243    * `LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS': Basic blocks and edges in
   10244      the strongly connected components that are not natural loops (have
   10245      more than one entry block) are marked with `BB_IRREDUCIBLE_LOOP'
   10246      and `EDGE_IRREDUCIBLE_LOOP' flags.  The flag is not set for blocks
   10247      and edges that belong to natural loops that are in such an
   10248      irreducible region (but it is set for the entry and exit edges of
   10249      such a loop, if they lead to/from this region).
   10250 
   10251    * `LOOPS_HAVE_RECORDED_EXITS': The lists of exits are recorded and
   10252      updated for each loop.  This makes some functions (e.g.,
   10253      `get_loop_exit_edges') more efficient.  Some functions (e.g.,
   10254      `single_exit') can be used only if the lists of exits are recorded.
   10255 
   10256  These properties may also be computed/enforced later, using functions
   10257 `create_preheaders', `force_single_succ_latches',
   10258 `mark_irreducible_loops' and `record_loop_exits'.
   10259 
   10260  The memory occupied by the loops structures should be freed with
   10261 `loop_optimizer_finalize' function.
   10262 
   10263  The CFG manipulation functions in general do not update loop
   10264 structures.  Specialized versions that additionally do so are provided
   10265 for the most common tasks.  On GIMPLE, `cleanup_tree_cfg_loop' function
   10266 can be used to cleanup CFG while updating the loops structures if
   10267 `current_loops' is set.
   10268 
   10269 
   10270 File: gccint.info,  Node: Loop querying,  Next: Loop manipulation,  Prev: Loop representation,  Up: Loop Analysis and Representation
   10271 
   10272 11.2 Loop querying
   10273 ==================
   10274 
   10275 The functions to query the information about loops are declared in
   10276 `cfgloop.h'.  Some of the information can be taken directly from the
   10277 structures.  `loop_father' field of each basic block contains the
   10278 innermost loop to that the block belongs.  The most useful fields of
   10279 loop structure (that are kept up-to-date at all times) are:
   10280 
   10281    * `header', `latch': Header and latch basic blocks of the loop.
   10282 
   10283    * `num_nodes': Number of basic blocks in the loop (including the
   10284      basic blocks of the sub-loops).
   10285 
   10286    * `depth': The depth of the loop in the loops tree, i.e., the number
   10287      of super-loops of the loop.
   10288 
   10289    * `outer', `inner', `next': The super-loop, the first sub-loop, and
   10290      the sibling of the loop in the loops tree.
   10291 
   10292  There are other fields in the loop structures, many of them used only
   10293 by some of the passes, or not updated during CFG changes; in general,
   10294 they should not be accessed directly.
   10295 
   10296  The most important functions to query loop structures are:
   10297 
   10298    * `flow_loops_dump': Dumps the information about loops to a file.
   10299 
   10300    * `verify_loop_structure': Checks consistency of the loop structures.
   10301 
   10302    * `loop_latch_edge': Returns the latch edge of a loop.
   10303 
   10304    * `loop_preheader_edge': If loops have preheaders, returns the
   10305      preheader edge of a loop.
   10306 
   10307    * `flow_loop_nested_p': Tests whether loop is a sub-loop of another
   10308      loop.
   10309 
   10310    * `flow_bb_inside_loop_p': Tests whether a basic block belongs to a
   10311      loop (including its sub-loops).
   10312 
   10313    * `find_common_loop': Finds the common super-loop of two loops.
   10314 
   10315    * `superloop_at_depth': Returns the super-loop of a loop with the
   10316      given depth.
   10317 
   10318    * `tree_num_loop_insns', `num_loop_insns': Estimates the number of
   10319      insns in the loop, on GIMPLE and on RTL.
   10320 
   10321    * `loop_exit_edge_p': Tests whether edge is an exit from a loop.
   10322 
   10323    * `mark_loop_exit_edges': Marks all exit edges of all loops with
   10324      `EDGE_LOOP_EXIT' flag.
   10325 
   10326    * `get_loop_body', `get_loop_body_in_dom_order',
   10327      `get_loop_body_in_bfs_order': Enumerates the basic blocks in the
   10328      loop in depth-first search order in reversed CFG, ordered by
   10329      dominance relation, and breath-first search order, respectively.
   10330 
   10331    * `single_exit': Returns the single exit edge of the loop, or `NULL'
   10332      if the loop has more than one exit.  You can only use this
   10333      function if LOOPS_HAVE_MARKED_SINGLE_EXITS property is used.
   10334 
   10335    * `get_loop_exit_edges': Enumerates the exit edges of a loop.
   10336 
   10337    * `just_once_each_iteration_p': Returns true if the basic block is
   10338      executed exactly once during each iteration of a loop (that is, it
   10339      does not belong to a sub-loop, and it dominates the latch of the
   10340      loop).
   10341 
   10342 
   10343 File: gccint.info,  Node: Loop manipulation,  Next: LCSSA,  Prev: Loop querying,  Up: Loop Analysis and Representation
   10344 
   10345 11.3 Loop manipulation
   10346 ======================
   10347 
   10348 The loops tree can be manipulated using the following functions:
   10349 
   10350    * `flow_loop_tree_node_add': Adds a node to the tree.
   10351 
   10352    * `flow_loop_tree_node_remove': Removes a node from the tree.
   10353 
   10354    * `add_bb_to_loop': Adds a basic block to a loop.
   10355 
   10356    * `remove_bb_from_loops': Removes a basic block from loops.
   10357 
   10358  Most low-level CFG functions update loops automatically.  The following
   10359 functions handle some more complicated cases of CFG manipulations:
   10360 
   10361    * `remove_path': Removes an edge and all blocks it dominates.
   10362 
   10363    * `split_loop_exit_edge': Splits exit edge of the loop, ensuring
   10364      that PHI node arguments remain in the loop (this ensures that
   10365      loop-closed SSA form is preserved).  Only useful on GIMPLE.
   10366 
   10367  Finally, there are some higher-level loop transformations implemented.
   10368 While some of them are written so that they should work on non-innermost
   10369 loops, they are mostly untested in that case, and at the moment, they
   10370 are only reliable for the innermost loops:
   10371 
   10372    * `create_iv': Creates a new induction variable.  Only works on
   10373      GIMPLE.  `standard_iv_increment_position' can be used to find a
   10374      suitable place for the iv increment.
   10375 
   10376    * `duplicate_loop_to_header_edge',
   10377      `tree_duplicate_loop_to_header_edge': These functions (on RTL and
   10378      on GIMPLE) duplicate the body of the loop prescribed number of
   10379      times on one of the edges entering loop header, thus performing
   10380      either loop unrolling or loop peeling.  `can_duplicate_loop_p'
   10381      (`can_unroll_loop_p' on GIMPLE) must be true for the duplicated
   10382      loop.
   10383 
   10384    * `loop_version', `tree_ssa_loop_version': These function create a
   10385      copy of a loop, and a branch before them that selects one of them
   10386      depending on the prescribed condition.  This is useful for
   10387      optimizations that need to verify some assumptions in runtime (one
   10388      of the copies of the loop is usually left unchanged, while the
   10389      other one is transformed in some way).
   10390 
   10391    * `tree_unroll_loop': Unrolls the loop, including peeling the extra
   10392      iterations to make the number of iterations divisible by unroll
   10393      factor, updating the exit condition, and removing the exits that
   10394      now cannot be taken.  Works only on GIMPLE.
   10395 
   10396 
   10397 File: gccint.info,  Node: LCSSA,  Next: Scalar evolutions,  Prev: Loop manipulation,  Up: Loop Analysis and Representation
   10398 
   10399 11.4 Loop-closed SSA form
   10400 =========================
   10401 
   10402 Throughout the loop optimizations on tree level, one extra condition is
   10403 enforced on the SSA form:  No SSA name is used outside of the loop in
   10404 that it is defined.  The SSA form satisfying this condition is called
   10405 "loop-closed SSA form" - LCSSA.  To enforce LCSSA, PHI nodes must be
   10406 created at the exits of the loops for the SSA names that are used
   10407 outside of them.  Only the real operands (not virtual SSA names) are
   10408 held in LCSSA, in order to save memory.
   10409 
   10410  There are various benefits of LCSSA:
   10411 
   10412    * Many optimizations (value range analysis, final value replacement)
   10413      are interested in the values that are defined in the loop and used
   10414      outside of it, i.e., exactly those for that we create new PHI
   10415      nodes.
   10416 
   10417    * In induction variable analysis, it is not necessary to specify the
   10418      loop in that the analysis should be performed - the scalar
   10419      evolution analysis always returns the results with respect to the
   10420      loop in that the SSA name is defined.
   10421 
   10422    * It makes updating of SSA form during loop transformations simpler.
   10423      Without LCSSA, operations like loop unrolling may force creation
   10424      of PHI nodes arbitrarily far from the loop, while in LCSSA, the
   10425      SSA form can be updated locally.  However, since we only keep real
   10426      operands in LCSSA, we cannot use this advantage (we could have
   10427      local updating of real operands, but it is not much more efficient
   10428      than to use generic SSA form updating for it as well; the amount
   10429      of changes to SSA is the same).
   10430 
   10431  However, it also means LCSSA must be updated.  This is usually
   10432 straightforward, unless you create a new value in loop and use it
   10433 outside, or unless you manipulate loop exit edges (functions are
   10434 provided to make these manipulations simple).
   10435 `rewrite_into_loop_closed_ssa' is used to rewrite SSA form to LCSSA,
   10436 and `verify_loop_closed_ssa' to check that the invariant of LCSSA is
   10437 preserved.
   10438 
   10439 
   10440 File: gccint.info,  Node: Scalar evolutions,  Next: loop-iv,  Prev: LCSSA,  Up: Loop Analysis and Representation
   10441 
   10442 11.5 Scalar evolutions
   10443 ======================
   10444 
   10445 Scalar evolutions (SCEV) are used to represent results of induction
   10446 variable analysis on GIMPLE.  They enable us to represent variables with
   10447 complicated behavior in a simple and consistent way (we only use it to
   10448 express values of polynomial induction variables, but it is possible to
   10449 extend it).  The interfaces to SCEV analysis are declared in
   10450 `tree-scalar-evolution.h'.  To use scalar evolutions analysis,
   10451 `scev_initialize' must be used.  To stop using SCEV, `scev_finalize'
   10452 should be used.  SCEV analysis caches results in order to save time and
   10453 memory.  This cache however is made invalid by most of the loop
   10454 transformations, including removal of code.  If such a transformation
   10455 is performed, `scev_reset' must be called to clean the caches.
   10456 
   10457  Given an SSA name, its behavior in loops can be analyzed using the
   10458 `analyze_scalar_evolution' function.  The returned SCEV however does
   10459 not have to be fully analyzed and it may contain references to other
   10460 SSA names defined in the loop.  To resolve these (potentially
   10461 recursive) references, `instantiate_parameters' or `resolve_mixers'
   10462 functions must be used.  `instantiate_parameters' is useful when you
   10463 use the results of SCEV only for some analysis, and when you work with
   10464 whole nest of loops at once.  It will try replacing all SSA names by
   10465 their SCEV in all loops, including the super-loops of the current loop,
   10466 thus providing a complete information about the behavior of the
   10467 variable in the loop nest.  `resolve_mixers' is useful if you work with
   10468 only one loop at a time, and if you possibly need to create code based
   10469 on the value of the induction variable.  It will only resolve the SSA
   10470 names defined in the current loop, leaving the SSA names defined
   10471 outside unchanged, even if their evolution in the outer loops is known.
   10472 
   10473  The SCEV is a normal tree expression, except for the fact that it may
   10474 contain several special tree nodes.  One of them is `SCEV_NOT_KNOWN',
   10475 used for SSA names whose value cannot be expressed.  The other one is
   10476 `POLYNOMIAL_CHREC'.  Polynomial chrec has three arguments - base, step
   10477 and loop (both base and step may contain further polynomial chrecs).
   10478 Type of the expression and of base and step must be the same.  A
   10479 variable has evolution `POLYNOMIAL_CHREC(base, step, loop)' if it is
   10480 (in the specified loop) equivalent to `x_1' in the following example
   10481 
   10482      while (...)
   10483        {
   10484          x_1 = phi (base, x_2);
   10485          x_2 = x_1 + step;
   10486        }
   10487 
   10488  Note that this includes the language restrictions on the operations.
   10489 For example, if we compile C code and `x' has signed type, then the
   10490 overflow in addition would cause undefined behavior, and we may assume
   10491 that this does not happen.  Hence, the value with this SCEV cannot
   10492 overflow (which restricts the number of iterations of such a loop).
   10493 
   10494  In many cases, one wants to restrict the attention just to affine
   10495 induction variables.  In this case, the extra expressive power of SCEV
   10496 is not useful, and may complicate the optimizations.  In this case,
   10497 `simple_iv' function may be used to analyze a value - the result is a
   10498 loop-invariant base and step.
   10499 
   10500 
   10501 File: gccint.info,  Node: loop-iv,  Next: Number of iterations,  Prev: Scalar evolutions,  Up: Loop Analysis and Representation
   10502 
   10503 11.6 IV analysis on RTL
   10504 =======================
   10505 
   10506 The induction variable on RTL is simple and only allows analysis of
   10507 affine induction variables, and only in one loop at once.  The interface
   10508 is declared in `cfgloop.h'.  Before analyzing induction variables in a
   10509 loop L, `iv_analysis_loop_init' function must be called on L.  After
   10510 the analysis (possibly calling `iv_analysis_loop_init' for several
   10511 loops) is finished, `iv_analysis_done' should be called.  The following
   10512 functions can be used to access the results of the analysis:
   10513 
   10514    * `iv_analyze': Analyzes a single register used in the given insn.
   10515      If no use of the register in this insn is found, the following
   10516      insns are scanned, so that this function can be called on the insn
   10517      returned by get_condition.
   10518 
   10519    * `iv_analyze_result': Analyzes result of the assignment in the
   10520      given insn.
   10521 
   10522    * `iv_analyze_expr': Analyzes a more complicated expression.  All
   10523      its operands are analyzed by `iv_analyze', and hence they must be
   10524      used in the specified insn or one of the following insns.
   10525 
   10526  The description of the induction variable is provided in `struct
   10527 rtx_iv'.  In order to handle subregs, the representation is a bit
   10528 complicated; if the value of the `extend' field is not `UNKNOWN', the
   10529 value of the induction variable in the i-th iteration is
   10530 
   10531      delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)),
   10532 
   10533  with the following exception:  if `first_special' is true, then the
   10534 value in the first iteration (when `i' is zero) is `delta + mult *
   10535 base'.  However, if `extend' is equal to `UNKNOWN', then
   10536 `first_special' must be false, `delta' 0, `mult' 1 and the value in the
   10537 i-th iteration is
   10538 
   10539      subreg_{mode} (base + i * step)
   10540 
   10541  The function `get_iv_value' can be used to perform these calculations.
   10542 
   10543 
   10544 File: gccint.info,  Node: Number of iterations,  Next: Dependency analysis,  Prev: loop-iv,  Up: Loop Analysis and Representation
   10545 
   10546 11.7 Number of iterations analysis
   10547 ==================================
   10548 
   10549 Both on GIMPLE and on RTL, there are functions available to determine
   10550 the number of iterations of a loop, with a similar interface.  The
   10551 number of iterations of a loop in GCC is defined as the number of
   10552 executions of the loop latch.  In many cases, it is not possible to
   10553 determine the number of iterations unconditionally - the determined
   10554 number is correct only if some assumptions are satisfied.  The analysis
   10555 tries to verify these conditions using the information contained in the
   10556 program; if it fails, the conditions are returned together with the
   10557 result.  The following information and conditions are provided by the
   10558 analysis:
   10559 
   10560    * `assumptions': If this condition is false, the rest of the
   10561      information is invalid.
   10562 
   10563    * `noloop_assumptions' on RTL, `may_be_zero' on GIMPLE: If this
   10564      condition is true, the loop exits in the first iteration.
   10565 
   10566    * `infinite': If this condition is true, the loop is infinite.  This
   10567      condition is only available on RTL.  On GIMPLE, conditions for
   10568      finiteness of the loop are included in `assumptions'.
   10569 
   10570    * `niter_expr' on RTL, `niter' on GIMPLE: The expression that gives
   10571      number of iterations.  The number of iterations is defined as the
   10572      number of executions of the loop latch.
   10573 
   10574  Both on GIMPLE and on RTL, it necessary for the induction variable
   10575 analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL).
   10576 On GIMPLE, the results are stored to `struct tree_niter_desc'
   10577 structure.  Number of iterations before the loop is exited through a
   10578 given exit can be determined using `number_of_iterations_exit'
   10579 function.  On RTL, the results are returned in `struct niter_desc'
   10580 structure.  The corresponding function is named `check_simple_exit'.
   10581 There are also functions that pass through all the exits of a loop and
   10582 try to find one with easy to determine number of iterations -
   10583 `find_loop_niter' on GIMPLE and `find_simple_exit' on RTL.  Finally,
   10584 there are functions that provide the same information, but additionally
   10585 cache it, so that repeated calls to number of iterations are not so
   10586 costly - `number_of_latch_executions' on GIMPLE and
   10587 `get_simple_loop_desc' on RTL.
   10588 
   10589  Note that some of these functions may behave slightly differently than
   10590 others - some of them return only the expression for the number of
   10591 iterations, and fail if there are some assumptions.  The function
   10592 `number_of_latch_executions' works only for single-exit loops.  The
   10593 function `number_of_cond_exit_executions' can be used to determine
   10594 number of executions of the exit condition of a single-exit loop (i.e.,
   10595 the `number_of_latch_executions' increased by one).
   10596 
   10597 
   10598 File: gccint.info,  Node: Dependency analysis,  Next: Lambda,  Prev: Number of iterations,  Up: Loop Analysis and Representation
   10599 
   10600 11.8 Data Dependency Analysis
   10601 =============================
   10602 
   10603 The code for the data dependence analysis can be found in
   10604 `tree-data-ref.c' and its interface and data structures are described
   10605 in `tree-data-ref.h'.  The function that computes the data dependences
   10606 for all the array and pointer references for a given loop is
   10607 `compute_data_dependences_for_loop'.  This function is currently used
   10608 by the linear loop transform and the vectorization passes.  Before
   10609 calling this function, one has to allocate two vectors: a first vector
   10610 will contain the set of data references that are contained in the
   10611 analyzed loop body, and the second vector will contain the dependence
   10612 relations between the data references.  Thus if the vector of data
   10613 references is of size `n', the vector containing the dependence
   10614 relations will contain `n*n' elements.  However if the analyzed loop
   10615 contains side effects, such as calls that potentially can interfere
   10616 with the data references in the current analyzed loop, the analysis
   10617 stops while scanning the loop body for data references, and inserts a
   10618 single `chrec_dont_know' in the dependence relation array.
   10619 
   10620  The data references are discovered in a particular order during the
   10621 scanning of the loop body: the loop body is analyzed in execution order,
   10622 and the data references of each statement are pushed at the end of the
   10623 data reference array.  Two data references syntactically occur in the
   10624 program in the same order as in the array of data references.  This
   10625 syntactic order is important in some classical data dependence tests,
   10626 and mapping this order to the elements of this array avoids costly
   10627 queries to the loop body representation.
   10628 
   10629  Three types of data references are currently handled: ARRAY_REF,
   10630 INDIRECT_REF and COMPONENT_REF. The data structure for the data
   10631 reference is `data_reference', where `data_reference_p' is a name of a
   10632 pointer to the data reference structure. The structure contains the
   10633 following elements:
   10634 
   10635    * `base_object_info': Provides information about the base object of
   10636      the data reference and its access functions. These access functions
   10637      represent the evolution of the data reference in the loop relative
   10638      to its base, in keeping with the classical meaning of the data
   10639      reference access function for the support of arrays. For example,
   10640      for a reference `a.b[i][j]', the base object is `a.b' and the
   10641      access functions, one for each array subscript, are: `{i_init, +
   10642      i_step}_1, {j_init, +, j_step}_2'.
   10643 
   10644    * `first_location_in_loop': Provides information about the first
   10645      location accessed by the data reference in the loop and about the
   10646      access function used to represent evolution relative to this
   10647      location. This data is used to support pointers, and is not used
   10648      for arrays (for which we have base objects). Pointer accesses are
   10649      represented as a one-dimensional access that starts from the first
   10650      location accessed in the loop. For example:
   10651 
   10652                 for1 i
   10653                    for2 j
   10654                     *((int *)p + i + j) = a[i][j];
   10655 
   10656      The access function of the pointer access is `{0, + 4B}_for2'
   10657      relative to `p + i'. The access functions of the array are
   10658      `{i_init, + i_step}_for1' and `{j_init, +, j_step}_for2' relative
   10659      to `a'.
   10660 
   10661      Usually, the object the pointer refers to is either unknown, or we
   10662      can't prove that the access is confined to the boundaries of a
   10663      certain object.
   10664 
   10665      Two data references can be compared only if at least one of these
   10666      two representations has all its fields filled for both data
   10667      references.
   10668 
   10669      The current strategy for data dependence tests is as follows: If
   10670      both `a' and `b' are represented as arrays, compare
   10671      `a.base_object' and `b.base_object'; if they are equal, apply
   10672      dependence tests (use access functions based on base_objects).
   10673      Else if both `a' and `b' are represented as pointers, compare
   10674      `a.first_location' and `b.first_location'; if they are equal,
   10675      apply dependence tests (use access functions based on first
   10676      location).  However, if `a' and `b' are represented differently,
   10677      only try to prove that the bases are definitely different.
   10678 
   10679    * Aliasing information.
   10680 
   10681    * Alignment information.
   10682 
   10683  The structure describing the relation between two data references is
   10684 `data_dependence_relation' and the shorter name for a pointer to such a
   10685 structure is `ddr_p'.  This structure contains:
   10686 
   10687    * a pointer to each data reference,
   10688 
   10689    * a tree node `are_dependent' that is set to `chrec_known' if the
   10690      analysis has proved that there is no dependence between these two
   10691      data references, `chrec_dont_know' if the analysis was not able to
   10692      determine any useful result and potentially there could exist a
   10693      dependence between these data references, and `are_dependent' is
   10694      set to `NULL_TREE' if there exist a dependence relation between the
   10695      data references, and the description of this dependence relation is
   10696      given in the `subscripts', `dir_vects', and `dist_vects' arrays,
   10697 
   10698    * a boolean that determines whether the dependence relation can be
   10699      represented by a classical distance vector,
   10700 
   10701    * an array `subscripts' that contains a description of each
   10702      subscript of the data references.  Given two array accesses a
   10703      subscript is the tuple composed of the access functions for a given
   10704      dimension.  For example, given `A[f1][f2][f3]' and
   10705      `B[g1][g2][g3]', there are three subscripts: `(f1, g1), (f2, g2),
   10706      (f3, g3)'.
   10707 
   10708    * two arrays `dir_vects' and `dist_vects' that contain classical
   10709      representations of the data dependences under the form of
   10710      direction and distance dependence vectors,
   10711 
   10712    * an array of loops `loop_nest' that contains the loops to which the
   10713      distance and direction vectors refer to.
   10714 
   10715  Several functions for pretty printing the information extracted by the
   10716 data dependence analysis are available: `dump_ddrs' prints with a
   10717 maximum verbosity the details of a data dependence relations array,
   10718 `dump_dist_dir_vectors' prints only the classical distance and
   10719 direction vectors for a data dependence relations array, and
   10720 `dump_data_references' prints the details of the data references
   10721 contained in a data reference array.
   10722 
   10723 
   10724 File: gccint.info,  Node: Lambda,  Next: Omega,  Prev: Dependency analysis,  Up: Loop Analysis and Representation
   10725 
   10726 11.9 Linear loop transformations framework
   10727 ==========================================
   10728 
   10729 Lambda is a framework that allows transformations of loops using
   10730 non-singular matrix based transformations of the iteration space and
   10731 loop bounds. This allows compositions of skewing, scaling, interchange,
   10732 and reversal transformations.  These transformations are often used to
   10733 improve cache behavior or remove inner loop dependencies to allow
   10734 parallelization and vectorization to take place.
   10735 
   10736  To perform these transformations, Lambda requires that the loopnest be
   10737 converted into a internal form that can be matrix transformed easily.
   10738 To do this conversion, the function `gcc_loopnest_to_lambda_loopnest'
   10739 is provided.  If the loop cannot be transformed using lambda, this
   10740 function will return NULL.
   10741 
   10742  Once a `lambda_loopnest' is obtained from the conversion function, it
   10743 can be transformed by using `lambda_loopnest_transform', which takes a
   10744 transformation matrix to apply.  Note that it is up to the caller to
   10745 verify that the transformation matrix is legal to apply to the loop
   10746 (dependence respecting, etc).  Lambda simply applies whatever matrix it
   10747 is told to provide.  It can be extended to make legal matrices out of
   10748 any non-singular matrix, but this is not currently implemented.
   10749 Legality of a matrix for a given loopnest can be verified using
   10750 `lambda_transform_legal_p'.
   10751 
   10752  Given a transformed loopnest, conversion back into gcc IR is done by
   10753 `lambda_loopnest_to_gcc_loopnest'.  This function will modify the loops
   10754 so that they match the transformed loopnest.
   10755 
   10756 
   10757 File: gccint.info,  Node: Omega,  Prev: Lambda,  Up: Loop Analysis and Representation
   10758 
   10759 11.10 Omega a solver for linear programming problems
   10760 ====================================================
   10761 
   10762 The data dependence analysis contains several solvers triggered
   10763 sequentially from the less complex ones to the more sophisticated.  For
   10764 ensuring the consistency of the results of these solvers, a data
   10765 dependence check pass has been implemented based on two different
   10766 solvers.  The second method that has been integrated to GCC is based on
   10767 the Omega dependence solver, written in the 1990's by William Pugh and
   10768 David Wonnacott.  Data dependence tests can be formulated using a
   10769 subset of the Presburger arithmetics that can be translated to linear
   10770 constraint systems.  These linear constraint systems can then be solved
   10771 using the Omega solver.
   10772 
   10773  The Omega solver is using Fourier-Motzkin's algorithm for variable
   10774 elimination: a linear constraint system containing `n' variables is
   10775 reduced to a linear constraint system with `n-1' variables.  The Omega
   10776 solver can also be used for solving other problems that can be
   10777 expressed under the form of a system of linear equalities and
   10778 inequalities.  The Omega solver is known to have an exponential worst
   10779 case, also known under the name of "omega nightmare" in the literature,
   10780 but in practice, the omega test is known to be efficient for the common
   10781 data dependence tests.
   10782 
   10783  The interface used by the Omega solver for describing the linear
   10784 programming problems is described in `omega.h', and the solver is
   10785 `omega_solve_problem'.
   10786 
   10787 
   10788 File: gccint.info,  Node: RTL,  Next: Control Flow,  Prev: Trees,  Up: Top
   10789 
   10790 12 RTL Representation
   10791 *********************
   10792 
   10793 Most of the work of the compiler is done on an intermediate
   10794 representation called register transfer language.  In this language,
   10795 the instructions to be output are described, pretty much one by one, in
   10796 an algebraic form that describes what the instruction does.
   10797 
   10798  RTL is inspired by Lisp lists.  It has both an internal form, made up
   10799 of structures that point at other structures, and a textual form that
   10800 is used in the machine description and in printed debugging dumps.  The
   10801 textual form uses nested parentheses to indicate the pointers in the
   10802 internal form.
   10803 
   10804 * Menu:
   10805 
   10806 * RTL Objects::       Expressions vs vectors vs strings vs integers.
   10807 * RTL Classes::       Categories of RTL expression objects, and their structure.
   10808 * Accessors::         Macros to access expression operands or vector elts.
   10809 * Special Accessors:: Macros to access specific annotations on RTL.
   10810 * Flags::             Other flags in an RTL expression.
   10811 * Machine Modes::     Describing the size and format of a datum.
   10812 * Constants::         Expressions with constant values.
   10813 * Regs and Memory::   Expressions representing register contents or memory.
   10814 * Arithmetic::        Expressions representing arithmetic on other expressions.
   10815 * Comparisons::       Expressions representing comparison of expressions.
   10816 * Bit-Fields::        Expressions representing bit-fields in memory or reg.
   10817 * Vector Operations:: Expressions involving vector datatypes.
   10818 * Conversions::       Extending, truncating, floating or fixing.
   10819 * RTL Declarations::  Declaring volatility, constancy, etc.
   10820 * Side Effects::      Expressions for storing in registers, etc.
   10821 * Incdec::            Embedded side-effects for autoincrement addressing.
   10822 * Assembler::         Representing `asm' with operands.
   10823 * Insns::             Expression types for entire insns.
   10824 * Calls::             RTL representation of function call insns.
   10825 * Sharing::           Some expressions are unique; others *must* be copied.
   10826 * Reading RTL::       Reading textual RTL from a file.
   10827 
   10828 
   10829 File: gccint.info,  Node: RTL Objects,  Next: RTL Classes,  Up: RTL
   10830 
   10831 12.1 RTL Object Types
   10832 =====================
   10833 
   10834 RTL uses five kinds of objects: expressions, integers, wide integers,
   10835 strings and vectors.  Expressions are the most important ones.  An RTL
   10836 expression ("RTX", for short) is a C structure, but it is usually
   10837 referred to with a pointer; a type that is given the typedef name `rtx'.
   10838 
   10839  An integer is simply an `int'; their written form uses decimal digits.
   10840 A wide integer is an integral object whose type is `HOST_WIDE_INT';
   10841 their written form uses decimal digits.
   10842 
   10843  A string is a sequence of characters.  In core it is represented as a
   10844 `char *' in usual C fashion, and it is written in C syntax as well.
   10845 However, strings in RTL may never be null.  If you write an empty
   10846 string in a machine description, it is represented in core as a null
   10847 pointer rather than as a pointer to a null character.  In certain
   10848 contexts, these null pointers instead of strings are valid.  Within RTL
   10849 code, strings are most commonly found inside `symbol_ref' expressions,
   10850 but they appear in other contexts in the RTL expressions that make up
   10851 machine descriptions.
   10852 
   10853  In a machine description, strings are normally written with double
   10854 quotes, as you would in C.  However, strings in machine descriptions may
   10855 extend over many lines, which is invalid C, and adjacent string
   10856 constants are not concatenated as they are in C.  Any string constant
   10857 may be surrounded with a single set of parentheses.  Sometimes this
   10858 makes the machine description easier to read.
   10859 
   10860  There is also a special syntax for strings, which can be useful when C
   10861 code is embedded in a machine description.  Wherever a string can
   10862 appear, it is also valid to write a C-style brace block.  The entire
   10863 brace block, including the outermost pair of braces, is considered to be
   10864 the string constant.  Double quote characters inside the braces are not
   10865 special.  Therefore, if you write string constants in the C code, you
   10866 need not escape each quote character with a backslash.
   10867 
   10868  A vector contains an arbitrary number of pointers to expressions.  The
   10869 number of elements in the vector is explicitly present in the vector.
   10870 The written form of a vector consists of square brackets (`[...]')
   10871 surrounding the elements, in sequence and with whitespace separating
   10872 them.  Vectors of length zero are not created; null pointers are used
   10873 instead.
   10874 
   10875  Expressions are classified by "expression codes" (also called RTX
   10876 codes).  The expression code is a name defined in `rtl.def', which is
   10877 also (in uppercase) a C enumeration constant.  The possible expression
   10878 codes and their meanings are machine-independent.  The code of an RTX
   10879 can be extracted with the macro `GET_CODE (X)' and altered with
   10880 `PUT_CODE (X, NEWCODE)'.
   10881 
   10882  The expression code determines how many operands the expression
   10883 contains, and what kinds of objects they are.  In RTL, unlike Lisp, you
   10884 cannot tell by looking at an operand what kind of object it is.
   10885 Instead, you must know from its context--from the expression code of
   10886 the containing expression.  For example, in an expression of code
   10887 `subreg', the first operand is to be regarded as an expression and the
   10888 second operand as an integer.  In an expression of code `plus', there
   10889 are two operands, both of which are to be regarded as expressions.  In
   10890 a `symbol_ref' expression, there is one operand, which is to be
   10891 regarded as a string.
   10892 
   10893  Expressions are written as parentheses containing the name of the
   10894 expression type, its flags and machine mode if any, and then the
   10895 operands of the expression (separated by spaces).
   10896 
   10897  Expression code names in the `md' file are written in lowercase, but
   10898 when they appear in C code they are written in uppercase.  In this
   10899 manual, they are shown as follows: `const_int'.
   10900 
   10901  In a few contexts a null pointer is valid where an expression is
   10902 normally wanted.  The written form of this is `(nil)'.
   10903 
   10904 
   10905 File: gccint.info,  Node: RTL Classes,  Next: Accessors,  Prev: RTL Objects,  Up: RTL
   10906 
   10907 12.2 RTL Classes and Formats
   10908 ============================
   10909 
   10910 The various expression codes are divided into several "classes", which
   10911 are represented by single characters.  You can determine the class of
   10912 an RTX code with the macro `GET_RTX_CLASS (CODE)'.  Currently,
   10913 `rtl.def' defines these classes:
   10914 
   10915 `RTX_OBJ'
   10916      An RTX code that represents an actual object, such as a register
   10917      (`REG') or a memory location (`MEM', `SYMBOL_REF').  `LO_SUM') is
   10918      also included; instead, `SUBREG' and `STRICT_LOW_PART' are not in
   10919      this class, but in class `x'.
   10920 
   10921 `RTX_CONST_OBJ'
   10922      An RTX code that represents a constant object.  `HIGH' is also
   10923      included in this class.
   10924 
   10925 `RTX_COMPARE'
   10926      An RTX code for a non-symmetric comparison, such as `GEU' or `LT'.
   10927 
   10928 `RTX_COMM_COMPARE'
   10929      An RTX code for a symmetric (commutative) comparison, such as `EQ'
   10930      or `ORDERED'.
   10931 
   10932 `RTX_UNARY'
   10933      An RTX code for a unary arithmetic operation, such as `NEG',
   10934      `NOT', or `ABS'.  This category also includes value extension
   10935      (sign or zero) and conversions between integer and floating point.
   10936 
   10937 `RTX_COMM_ARITH'
   10938      An RTX code for a commutative binary operation, such as `PLUS' or
   10939      `AND'.  `NE' and `EQ' are comparisons, so they have class `<'.
   10940 
   10941 `RTX_BIN_ARITH'
   10942      An RTX code for a non-commutative binary operation, such as
   10943      `MINUS', `DIV', or `ASHIFTRT'.
   10944 
   10945 `RTX_BITFIELD_OPS'
   10946      An RTX code for a bit-field operation.  Currently only
   10947      `ZERO_EXTRACT' and `SIGN_EXTRACT'.  These have three inputs and
   10948      are lvalues (so they can be used for insertion as well).  *Note
   10949      Bit-Fields::.
   10950 
   10951 `RTX_TERNARY'
   10952      An RTX code for other three input operations.  Currently only
   10953      `IF_THEN_ELSE' and `VEC_MERGE'.
   10954 
   10955 `RTX_INSN'
   10956      An RTX code for an entire instruction:  `INSN', `JUMP_INSN', and
   10957      `CALL_INSN'.  *Note Insns::.
   10958 
   10959 `RTX_MATCH'
   10960      An RTX code for something that matches in insns, such as
   10961      `MATCH_DUP'.  These only occur in machine descriptions.
   10962 
   10963 `RTX_AUTOINC'
   10964      An RTX code for an auto-increment addressing mode, such as
   10965      `POST_INC'.
   10966 
   10967 `RTX_EXTRA'
   10968      All other RTX codes.  This category includes the remaining codes
   10969      used only in machine descriptions (`DEFINE_*', etc.).  It also
   10970      includes all the codes describing side effects (`SET', `USE',
   10971      `CLOBBER', etc.) and the non-insns that may appear on an insn
   10972      chain, such as `NOTE', `BARRIER', and `CODE_LABEL'.  `SUBREG' is
   10973      also part of this class.
   10974 
   10975  For each expression code, `rtl.def' specifies the number of contained
   10976 objects and their kinds using a sequence of characters called the
   10977 "format" of the expression code.  For example, the format of `subreg'
   10978 is `ei'.
   10979 
   10980  These are the most commonly used format characters:
   10981 
   10982 `e'
   10983      An expression (actually a pointer to an expression).
   10984 
   10985 `i'
   10986      An integer.
   10987 
   10988 `w'
   10989      A wide integer.
   10990 
   10991 `s'
   10992      A string.
   10993 
   10994 `E'
   10995      A vector of expressions.
   10996 
   10997  A few other format characters are used occasionally:
   10998 
   10999 `u'
   11000      `u' is equivalent to `e' except that it is printed differently in
   11001      debugging dumps.  It is used for pointers to insns.
   11002 
   11003 `n'
   11004      `n' is equivalent to `i' except that it is printed differently in
   11005      debugging dumps.  It is used for the line number or code number of
   11006      a `note' insn.
   11007 
   11008 `S'
   11009      `S' indicates a string which is optional.  In the RTL objects in
   11010      core, `S' is equivalent to `s', but when the object is read, from
   11011      an `md' file, the string value of this operand may be omitted.  An
   11012      omitted string is taken to be the null string.
   11013 
   11014 `V'
   11015      `V' indicates a vector which is optional.  In the RTL objects in
   11016      core, `V' is equivalent to `E', but when the object is read from
   11017      an `md' file, the vector value of this operand may be omitted.  An
   11018      omitted vector is effectively the same as a vector of no elements.
   11019 
   11020 `B'
   11021      `B' indicates a pointer to basic block structure.
   11022 
   11023 `0'
   11024      `0' means a slot whose contents do not fit any normal category.
   11025      `0' slots are not printed at all in dumps, and are often used in
   11026      special ways by small parts of the compiler.
   11027 
   11028  There are macros to get the number of operands and the format of an
   11029 expression code:
   11030 
   11031 `GET_RTX_LENGTH (CODE)'
   11032      Number of operands of an RTX of code CODE.
   11033 
   11034 `GET_RTX_FORMAT (CODE)'
   11035      The format of an RTX of code CODE, as a C string.
   11036 
   11037  Some classes of RTX codes always have the same format.  For example, it
   11038 is safe to assume that all comparison operations have format `ee'.
   11039 
   11040 `1'
   11041      All codes of this class have format `e'.
   11042 
   11043 `<'
   11044 `c'
   11045 `2'
   11046      All codes of these classes have format `ee'.
   11047 
   11048 `b'
   11049 `3'
   11050      All codes of these classes have format `eee'.
   11051 
   11052 `i'
   11053      All codes of this class have formats that begin with `iuueiee'.
   11054      *Note Insns::.  Note that not all RTL objects linked onto an insn
   11055      chain are of class `i'.
   11056 
   11057 `o'
   11058 `m'
   11059 `x'
   11060      You can make no assumptions about the format of these codes.
   11061 
   11062 
   11063 File: gccint.info,  Node: Accessors,  Next: Special Accessors,  Prev: RTL Classes,  Up: RTL
   11064 
   11065 12.3 Access to Operands
   11066 =======================
   11067 
   11068 Operands of expressions are accessed using the macros `XEXP', `XINT',
   11069 `XWINT' and `XSTR'.  Each of these macros takes two arguments: an
   11070 expression-pointer (RTX) and an operand number (counting from zero).
   11071 Thus,
   11072 
   11073      XEXP (X, 2)
   11074 
   11075 accesses operand 2 of expression X, as an expression.
   11076 
   11077      XINT (X, 2)
   11078 
   11079 accesses the same operand as an integer.  `XSTR', used in the same
   11080 fashion, would access it as a string.
   11081 
   11082  Any operand can be accessed as an integer, as an expression or as a
   11083 string.  You must choose the correct method of access for the kind of
   11084 value actually stored in the operand.  You would do this based on the
   11085 expression code of the containing expression.  That is also how you
   11086 would know how many operands there are.
   11087 
   11088  For example, if X is a `subreg' expression, you know that it has two
   11089 operands which can be correctly accessed as `XEXP (X, 0)' and `XINT (X,
   11090 1)'.  If you did `XINT (X, 0)', you would get the address of the
   11091 expression operand but cast as an integer; that might occasionally be
   11092 useful, but it would be cleaner to write `(int) XEXP (X, 0)'.  `XEXP
   11093 (X, 1)' would also compile without error, and would return the second,
   11094 integer operand cast as an expression pointer, which would probably
   11095 result in a crash when accessed.  Nothing stops you from writing `XEXP
   11096 (X, 28)' either, but this will access memory past the end of the
   11097 expression with unpredictable results.
   11098 
   11099  Access to operands which are vectors is more complicated.  You can use
   11100 the macro `XVEC' to get the vector-pointer itself, or the macros
   11101 `XVECEXP' and `XVECLEN' to access the elements and length of a vector.
   11102 
   11103 `XVEC (EXP, IDX)'
   11104      Access the vector-pointer which is operand number IDX in EXP.
   11105 
   11106 `XVECLEN (EXP, IDX)'
   11107      Access the length (number of elements) in the vector which is in
   11108      operand number IDX in EXP.  This value is an `int'.
   11109 
   11110 `XVECEXP (EXP, IDX, ELTNUM)'
   11111      Access element number ELTNUM in the vector which is in operand
   11112      number IDX in EXP.  This value is an RTX.
   11113 
   11114      It is up to you to make sure that ELTNUM is not negative and is
   11115      less than `XVECLEN (EXP, IDX)'.
   11116 
   11117  All the macros defined in this section expand into lvalues and
   11118 therefore can be used to assign the operands, lengths and vector
   11119 elements as well as to access them.
   11120 
   11121 
   11122 File: gccint.info,  Node: Special Accessors,  Next: Flags,  Prev: Accessors,  Up: RTL
   11123 
   11124 12.4 Access to Special Operands
   11125 ===============================
   11126 
   11127 Some RTL nodes have special annotations associated with them.
   11128 
   11129 `MEM'
   11130 
   11131     `MEM_ALIAS_SET (X)'
   11132           If 0, X is not in any alias set, and may alias anything.
   11133           Otherwise, X can only alias `MEM's in a conflicting alias
   11134           set.  This value is set in a language-dependent manner in the
   11135           front-end, and should not be altered in the back-end.  In
   11136           some front-ends, these numbers may correspond in some way to
   11137           types, or other language-level entities, but they need not,
   11138           and the back-end makes no such assumptions.  These set
   11139           numbers are tested with `alias_sets_conflict_p'.
   11140 
   11141     `MEM_EXPR (X)'
   11142           If this register is known to hold the value of some user-level
   11143           declaration, this is that tree node.  It may also be a
   11144           `COMPONENT_REF', in which case this is some field reference,
   11145           and `TREE_OPERAND (X, 0)' contains the declaration, or
   11146           another `COMPONENT_REF', or null if there is no compile-time
   11147           object associated with the reference.
   11148 
   11149     `MEM_OFFSET (X)'
   11150           The offset from the start of `MEM_EXPR' as a `CONST_INT' rtx.
   11151 
   11152     `MEM_SIZE (X)'
   11153           The size in bytes of the memory reference as a `CONST_INT'
   11154           rtx.  This is mostly relevant for `BLKmode' references as
   11155           otherwise the size is implied by the mode.
   11156 
   11157     `MEM_ALIGN (X)'
   11158           The known alignment in bits of the memory reference.
   11159 
   11160 `REG'
   11161 
   11162     `ORIGINAL_REGNO (X)'
   11163           This field holds the number the register "originally" had;
   11164           for a pseudo register turned into a hard reg this will hold
   11165           the old pseudo register number.
   11166 
   11167     `REG_EXPR (X)'
   11168           If this register is known to hold the value of some user-level
   11169           declaration, this is that tree node.
   11170 
   11171     `REG_OFFSET (X)'
   11172           If this register is known to hold the value of some user-level
   11173           declaration, this is the offset into that logical storage.
   11174 
   11175 `SYMBOL_REF'
   11176 
   11177     `SYMBOL_REF_DECL (X)'
   11178           If the `symbol_ref' X was created for a `VAR_DECL' or a
   11179           `FUNCTION_DECL', that tree is recorded here.  If this value is
   11180           null, then X was created by back end code generation routines,
   11181           and there is no associated front end symbol table entry.
   11182 
   11183           `SYMBOL_REF_DECL' may also point to a tree of class `'c'',
   11184           that is, some sort of constant.  In this case, the
   11185           `symbol_ref' is an entry in the per-file constant pool;
   11186           again, there is no associated front end symbol table entry.
   11187 
   11188     `SYMBOL_REF_CONSTANT (X)'
   11189           If `CONSTANT_POOL_ADDRESS_P (X)' is true, this is the constant
   11190           pool entry for X.  It is null otherwise.
   11191 
   11192     `SYMBOL_REF_DATA (X)'
   11193           A field of opaque type used to store `SYMBOL_REF_DECL' or
   11194           `SYMBOL_REF_CONSTANT'.
   11195 
   11196     `SYMBOL_REF_FLAGS (X)'
   11197           In a `symbol_ref', this is used to communicate various
   11198           predicates about the symbol.  Some of these are common enough
   11199           to be computed by common code, some are specific to the
   11200           target.  The common bits are:
   11201 
   11202          `SYMBOL_FLAG_FUNCTION'
   11203                Set if the symbol refers to a function.
   11204 
   11205          `SYMBOL_FLAG_LOCAL'
   11206                Set if the symbol is local to this "module".  See
   11207                `TARGET_BINDS_LOCAL_P'.
   11208 
   11209          `SYMBOL_FLAG_EXTERNAL'
   11210                Set if this symbol is not defined in this translation
   11211                unit.  Note that this is not the inverse of
   11212                `SYMBOL_FLAG_LOCAL'.
   11213 
   11214          `SYMBOL_FLAG_SMALL'
   11215                Set if the symbol is located in the small data section.
   11216                See `TARGET_IN_SMALL_DATA_P'.
   11217 
   11218          `SYMBOL_REF_TLS_MODEL (X)'
   11219                This is a multi-bit field accessor that returns the
   11220                `tls_model' to be used for a thread-local storage
   11221                symbol.  It returns zero for non-thread-local symbols.
   11222 
   11223          `SYMBOL_FLAG_HAS_BLOCK_INFO'
   11224                Set if the symbol has `SYMBOL_REF_BLOCK' and
   11225                `SYMBOL_REF_BLOCK_OFFSET' fields.
   11226 
   11227          `SYMBOL_FLAG_ANCHOR'
   11228                Set if the symbol is used as a section anchor.  "Section
   11229                anchors" are symbols that have a known position within
   11230                an `object_block' and that can be used to access nearby
   11231                members of that block.  They are used to implement
   11232                `-fsection-anchors'.
   11233 
   11234                If this flag is set, then `SYMBOL_FLAG_HAS_BLOCK_INFO'
   11235                will be too.
   11236 
   11237           Bits beginning with `SYMBOL_FLAG_MACH_DEP' are available for
   11238           the target's use.
   11239 
   11240 `SYMBOL_REF_BLOCK (X)'
   11241      If `SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the `object_block'
   11242      structure to which the symbol belongs, or `NULL' if it has not
   11243      been assigned a block.
   11244 
   11245 `SYMBOL_REF_BLOCK_OFFSET (X)'
   11246      If `SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the offset of X from
   11247      the first object in `SYMBOL_REF_BLOCK (X)'.  The value is negative
   11248      if X has not yet been assigned to a block, or it has not been
   11249      given an offset within that block.
   11250 
   11251 
   11252 File: gccint.info,  Node: Flags,  Next: Machine Modes,  Prev: Special Accessors,  Up: RTL
   11253 
   11254 12.5 Flags in an RTL Expression
   11255 ===============================
   11256 
   11257 RTL expressions contain several flags (one-bit bit-fields) that are
   11258 used in certain types of expression.  Most often they are accessed with
   11259 the following macros, which expand into lvalues.
   11260 
   11261 `CONSTANT_POOL_ADDRESS_P (X)'
   11262      Nonzero in a `symbol_ref' if it refers to part of the current
   11263      function's constant pool.  For most targets these addresses are in
   11264      a `.rodata' section entirely separate from the function, but for
   11265      some targets the addresses are close to the beginning of the
   11266      function.  In either case GCC assumes these addresses can be
   11267      addressed directly, perhaps with the help of base registers.
   11268      Stored in the `unchanging' field and printed as `/u'.
   11269 
   11270 `CONST_OR_PURE_CALL_P (X)'
   11271      In a `call_insn', `note', or an `expr_list' for notes, indicates
   11272      that the insn represents a call to a const or pure function.
   11273      Stored in the `unchanging' field and printed as `/u'.
   11274 
   11275 `INSN_ANNULLED_BRANCH_P (X)'
   11276      In a `jump_insn', `call_insn', or `insn' indicates that the branch
   11277      is an annulling one.  See the discussion under `sequence' below.
   11278      Stored in the `unchanging' field and printed as `/u'.
   11279 
   11280 `INSN_DELETED_P (X)'
   11281      In an `insn', `call_insn', `jump_insn', `code_label', `barrier',
   11282      or `note', nonzero if the insn has been deleted.  Stored in the
   11283      `volatil' field and printed as `/v'.
   11284 
   11285 `INSN_FROM_TARGET_P (X)'
   11286      In an `insn' or `jump_insn' or `call_insn' in a delay slot of a
   11287      branch, indicates that the insn is from the target of the branch.
   11288      If the branch insn has `INSN_ANNULLED_BRANCH_P' set, this insn
   11289      will only be executed if the branch is taken.  For annulled
   11290      branches with `INSN_FROM_TARGET_P' clear, the insn will be
   11291      executed only if the branch is not taken.  When
   11292      `INSN_ANNULLED_BRANCH_P' is not set, this insn will always be
   11293      executed.  Stored in the `in_struct' field and printed as `/s'.
   11294 
   11295 `LABEL_PRESERVE_P (X)'
   11296      In a `code_label' or `note', indicates that the label is
   11297      referenced by code or data not visible to the RTL of a given
   11298      function.  Labels referenced by a non-local goto will have this
   11299      bit set.  Stored in the `in_struct' field and printed as `/s'.
   11300 
   11301 `LABEL_REF_NONLOCAL_P (X)'
   11302      In `label_ref' and `reg_label' expressions, nonzero if this is a
   11303      reference to a non-local label.  Stored in the `volatil' field and
   11304      printed as `/v'.
   11305 
   11306 `MEM_IN_STRUCT_P (X)'
   11307      In `mem' expressions, nonzero for reference to an entire structure,
   11308      union or array, or to a component of one.  Zero for references to a
   11309      scalar variable or through a pointer to a scalar.  If both this
   11310      flag and `MEM_SCALAR_P' are clear, then we don't know whether this
   11311      `mem' is in a structure or not.  Both flags should never be
   11312      simultaneously set.  Stored in the `in_struct' field and printed
   11313      as `/s'.
   11314 
   11315 `MEM_KEEP_ALIAS_SET_P (X)'
   11316      In `mem' expressions, 1 if we should keep the alias set for this
   11317      mem unchanged when we access a component.  Set to 1, for example,
   11318      when we are already in a non-addressable component of an aggregate.
   11319      Stored in the `jump' field and printed as `/j'.
   11320 
   11321 `MEM_SCALAR_P (X)'
   11322      In `mem' expressions, nonzero for reference to a scalar known not
   11323      to be a member of a structure, union, or array.  Zero for such
   11324      references and for indirections through pointers, even pointers
   11325      pointing to scalar types.  If both this flag and `MEM_IN_STRUCT_P'
   11326      are clear, then we don't know whether this `mem' is in a structure
   11327      or not.  Both flags should never be simultaneously set.  Stored in
   11328      the `return_val' field and printed as `/i'.
   11329 
   11330 `MEM_VOLATILE_P (X)'
   11331      In `mem', `asm_operands', and `asm_input' expressions, nonzero for
   11332      volatile memory references.  Stored in the `volatil' field and
   11333      printed as `/v'.
   11334 
   11335 `MEM_NOTRAP_P (X)'
   11336      In `mem', nonzero for memory references that will not trap.
   11337      Stored in the `call' field and printed as `/c'.
   11338 
   11339 `MEM_POINTER (X)'
   11340      Nonzero in a `mem' if the memory reference holds a pointer.
   11341      Stored in the `frame_related' field and printed as `/f'.
   11342 
   11343 `REG_FUNCTION_VALUE_P (X)'
   11344      Nonzero in a `reg' if it is the place in which this function's
   11345      value is going to be returned.  (This happens only in a hard
   11346      register.)  Stored in the `return_val' field and printed as `/i'.
   11347 
   11348 `REG_POINTER (X)'
   11349      Nonzero in a `reg' if the register holds a pointer.  Stored in the
   11350      `frame_related' field and printed as `/f'.
   11351 
   11352 `REG_USERVAR_P (X)'
   11353      In a `reg', nonzero if it corresponds to a variable present in the
   11354      user's source code.  Zero for temporaries generated internally by
   11355      the compiler.  Stored in the `volatil' field and printed as `/v'.
   11356 
   11357      The same hard register may be used also for collecting the values
   11358      of functions called by this one, but `REG_FUNCTION_VALUE_P' is zero
   11359      in this kind of use.
   11360 
   11361 `RTX_FRAME_RELATED_P (X)'
   11362      Nonzero in an `insn', `call_insn', `jump_insn', `barrier', or
   11363      `set' which is part of a function prologue and sets the stack
   11364      pointer, sets the frame pointer, or saves a register.  This flag
   11365      should also be set on an instruction that sets up a temporary
   11366      register to use in place of the frame pointer.  Stored in the
   11367      `frame_related' field and printed as `/f'.
   11368 
   11369      In particular, on RISC targets where there are limits on the sizes
   11370      of immediate constants, it is sometimes impossible to reach the
   11371      register save area directly from the stack pointer.  In that case,
   11372      a temporary register is used that is near enough to the register
   11373      save area, and the Canonical Frame Address, i.e., DWARF2's logical
   11374      frame pointer, register must (temporarily) be changed to be this
   11375      temporary register.  So, the instruction that sets this temporary
   11376      register must be marked as `RTX_FRAME_RELATED_P'.
   11377 
   11378      If the marked instruction is overly complex (defined in terms of
   11379      what `dwarf2out_frame_debug_expr' can handle), you will also have
   11380      to create a `REG_FRAME_RELATED_EXPR' note and attach it to the
   11381      instruction.  This note should contain a simple expression of the
   11382      computation performed by this instruction, i.e., one that
   11383      `dwarf2out_frame_debug_expr' can handle.
   11384 
   11385      This flag is required for exception handling support on targets
   11386      with RTL prologues.
   11387 
   11388 `MEM_READONLY_P (X)'
   11389      Nonzero in a `mem', if the memory is statically allocated and
   11390      read-only.
   11391 
   11392      Read-only in this context means never modified during the lifetime
   11393      of the program, not necessarily in ROM or in write-disabled pages.
   11394      A common example of the later is a shared library's global offset
   11395      table.  This table is initialized by the runtime loader, so the
   11396      memory is technically writable, but after control is transfered
   11397      from the runtime loader to the application, this memory will never
   11398      be subsequently modified.
   11399 
   11400      Stored in the `unchanging' field and printed as `/u'.
   11401 
   11402 `SCHED_GROUP_P (X)'
   11403      During instruction scheduling, in an `insn', `call_insn' or
   11404      `jump_insn', indicates that the previous insn must be scheduled
   11405      together with this insn.  This is used to ensure that certain
   11406      groups of instructions will not be split up by the instruction
   11407      scheduling pass, for example, `use' insns before a `call_insn' may
   11408      not be separated from the `call_insn'.  Stored in the `in_struct'
   11409      field and printed as `/s'.
   11410 
   11411 `SET_IS_RETURN_P (X)'
   11412      For a `set', nonzero if it is for a return.  Stored in the `jump'
   11413      field and printed as `/j'.
   11414 
   11415 `SIBLING_CALL_P (X)'
   11416      For a `call_insn', nonzero if the insn is a sibling call.  Stored
   11417      in the `jump' field and printed as `/j'.
   11418 
   11419 `STRING_POOL_ADDRESS_P (X)'
   11420      For a `symbol_ref' expression, nonzero if it addresses this
   11421      function's string constant pool.  Stored in the `frame_related'
   11422      field and printed as `/f'.
   11423 
   11424 `SUBREG_PROMOTED_UNSIGNED_P (X)'
   11425      Returns a value greater then zero for a `subreg' that has
   11426      `SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is
   11427      kept zero-extended, zero if it is kept sign-extended, and less
   11428      then zero if it is extended some other way via the `ptr_extend'
   11429      instruction.  Stored in the `unchanging' field and `volatil'
   11430      field, printed as `/u' and `/v'.  This macro may only be used to
   11431      get the value it may not be used to change the value.  Use
   11432      `SUBREG_PROMOTED_UNSIGNED_SET' to change the value.
   11433 
   11434 `SUBREG_PROMOTED_UNSIGNED_SET (X)'
   11435      Set the `unchanging' and `volatil' fields in a `subreg' to reflect
   11436      zero, sign, or other extension.  If `volatil' is zero, then
   11437      `unchanging' as nonzero means zero extension and as zero means
   11438      sign extension.  If `volatil' is nonzero then some other type of
   11439      extension was done via the `ptr_extend' instruction.
   11440 
   11441 `SUBREG_PROMOTED_VAR_P (X)'
   11442      Nonzero in a `subreg' if it was made when accessing an object that
   11443      was promoted to a wider mode in accord with the `PROMOTED_MODE'
   11444      machine description macro (*note Storage Layout::).  In this case,
   11445      the mode of the `subreg' is the declared mode of the object and
   11446      the mode of `SUBREG_REG' is the mode of the register that holds
   11447      the object.  Promoted variables are always either sign- or
   11448      zero-extended to the wider mode on every assignment.  Stored in
   11449      the `in_struct' field and printed as `/s'.
   11450 
   11451 `SYMBOL_REF_USED (X)'
   11452      In a `symbol_ref', indicates that X has been used.  This is
   11453      normally only used to ensure that X is only declared external
   11454      once.  Stored in the `used' field.
   11455 
   11456 `SYMBOL_REF_WEAK (X)'
   11457      In a `symbol_ref', indicates that X has been declared weak.
   11458      Stored in the `return_val' field and printed as `/i'.
   11459 
   11460 `SYMBOL_REF_FLAG (X)'
   11461      In a `symbol_ref', this is used as a flag for machine-specific
   11462      purposes.  Stored in the `volatil' field and printed as `/v'.
   11463 
   11464      Most uses of `SYMBOL_REF_FLAG' are historic and may be subsumed by
   11465      `SYMBOL_REF_FLAGS'.  Certainly use of `SYMBOL_REF_FLAGS' is
   11466      mandatory if the target requires more than one bit of storage.
   11467 
   11468  These are the fields to which the above macros refer:
   11469 
   11470 `call'
   11471      In a `mem', 1 means that the memory reference will not trap.
   11472 
   11473      In an RTL dump, this flag is represented as `/c'.
   11474 
   11475 `frame_related'
   11476      In an `insn' or `set' expression, 1 means that it is part of a
   11477      function prologue and sets the stack pointer, sets the frame
   11478      pointer, saves a register, or sets up a temporary register to use
   11479      in place of the frame pointer.
   11480 
   11481      In `reg' expressions, 1 means that the register holds a pointer.
   11482 
   11483      In `mem' expressions, 1 means that the memory reference holds a
   11484      pointer.
   11485 
   11486      In `symbol_ref' expressions, 1 means that the reference addresses
   11487      this function's string constant pool.
   11488 
   11489      In an RTL dump, this flag is represented as `/f'.
   11490 
   11491 `in_struct'
   11492      In `mem' expressions, it is 1 if the memory datum referred to is
   11493      all or part of a structure or array; 0 if it is (or might be) a
   11494      scalar variable.  A reference through a C pointer has 0 because
   11495      the pointer might point to a scalar variable.  This information
   11496      allows the compiler to determine something about possible cases of
   11497      aliasing.
   11498 
   11499      In `reg' expressions, it is 1 if the register has its entire life
   11500      contained within the test expression of some loop.
   11501 
   11502      In `subreg' expressions, 1 means that the `subreg' is accessing an
   11503      object that has had its mode promoted from a wider mode.
   11504 
   11505      In `label_ref' expressions, 1 means that the referenced label is
   11506      outside the innermost loop containing the insn in which the
   11507      `label_ref' was found.
   11508 
   11509      In `code_label' expressions, it is 1 if the label may never be
   11510      deleted.  This is used for labels which are the target of
   11511      non-local gotos.  Such a label that would have been deleted is
   11512      replaced with a `note' of type `NOTE_INSN_DELETED_LABEL'.
   11513 
   11514      In an `insn' during dead-code elimination, 1 means that the insn is
   11515      dead code.
   11516 
   11517      In an `insn' or `jump_insn' during reorg for an insn in the delay
   11518      slot of a branch, 1 means that this insn is from the target of the
   11519      branch.
   11520 
   11521      In an `insn' during instruction scheduling, 1 means that this insn
   11522      must be scheduled as part of a group together with the previous
   11523      insn.
   11524 
   11525      In an RTL dump, this flag is represented as `/s'.
   11526 
   11527 `return_val'
   11528      In `reg' expressions, 1 means the register contains the value to
   11529      be returned by the current function.  On machines that pass
   11530      parameters in registers, the same register number may be used for
   11531      parameters as well, but this flag is not set on such uses.
   11532 
   11533      In `mem' expressions, 1 means the memory reference is to a scalar
   11534      known not to be a member of a structure, union, or array.
   11535 
   11536      In `symbol_ref' expressions, 1 means the referenced symbol is weak.
   11537 
   11538      In an RTL dump, this flag is represented as `/i'.
   11539 
   11540 `jump'
   11541      In a `mem' expression, 1 means we should keep the alias set for
   11542      this mem unchanged when we access a component.
   11543 
   11544      In a `set', 1 means it is for a return.
   11545 
   11546      In a `call_insn', 1 means it is a sibling call.
   11547 
   11548      In an RTL dump, this flag is represented as `/j'.
   11549 
   11550 `unchanging'
   11551      In `reg' and `mem' expressions, 1 means that the value of the
   11552      expression never changes.
   11553 
   11554      In `subreg' expressions, it is 1 if the `subreg' references an
   11555      unsigned object whose mode has been promoted to a wider mode.
   11556 
   11557      In an `insn' or `jump_insn' in the delay slot of a branch
   11558      instruction, 1 means an annulling branch should be used.
   11559 
   11560      In a `symbol_ref' expression, 1 means that this symbol addresses
   11561      something in the per-function constant pool.
   11562 
   11563      In a `call_insn', `note', or an `expr_list' of notes, 1 means that
   11564      this instruction is a call to a const or pure function.
   11565 
   11566      In an RTL dump, this flag is represented as `/u'.
   11567 
   11568 `used'
   11569      This flag is used directly (without an access macro) at the end of
   11570      RTL generation for a function, to count the number of times an
   11571      expression appears in insns.  Expressions that appear more than
   11572      once are copied, according to the rules for shared structure
   11573      (*note Sharing::).
   11574 
   11575      For a `reg', it is used directly (without an access macro) by the
   11576      leaf register renumbering code to ensure that each register is only
   11577      renumbered once.
   11578 
   11579      In a `symbol_ref', it indicates that an external declaration for
   11580      the symbol has already been written.
   11581 
   11582 `volatil'
   11583      In a `mem', `asm_operands', or `asm_input' expression, it is 1 if
   11584      the memory reference is volatile.  Volatile memory references may
   11585      not be deleted, reordered or combined.
   11586 
   11587      In a `symbol_ref' expression, it is used for machine-specific
   11588      purposes.
   11589 
   11590      In a `reg' expression, it is 1 if the value is a user-level
   11591      variable.  0 indicates an internal compiler temporary.
   11592 
   11593      In an `insn', 1 means the insn has been deleted.
   11594 
   11595      In `label_ref' and `reg_label' expressions, 1 means a reference to
   11596      a non-local label.
   11597 
   11598      In an RTL dump, this flag is represented as `/v'.
   11599 
   11600 
   11601 File: gccint.info,  Node: Machine Modes,  Next: Constants,  Prev: Flags,  Up: RTL
   11602 
   11603 12.6 Machine Modes
   11604 ==================
   11605 
   11606 A machine mode describes a size of data object and the representation
   11607 used for it.  In the C code, machine modes are represented by an
   11608 enumeration type, `enum machine_mode', defined in `machmode.def'.  Each
   11609 RTL expression has room for a machine mode and so do certain kinds of
   11610 tree expressions (declarations and types, to be precise).
   11611 
   11612  In debugging dumps and machine descriptions, the machine mode of an RTL
   11613 expression is written after the expression code with a colon to separate
   11614 them.  The letters `mode' which appear at the end of each machine mode
   11615 name are omitted.  For example, `(reg:SI 38)' is a `reg' expression
   11616 with machine mode `SImode'.  If the mode is `VOIDmode', it is not
   11617 written at all.
   11618 
   11619  Here is a table of machine modes.  The term "byte" below refers to an
   11620 object of `BITS_PER_UNIT' bits (*note Storage Layout::).
   11621 
   11622 `BImode'
   11623      "Bit" mode represents a single bit, for predicate registers.
   11624 
   11625 `QImode'
   11626      "Quarter-Integer" mode represents a single byte treated as an
   11627      integer.
   11628 
   11629 `HImode'
   11630      "Half-Integer" mode represents a two-byte integer.
   11631 
   11632 `PSImode'
   11633      "Partial Single Integer" mode represents an integer which occupies
   11634      four bytes but which doesn't really use all four.  On some
   11635      machines, this is the right mode to use for pointers.
   11636 
   11637 `SImode'
   11638      "Single Integer" mode represents a four-byte integer.
   11639 
   11640 `PDImode'
   11641      "Partial Double Integer" mode represents an integer which occupies
   11642      eight bytes but which doesn't really use all eight.  On some
   11643      machines, this is the right mode to use for certain pointers.
   11644 
   11645 `DImode'
   11646      "Double Integer" mode represents an eight-byte integer.
   11647 
   11648 `TImode'
   11649      "Tetra Integer" (?) mode represents a sixteen-byte integer.
   11650 
   11651 `OImode'
   11652      "Octa Integer" (?) mode represents a thirty-two-byte integer.
   11653 
   11654 `QFmode'
   11655      "Quarter-Floating" mode represents a quarter-precision (single
   11656      byte) floating point number.
   11657 
   11658 `HFmode'
   11659      "Half-Floating" mode represents a half-precision (two byte)
   11660      floating point number.
   11661 
   11662 `TQFmode'
   11663      "Three-Quarter-Floating" (?) mode represents a
   11664      three-quarter-precision (three byte) floating point number.
   11665 
   11666 `SFmode'
   11667      "Single Floating" mode represents a four byte floating point
   11668      number.  In the common case, of a processor with IEEE arithmetic
   11669      and 8-bit bytes, this is a single-precision IEEE floating point
   11670      number; it can also be used for double-precision (on processors
   11671      with 16-bit bytes) and single-precision VAX and IBM types.
   11672 
   11673 `DFmode'
   11674      "Double Floating" mode represents an eight byte floating point
   11675      number.  In the common case, of a processor with IEEE arithmetic
   11676      and 8-bit bytes, this is a double-precision IEEE floating point
   11677      number.
   11678 
   11679 `XFmode'
   11680      "Extended Floating" mode represents an IEEE extended floating point
   11681      number.  This mode only has 80 meaningful bits (ten bytes).  Some
   11682      processors require such numbers to be padded to twelve bytes,
   11683      others to sixteen; this mode is used for either.
   11684 
   11685 `SDmode'
   11686      "Single Decimal Floating" mode represents a four byte decimal
   11687      floating point number (as distinct from conventional binary
   11688      floating point).
   11689 
   11690 `DDmode'
   11691      "Double Decimal Floating" mode represents an eight byte decimal
   11692      floating point number.
   11693 
   11694 `TDmode'
   11695      "Tetra Decimal Floating" mode represents a sixteen byte decimal
   11696      floating point number all 128 of whose bits are meaningful.
   11697 
   11698 `TFmode'
   11699      "Tetra Floating" mode represents a sixteen byte floating point
   11700      number all 128 of whose bits are meaningful.  One common use is the
   11701      IEEE quad-precision format.
   11702 
   11703 `QQmode'
   11704      "Quarter-Fractional" mode represents a single byte treated as a
   11705      signed fractional number.  The default format is "s.7".
   11706 
   11707 `HQmode'
   11708      "Half-Fractional" mode represents a two-byte signed fractional
   11709      number.  The default format is "s.15".
   11710 
   11711 `SQmode'
   11712      "Single Fractional" mode represents a four-byte signed fractional
   11713      number.  The default format is "s.31".
   11714 
   11715 `DQmode'
   11716      "Double Fractional" mode represents an eight-byte signed
   11717      fractional number.  The default format is "s.63".
   11718 
   11719 `TQmode'
   11720      "Tetra Fractional" mode represents a sixteen-byte signed
   11721      fractional number.  The default format is "s.127".
   11722 
   11723 `UQQmode'
   11724      "Unsigned Quarter-Fractional" mode represents a single byte
   11725      treated as an unsigned fractional number.  The default format is
   11726      ".8".
   11727 
   11728 `UHQmode'
   11729      "Unsigned Half-Fractional" mode represents a two-byte unsigned
   11730      fractional number.  The default format is ".16".
   11731 
   11732 `USQmode'
   11733      "Unsigned Single Fractional" mode represents a four-byte unsigned
   11734      fractional number.  The default format is ".32".
   11735 
   11736 `UDQmode'
   11737      "Unsigned Double Fractional" mode represents an eight-byte unsigned
   11738      fractional number.  The default format is ".64".
   11739 
   11740 `UTQmode'
   11741      "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned
   11742      fractional number.  The default format is ".128".
   11743 
   11744 `HAmode'
   11745      "Half-Accumulator" mode represents a two-byte signed accumulator.
   11746      The default format is "s8.7".
   11747 
   11748 `SAmode'
   11749      "Single Accumulator" mode represents a four-byte signed
   11750      accumulator.  The default format is "s16.15".
   11751 
   11752 `DAmode'
   11753      "Double Accumulator" mode represents an eight-byte signed
   11754      accumulator.  The default format is "s32.31".
   11755 
   11756 `TAmode'
   11757      "Tetra Accumulator" mode represents a sixteen-byte signed
   11758      accumulator.  The default format is "s64.63".
   11759 
   11760 `UHAmode'
   11761      "Unsigned Half-Accumulator" mode represents a two-byte unsigned
   11762      accumulator.  The default format is "8.8".
   11763 
   11764 `USAmode'
   11765      "Unsigned Single Accumulator" mode represents a four-byte unsigned
   11766      accumulator.  The default format is "16.16".
   11767 
   11768 `UDAmode'
   11769      "Unsigned Double Accumulator" mode represents an eight-byte
   11770      unsigned accumulator.  The default format is "32.32".
   11771 
   11772 `UTAmode'
   11773      "Unsigned Tetra Accumulator" mode represents a sixteen-byte
   11774      unsigned accumulator.  The default format is "64.64".
   11775 
   11776 `CCmode'
   11777      "Condition Code" mode represents the value of a condition code,
   11778      which is a machine-specific set of bits used to represent the
   11779      result of a comparison operation.  Other machine-specific modes
   11780      may also be used for the condition code.  These modes are not used
   11781      on machines that use `cc0' (see *note Condition Code::).
   11782 
   11783 `BLKmode'
   11784      "Block" mode represents values that are aggregates to which none of
   11785      the other modes apply.  In RTL, only memory references can have
   11786      this mode, and only if they appear in string-move or vector
   11787      instructions.  On machines which have no such instructions,
   11788      `BLKmode' will not appear in RTL.
   11789 
   11790 `VOIDmode'
   11791      Void mode means the absence of a mode or an unspecified mode.  For
   11792      example, RTL expressions of code `const_int' have mode `VOIDmode'
   11793      because they can be taken to have whatever mode the context
   11794      requires.  In debugging dumps of RTL, `VOIDmode' is expressed by
   11795      the absence of any mode.
   11796 
   11797 `QCmode, HCmode, SCmode, DCmode, XCmode, TCmode'
   11798      These modes stand for a complex number represented as a pair of
   11799      floating point values.  The floating point values are in `QFmode',
   11800      `HFmode', `SFmode', `DFmode', `XFmode', and `TFmode', respectively.
   11801 
   11802 `CQImode, CHImode, CSImode, CDImode, CTImode, COImode'
   11803      These modes stand for a complex number represented as a pair of
   11804      integer values.  The integer values are in `QImode', `HImode',
   11805      `SImode', `DImode', `TImode', and `OImode', respectively.
   11806 
   11807  The machine description defines `Pmode' as a C macro which expands
   11808 into the machine mode used for addresses.  Normally this is the mode
   11809 whose size is `BITS_PER_WORD', `SImode' on 32-bit machines.
   11810 
   11811  The only modes which a machine description must support are `QImode',
   11812 and the modes corresponding to `BITS_PER_WORD', `FLOAT_TYPE_SIZE' and
   11813 `DOUBLE_TYPE_SIZE'.  The compiler will attempt to use `DImode' for
   11814 8-byte structures and unions, but this can be prevented by overriding
   11815 the definition of `MAX_FIXED_MODE_SIZE'.  Alternatively, you can have
   11816 the compiler use `TImode' for 16-byte structures and unions.  Likewise,
   11817 you can arrange for the C type `short int' to avoid using `HImode'.
   11818 
   11819  Very few explicit references to machine modes remain in the compiler
   11820 and these few references will soon be removed.  Instead, the machine
   11821 modes are divided into mode classes.  These are represented by the
   11822 enumeration type `enum mode_class' defined in `machmode.h'.  The
   11823 possible mode classes are:
   11824 
   11825 `MODE_INT'
   11826      Integer modes.  By default these are `BImode', `QImode', `HImode',
   11827      `SImode', `DImode', `TImode', and `OImode'.
   11828 
   11829 `MODE_PARTIAL_INT'
   11830      The "partial integer" modes, `PQImode', `PHImode', `PSImode' and
   11831      `PDImode'.
   11832 
   11833 `MODE_FLOAT'
   11834      Floating point modes.  By default these are `QFmode', `HFmode',
   11835      `TQFmode', `SFmode', `DFmode', `XFmode' and `TFmode'.
   11836 
   11837 `MODE_DECIMAL_FLOAT'
   11838      Decimal floating point modes.  By default these are `SDmode',
   11839      `DDmode' and `TDmode'.
   11840 
   11841 `MODE_FRACT'
   11842      Signed fractional modes.  By default these are `QQmode', `HQmode',
   11843      `SQmode', `DQmode' and `TQmode'.
   11844 
   11845 `MODE_UFRACT'
   11846      Unsigned fractional modes.  By default these are `UQQmode',
   11847      `UHQmode', `USQmode', `UDQmode' and `UTQmode'.
   11848 
   11849 `MODE_ACCUM'
   11850      Signed accumulator modes.  By default these are `HAmode',
   11851      `SAmode', `DAmode' and `TAmode'.
   11852 
   11853 `MODE_UACCUM'
   11854      Unsigned accumulator modes.  By default these are `UHAmode',
   11855      `USAmode', `UDAmode' and `UTAmode'.
   11856 
   11857 `MODE_COMPLEX_INT'
   11858      Complex integer modes.  (These are not currently implemented).
   11859 
   11860 `MODE_COMPLEX_FLOAT'
   11861      Complex floating point modes.  By default these are `QCmode',
   11862      `HCmode', `SCmode', `DCmode', `XCmode', and `TCmode'.
   11863 
   11864 `MODE_FUNCTION'
   11865      Algol or Pascal function variables including a static chain.
   11866      (These are not currently implemented).
   11867 
   11868 `MODE_CC'
   11869      Modes representing condition code values.  These are `CCmode' plus
   11870      any `CC_MODE' modes listed in the `MACHINE-modes.def'.  *Note Jump
   11871      Patterns::, also see *Note Condition Code::.
   11872 
   11873 `MODE_RANDOM'
   11874      This is a catchall mode class for modes which don't fit into the
   11875      above classes.  Currently `VOIDmode' and `BLKmode' are in
   11876      `MODE_RANDOM'.
   11877 
   11878  Here are some C macros that relate to machine modes:
   11879 
   11880 `GET_MODE (X)'
   11881      Returns the machine mode of the RTX X.
   11882 
   11883 `PUT_MODE (X, NEWMODE)'
   11884      Alters the machine mode of the RTX X to be NEWMODE.
   11885 
   11886 `NUM_MACHINE_MODES'
   11887      Stands for the number of machine modes available on the target
   11888      machine.  This is one greater than the largest numeric value of any
   11889      machine mode.
   11890 
   11891 `GET_MODE_NAME (M)'
   11892      Returns the name of mode M as a string.
   11893 
   11894 `GET_MODE_CLASS (M)'
   11895      Returns the mode class of mode M.
   11896 
   11897 `GET_MODE_WIDER_MODE (M)'
   11898      Returns the next wider natural mode.  For example, the expression
   11899      `GET_MODE_WIDER_MODE (QImode)' returns `HImode'.
   11900 
   11901 `GET_MODE_SIZE (M)'
   11902      Returns the size in bytes of a datum of mode M.
   11903 
   11904 `GET_MODE_BITSIZE (M)'
   11905      Returns the size in bits of a datum of mode M.
   11906 
   11907 `GET_MODE_IBIT (M)'
   11908      Returns the number of integral bits of a datum of fixed-point mode
   11909      M.
   11910 
   11911 `GET_MODE_FBIT (M)'
   11912      Returns the number of fractional bits of a datum of fixed-point
   11913      mode M.
   11914 
   11915 `GET_MODE_MASK (M)'
   11916      Returns a bitmask containing 1 for all bits in a word that fit
   11917      within mode M.  This macro can only be used for modes whose
   11918      bitsize is less than or equal to `HOST_BITS_PER_INT'.
   11919 
   11920 `GET_MODE_ALIGNMENT (M)'
   11921      Return the required alignment, in bits, for an object of mode M.
   11922 
   11923 `GET_MODE_UNIT_SIZE (M)'
   11924      Returns the size in bytes of the subunits of a datum of mode M.
   11925      This is the same as `GET_MODE_SIZE' except in the case of complex
   11926      modes.  For them, the unit size is the size of the real or
   11927      imaginary part.
   11928 
   11929 `GET_MODE_NUNITS (M)'
   11930      Returns the number of units contained in a mode, i.e.,
   11931      `GET_MODE_SIZE' divided by `GET_MODE_UNIT_SIZE'.
   11932 
   11933 `GET_CLASS_NARROWEST_MODE (C)'
   11934      Returns the narrowest mode in mode class C.
   11935 
   11936  The global variables `byte_mode' and `word_mode' contain modes whose
   11937 classes are `MODE_INT' and whose bitsizes are either `BITS_PER_UNIT' or
   11938 `BITS_PER_WORD', respectively.  On 32-bit machines, these are `QImode'
   11939 and `SImode', respectively.
   11940 
   11941 
   11942 File: gccint.info,  Node: Constants,  Next: Regs and Memory,  Prev: Machine Modes,  Up: RTL
   11943 
   11944 12.7 Constant Expression Types
   11945 ==============================
   11946 
   11947 The simplest RTL expressions are those that represent constant values.
   11948 
   11949 `(const_int I)'
   11950      This type of expression represents the integer value I.  I is
   11951      customarily accessed with the macro `INTVAL' as in `INTVAL (EXP)',
   11952      which is equivalent to `XWINT (EXP, 0)'.
   11953 
   11954      Constants generated for modes with fewer bits than `HOST_WIDE_INT'
   11955      must be sign extended to full width (e.g., with `gen_int_mode').
   11956 
   11957      There is only one expression object for the integer value zero; it
   11958      is the value of the variable `const0_rtx'.  Likewise, the only
   11959      expression for integer value one is found in `const1_rtx', the only
   11960      expression for integer value two is found in `const2_rtx', and the
   11961      only expression for integer value negative one is found in
   11962      `constm1_rtx'.  Any attempt to create an expression of code
   11963      `const_int' and value zero, one, two or negative one will return
   11964      `const0_rtx', `const1_rtx', `const2_rtx' or `constm1_rtx' as
   11965      appropriate.
   11966 
   11967      Similarly, there is only one object for the integer whose value is
   11968      `STORE_FLAG_VALUE'.  It is found in `const_true_rtx'.  If
   11969      `STORE_FLAG_VALUE' is one, `const_true_rtx' and `const1_rtx' will
   11970      point to the same object.  If `STORE_FLAG_VALUE' is -1,
   11971      `const_true_rtx' and `constm1_rtx' will point to the same object.
   11972 
   11973 `(const_double:M ADDR I0 I1 ...)'
   11974      Represents either a floating-point constant of mode M or an
   11975      integer constant too large to fit into `HOST_BITS_PER_WIDE_INT'
   11976      bits but small enough to fit within twice that number of bits (GCC
   11977      does not provide a mechanism to represent even larger constants).
   11978      In the latter case, M will be `VOIDmode'.
   11979 
   11980 `(const_fixed:M ADDR)'
   11981      Represents a fixed-point constant of mode M.  The data structure,
   11982      which contains data with the size of two `HOST_BITS_PER_WIDE_INT'
   11983      and the associated fixed-point mode, is access with the macro
   11984      `CONST_FIXED_VALUE'.  The high part of data is accessed with
   11985      `CONST_FIXED_VALUE_HIGH'; the low part is accessed with
   11986      `CONST_FIXED_VALUE_LOW'.
   11987 
   11988 `(const_vector:M [X0 X1 ...])'
   11989      Represents a vector constant.  The square brackets stand for the
   11990      vector containing the constant elements.  X0, X1 and so on are the
   11991      `const_int' or `const_double' elements.
   11992 
   11993      The number of units in a `const_vector' is obtained with the macro
   11994      `CONST_VECTOR_NUNITS' as in `CONST_VECTOR_NUNITS (V)'.
   11995 
   11996      Individual elements in a vector constant are accessed with the
   11997      macro `CONST_VECTOR_ELT' as in `CONST_VECTOR_ELT (V, N)' where V
   11998      is the vector constant and N is the element desired.
   11999 
   12000      ADDR is used to contain the `mem' expression that corresponds to
   12001      the location in memory that at which the constant can be found.  If
   12002      it has not been allocated a memory location, but is on the chain
   12003      of all `const_double' expressions in this compilation (maintained
   12004      using an undisplayed field), ADDR contains `const0_rtx'.  If it is
   12005      not on the chain, ADDR contains `cc0_rtx'.  ADDR is customarily
   12006      accessed with the macro `CONST_DOUBLE_MEM' and the chain field via
   12007      `CONST_DOUBLE_CHAIN'.
   12008 
   12009      If M is `VOIDmode', the bits of the value are stored in I0 and I1.
   12010      I0 is customarily accessed with the macro `CONST_DOUBLE_LOW' and
   12011      I1 with `CONST_DOUBLE_HIGH'.
   12012 
   12013      If the constant is floating point (regardless of its precision),
   12014      then the number of integers used to store the value depends on the
   12015      size of `REAL_VALUE_TYPE' (*note Floating Point::).  The integers
   12016      represent a floating point number, but not precisely in the target
   12017      machine's or host machine's floating point format.  To convert
   12018      them to the precise bit pattern used by the target machine, use
   12019      the macro `REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data
   12020      Output::).
   12021 
   12022      The macro `CONST0_RTX (MODE)' refers to an expression with value 0
   12023      in mode MODE.  If mode MODE is of mode class `MODE_INT', it
   12024      returns `const0_rtx'.  If mode MODE is of mode class `MODE_FLOAT',
   12025      it returns a `CONST_DOUBLE' expression in mode MODE.  Otherwise,
   12026      it returns a `CONST_VECTOR' expression in mode MODE.  Similarly,
   12027      the macro `CONST1_RTX (MODE)' refers to an expression with value 1
   12028      in mode MODE and similarly for `CONST2_RTX'.  The `CONST1_RTX' and
   12029      `CONST2_RTX' macros are undefined for vector modes.
   12030 
   12031 `(const_string STR)'
   12032      Represents a constant string with value STR.  Currently this is
   12033      used only for insn attributes (*note Insn Attributes::) since
   12034      constant strings in C are placed in memory.
   12035 
   12036 `(symbol_ref:MODE SYMBOL)'
   12037      Represents the value of an assembler label for data.  SYMBOL is a
   12038      string that describes the name of the assembler label.  If it
   12039      starts with a `*', the label is the rest of SYMBOL not including
   12040      the `*'.  Otherwise, the label is SYMBOL, usually prefixed with
   12041      `_'.
   12042 
   12043      The `symbol_ref' contains a mode, which is usually `Pmode'.
   12044      Usually that is the only mode for which a symbol is directly valid.
   12045 
   12046 `(label_ref:MODE LABEL)'
   12047      Represents the value of an assembler label for code.  It contains
   12048      one operand, an expression, which must be a `code_label' or a
   12049      `note' of type `NOTE_INSN_DELETED_LABEL' that appears in the
   12050      instruction sequence to identify the place where the label should
   12051      go.
   12052 
   12053      The reason for using a distinct expression type for code label
   12054      references is so that jump optimization can distinguish them.
   12055 
   12056      The `label_ref' contains a mode, which is usually `Pmode'.
   12057      Usually that is the only mode for which a label is directly valid.
   12058 
   12059 `(const:M EXP)'
   12060      Represents a constant that is the result of an assembly-time
   12061      arithmetic computation.  The operand, EXP, is an expression that
   12062      contains only constants (`const_int', `symbol_ref' and `label_ref'
   12063      expressions) combined with `plus' and `minus'.  However, not all
   12064      combinations are valid, since the assembler cannot do arbitrary
   12065      arithmetic on relocatable symbols.
   12066 
   12067      M should be `Pmode'.
   12068 
   12069 `(high:M EXP)'
   12070      Represents the high-order bits of EXP, usually a `symbol_ref'.
   12071      The number of bits is machine-dependent and is normally the number
   12072      of bits specified in an instruction that initializes the high
   12073      order bits of a register.  It is used with `lo_sum' to represent
   12074      the typical two-instruction sequence used in RISC machines to
   12075      reference a global memory location.
   12076 
   12077      M should be `Pmode'.
   12078 
   12079 
   12080 File: gccint.info,  Node: Regs and Memory,  Next: Arithmetic,  Prev: Constants,  Up: RTL
   12081 
   12082 12.8 Registers and Memory
   12083 =========================
   12084 
   12085 Here are the RTL expression types for describing access to machine
   12086 registers and to main memory.
   12087 
   12088 `(reg:M N)'
   12089      For small values of the integer N (those that are less than
   12090      `FIRST_PSEUDO_REGISTER'), this stands for a reference to machine
   12091      register number N: a "hard register".  For larger values of N, it
   12092      stands for a temporary value or "pseudo register".  The compiler's
   12093      strategy is to generate code assuming an unlimited number of such
   12094      pseudo registers, and later convert them into hard registers or
   12095      into memory references.
   12096 
   12097      M is the machine mode of the reference.  It is necessary because
   12098      machines can generally refer to each register in more than one
   12099      mode.  For example, a register may contain a full word but there
   12100      may be instructions to refer to it as a half word or as a single
   12101      byte, as well as instructions to refer to it as a floating point
   12102      number of various precisions.
   12103 
   12104      Even for a register that the machine can access in only one mode,
   12105      the mode must always be specified.
   12106 
   12107      The symbol `FIRST_PSEUDO_REGISTER' is defined by the machine
   12108      description, since the number of hard registers on the machine is
   12109      an invariant characteristic of the machine.  Note, however, that
   12110      not all of the machine registers must be general registers.  All
   12111      the machine registers that can be used for storage of data are
   12112      given hard register numbers, even those that can be used only in
   12113      certain instructions or can hold only certain types of data.
   12114 
   12115      A hard register may be accessed in various modes throughout one
   12116      function, but each pseudo register is given a natural mode and is
   12117      accessed only in that mode.  When it is necessary to describe an
   12118      access to a pseudo register using a nonnatural mode, a `subreg'
   12119      expression is used.
   12120 
   12121      A `reg' expression with a machine mode that specifies more than
   12122      one word of data may actually stand for several consecutive
   12123      registers.  If in addition the register number specifies a
   12124      hardware register, then it actually represents several consecutive
   12125      hardware registers starting with the specified one.
   12126 
   12127      Each pseudo register number used in a function's RTL code is
   12128      represented by a unique `reg' expression.
   12129 
   12130      Some pseudo register numbers, those within the range of
   12131      `FIRST_VIRTUAL_REGISTER' to `LAST_VIRTUAL_REGISTER' only appear
   12132      during the RTL generation phase and are eliminated before the
   12133      optimization phases.  These represent locations in the stack frame
   12134      that cannot be determined until RTL generation for the function
   12135      has been completed.  The following virtual register numbers are
   12136      defined:
   12137 
   12138     `VIRTUAL_INCOMING_ARGS_REGNUM'
   12139           This points to the first word of the incoming arguments
   12140           passed on the stack.  Normally these arguments are placed
   12141           there by the caller, but the callee may have pushed some
   12142           arguments that were previously passed in registers.
   12143 
   12144           When RTL generation is complete, this virtual register is
   12145           replaced by the sum of the register given by
   12146           `ARG_POINTER_REGNUM' and the value of `FIRST_PARM_OFFSET'.
   12147 
   12148     `VIRTUAL_STACK_VARS_REGNUM'
   12149           If `FRAME_GROWS_DOWNWARD' is defined to a nonzero value, this
   12150           points to immediately above the first variable on the stack.
   12151           Otherwise, it points to the first variable on the stack.
   12152 
   12153           `VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the
   12154           register given by `FRAME_POINTER_REGNUM' and the value
   12155           `STARTING_FRAME_OFFSET'.
   12156 
   12157     `VIRTUAL_STACK_DYNAMIC_REGNUM'
   12158           This points to the location of dynamically allocated memory
   12159           on the stack immediately after the stack pointer has been
   12160           adjusted by the amount of memory desired.
   12161 
   12162           This virtual register is replaced by the sum of the register
   12163           given by `STACK_POINTER_REGNUM' and the value
   12164           `STACK_DYNAMIC_OFFSET'.
   12165 
   12166     `VIRTUAL_OUTGOING_ARGS_REGNUM'
   12167           This points to the location in the stack at which outgoing
   12168           arguments should be written when the stack is pre-pushed
   12169           (arguments pushed using push insns should always use
   12170           `STACK_POINTER_REGNUM').
   12171 
   12172           This virtual register is replaced by the sum of the register
   12173           given by `STACK_POINTER_REGNUM' and the value
   12174           `STACK_POINTER_OFFSET'.
   12175 
   12176 `(subreg:M REG BYTENUM)'
   12177      `subreg' expressions are used to refer to a register in a machine
   12178      mode other than its natural one, or to refer to one register of a
   12179      multi-part `reg' that actually refers to several registers.
   12180 
   12181      Each pseudo-register has a natural mode.  If it is necessary to
   12182      operate on it in a different mode--for example, to perform a
   12183      fullword move instruction on a pseudo-register that contains a
   12184      single byte--the pseudo-register must be enclosed in a `subreg'.
   12185      In such a case, BYTENUM is zero.
   12186 
   12187      Usually M is at least as narrow as the mode of REG, in which case
   12188      it is restricting consideration to only the bits of REG that are
   12189      in M.
   12190 
   12191      Sometimes M is wider than the mode of REG.  These `subreg'
   12192      expressions are often called "paradoxical".  They are used in
   12193      cases where we want to refer to an object in a wider mode but do
   12194      not care what value the additional bits have.  The reload pass
   12195      ensures that paradoxical references are only made to hard
   12196      registers.
   12197 
   12198      The other use of `subreg' is to extract the individual registers of
   12199      a multi-register value.  Machine modes such as `DImode' and
   12200      `TImode' can indicate values longer than a word, values which
   12201      usually require two or more consecutive registers.  To access one
   12202      of the registers, use a `subreg' with mode `SImode' and a BYTENUM
   12203      offset that says which register.
   12204 
   12205      Storing in a non-paradoxical `subreg' has undefined results for
   12206      bits belonging to the same word as the `subreg'.  This laxity makes
   12207      it easier to generate efficient code for such instructions.  To
   12208      represent an instruction that preserves all the bits outside of
   12209      those in the `subreg', use `strict_low_part' around the `subreg'.
   12210 
   12211      The compilation parameter `WORDS_BIG_ENDIAN', if set to 1, says
   12212      that byte number zero is part of the most significant word;
   12213      otherwise, it is part of the least significant word.
   12214 
   12215      The compilation parameter `BYTES_BIG_ENDIAN', if set to 1, says
   12216      that byte number zero is the most significant byte within a word;
   12217      otherwise, it is the least significant byte within a word.
   12218 
   12219      On a few targets, `FLOAT_WORDS_BIG_ENDIAN' disagrees with
   12220      `WORDS_BIG_ENDIAN'.  However, most parts of the compiler treat
   12221      floating point values as if they had the same endianness as
   12222      integer values.  This works because they handle them solely as a
   12223      collection of integer values, with no particular numerical value.
   12224      Only real.c and the runtime libraries care about
   12225      `FLOAT_WORDS_BIG_ENDIAN'.
   12226 
   12227      Between the combiner pass and the reload pass, it is possible to
   12228      have a paradoxical `subreg' which contains a `mem' instead of a
   12229      `reg' as its first operand.  After the reload pass, it is also
   12230      possible to have a non-paradoxical `subreg' which contains a
   12231      `mem'; this usually occurs when the `mem' is a stack slot which
   12232      replaced a pseudo register.
   12233 
   12234      Note that it is not valid to access a `DFmode' value in `SFmode'
   12235      using a `subreg'.  On some machines the most significant part of a
   12236      `DFmode' value does not have the same format as a single-precision
   12237      floating value.
   12238 
   12239      It is also not valid to access a single word of a multi-word value
   12240      in a hard register when less registers can hold the value than
   12241      would be expected from its size.  For example, some 32-bit
   12242      machines have floating-point registers that can hold an entire
   12243      `DFmode' value.  If register 10 were such a register `(subreg:SI
   12244      (reg:DF 10) 4)' would be invalid because there is no way to
   12245      convert that reference to a single machine register.  The reload
   12246      pass prevents `subreg' expressions such as these from being formed.
   12247 
   12248      The first operand of a `subreg' expression is customarily accessed
   12249      with the `SUBREG_REG' macro and the second operand is customarily
   12250      accessed with the `SUBREG_BYTE' macro.
   12251 
   12252 `(scratch:M)'
   12253      This represents a scratch register that will be required for the
   12254      execution of a single instruction and not used subsequently.  It is
   12255      converted into a `reg' by either the local register allocator or
   12256      the reload pass.
   12257 
   12258      `scratch' is usually present inside a `clobber' operation (*note
   12259      Side Effects::).
   12260 
   12261 `(cc0)'
   12262      This refers to the machine's condition code register.  It has no
   12263      operands and may not have a machine mode.  There are two ways to
   12264      use it:
   12265 
   12266         * To stand for a complete set of condition code flags.  This is
   12267           best on most machines, where each comparison sets the entire
   12268           series of flags.
   12269 
   12270           With this technique, `(cc0)' may be validly used in only two
   12271           contexts: as the destination of an assignment (in test and
   12272           compare instructions) and in comparison operators comparing
   12273           against zero (`const_int' with value zero; that is to say,
   12274           `const0_rtx').
   12275 
   12276         * To stand for a single flag that is the result of a single
   12277           condition.  This is useful on machines that have only a
   12278           single flag bit, and in which comparison instructions must
   12279           specify the condition to test.
   12280 
   12281           With this technique, `(cc0)' may be validly used in only two
   12282           contexts: as the destination of an assignment (in test and
   12283           compare instructions) where the source is a comparison
   12284           operator, and as the first operand of `if_then_else' (in a
   12285           conditional branch).
   12286 
   12287      There is only one expression object of code `cc0'; it is the value
   12288      of the variable `cc0_rtx'.  Any attempt to create an expression of
   12289      code `cc0' will return `cc0_rtx'.
   12290 
   12291      Instructions can set the condition code implicitly.  On many
   12292      machines, nearly all instructions set the condition code based on
   12293      the value that they compute or store.  It is not necessary to
   12294      record these actions explicitly in the RTL because the machine
   12295      description includes a prescription for recognizing the
   12296      instructions that do so (by means of the macro
   12297      `NOTICE_UPDATE_CC').  *Note Condition Code::.  Only instructions
   12298      whose sole purpose is to set the condition code, and instructions
   12299      that use the condition code, need mention `(cc0)'.
   12300 
   12301      On some machines, the condition code register is given a register
   12302      number and a `reg' is used instead of `(cc0)'.  This is usually the
   12303      preferable approach if only a small subset of instructions modify
   12304      the condition code.  Other machines store condition codes in
   12305      general registers; in such cases a pseudo register should be used.
   12306 
   12307      Some machines, such as the SPARC and RS/6000, have two sets of
   12308      arithmetic instructions, one that sets and one that does not set
   12309      the condition code.  This is best handled by normally generating
   12310      the instruction that does not set the condition code, and making a
   12311      pattern that both performs the arithmetic and sets the condition
   12312      code register (which would not be `(cc0)' in this case).  For
   12313      examples, search for `addcc' and `andcc' in `sparc.md'.
   12314 
   12315 `(pc)'
   12316      This represents the machine's program counter.  It has no operands
   12317      and may not have a machine mode.  `(pc)' may be validly used only
   12318      in certain specific contexts in jump instructions.
   12319 
   12320      There is only one expression object of code `pc'; it is the value
   12321      of the variable `pc_rtx'.  Any attempt to create an expression of
   12322      code `pc' will return `pc_rtx'.
   12323 
   12324      All instructions that do not jump alter the program counter
   12325      implicitly by incrementing it, but there is no need to mention
   12326      this in the RTL.
   12327 
   12328 `(mem:M ADDR ALIAS)'
   12329      This RTX represents a reference to main memory at an address
   12330      represented by the expression ADDR.  M specifies how large a unit
   12331      of memory is accessed.  ALIAS specifies an alias set for the
   12332      reference.  In general two items are in different alias sets if
   12333      they cannot reference the same memory address.
   12334 
   12335      The construct `(mem:BLK (scratch))' is considered to alias all
   12336      other memories.  Thus it may be used as a memory barrier in
   12337      epilogue stack deallocation patterns.
   12338 
   12339 `(addressof:M REG)'
   12340      This RTX represents a request for the address of register REG.
   12341      Its mode is always `Pmode'.  If there are any `addressof'
   12342      expressions left in the function after CSE, REG is forced into the
   12343      stack and the `addressof' expression is replaced with a `plus'
   12344      expression for the address of its stack slot.
   12345 
   12346 `(concatM RTX RTX)'
   12347      This RTX represents the concatenation of two other RTXs.  This is
   12348      used for complex values.  It should only appear in the RTL
   12349      attached to declarations and during RTL generation.  It should not
   12350      appear in the ordinary insn chain.
   12351 
   12352 `(concatnM [RTX ...])'
   12353      This RTX represents the concatenation of all the RTX to make a
   12354      single value.  Like `concat', this should only appear in
   12355      declarations, and not in the insn chain.
   12356 
   12357 
   12358 File: gccint.info,  Node: Arithmetic,  Next: Comparisons,  Prev: Regs and Memory,  Up: RTL
   12359 
   12360 12.9 RTL Expressions for Arithmetic
   12361 ===================================
   12362 
   12363 Unless otherwise specified, all the operands of arithmetic expressions
   12364 must be valid for mode M.  An operand is valid for mode M if it has
   12365 mode M, or if it is a `const_int' or `const_double' and M is a mode of
   12366 class `MODE_INT'.
   12367 
   12368  For commutative binary operations, constants should be placed in the
   12369 second operand.
   12370 
   12371 `(plus:M X Y)'
   12372 `(ss_plus:M X Y)'
   12373 `(us_plus:M X Y)'
   12374      These three expressions all represent the sum of the values
   12375      represented by X and Y carried out in machine mode M.  They differ
   12376      in their behavior on overflow of integer modes.  `plus' wraps
   12377      round modulo the width of M; `ss_plus' saturates at the maximum
   12378      signed value representable in M; `us_plus' saturates at the
   12379      maximum unsigned value.
   12380 
   12381 `(lo_sum:M X Y)'
   12382      This expression represents the sum of X and the low-order bits of
   12383      Y.  It is used with `high' (*note Constants::) to represent the
   12384      typical two-instruction sequence used in RISC machines to
   12385      reference a global memory location.
   12386 
   12387      The number of low order bits is machine-dependent but is normally
   12388      the number of bits in a `Pmode' item minus the number of bits set
   12389      by `high'.
   12390 
   12391      M should be `Pmode'.
   12392 
   12393 `(minus:M X Y)'
   12394 `(ss_minus:M X Y)'
   12395 `(us_minus:M X Y)'
   12396      These three expressions represent the result of subtracting Y from
   12397      X, carried out in mode M.  Behavior on overflow is the same as for
   12398      the three variants of `plus' (see above).
   12399 
   12400 `(compare:M X Y)'
   12401      Represents the result of subtracting Y from X for purposes of
   12402      comparison.  The result is computed without overflow, as if with
   12403      infinite precision.
   12404 
   12405      Of course, machines can't really subtract with infinite precision.
   12406      However, they can pretend to do so when only the sign of the
   12407      result will be used, which is the case when the result is stored
   12408      in the condition code.  And that is the _only_ way this kind of
   12409      expression may validly be used: as a value to be stored in the
   12410      condition codes, either `(cc0)' or a register.  *Note
   12411      Comparisons::.
   12412 
   12413      The mode M is not related to the modes of X and Y, but instead is
   12414      the mode of the condition code value.  If `(cc0)' is used, it is
   12415      `VOIDmode'.  Otherwise it is some mode in class `MODE_CC', often
   12416      `CCmode'.  *Note Condition Code::.  If M is `VOIDmode' or
   12417      `CCmode', the operation returns sufficient information (in an
   12418      unspecified format) so that any comparison operator can be applied
   12419      to the result of the `COMPARE' operation.  For other modes in
   12420      class `MODE_CC', the operation only returns a subset of this
   12421      information.
   12422 
   12423      Normally, X and Y must have the same mode.  Otherwise, `compare'
   12424      is valid only if the mode of X is in class `MODE_INT' and Y is a
   12425      `const_int' or `const_double' with mode `VOIDmode'.  The mode of X
   12426      determines what mode the comparison is to be done in; thus it must
   12427      not be `VOIDmode'.
   12428 
   12429      If one of the operands is a constant, it should be placed in the
   12430      second operand and the comparison code adjusted as appropriate.
   12431 
   12432      A `compare' specifying two `VOIDmode' constants is not valid since
   12433      there is no way to know in what mode the comparison is to be
   12434      performed; the comparison must either be folded during the
   12435      compilation or the first operand must be loaded into a register
   12436      while its mode is still known.
   12437 
   12438 `(neg:M X)'
   12439 `(ss_neg:M X)'
   12440 `(us_neg:M X)'
   12441      These two expressions represent the negation (subtraction from
   12442      zero) of the value represented by X, carried out in mode M.  They
   12443      differ in the behavior on overflow of integer modes.  In the case
   12444      of `neg', the negation of the operand may be a number not
   12445      representable in mode M, in which case it is truncated to M.
   12446      `ss_neg' and `us_neg' ensure that an out-of-bounds result
   12447      saturates to the maximum or minimum signed or unsigned value.
   12448 
   12449 `(mult:M X Y)'
   12450 `(ss_mult:M X Y)'
   12451 `(us_mult:M X Y)'
   12452      Represents the signed product of the values represented by X and Y
   12453      carried out in machine mode M.  `ss_mult' and `us_mult' ensure
   12454      that an out-of-bounds result saturates to the maximum or minimum
   12455      signed or unsigned value.
   12456 
   12457      Some machines support a multiplication that generates a product
   12458      wider than the operands.  Write the pattern for this as
   12459 
   12460           (mult:M (sign_extend:M X) (sign_extend:M Y))
   12461 
   12462      where M is wider than the modes of X and Y, which need not be the
   12463      same.
   12464 
   12465      For unsigned widening multiplication, use the same idiom, but with
   12466      `zero_extend' instead of `sign_extend'.
   12467 
   12468 `(div:M X Y)'
   12469 `(ss_div:M X Y)'
   12470      Represents the quotient in signed division of X by Y, carried out
   12471      in machine mode M.  If M is a floating point mode, it represents
   12472      the exact quotient; otherwise, the integerized quotient.  `ss_div'
   12473      ensures that an out-of-bounds result saturates to the maximum or
   12474      minimum signed value.
   12475 
   12476      Some machines have division instructions in which the operands and
   12477      quotient widths are not all the same; you should represent such
   12478      instructions using `truncate' and `sign_extend' as in,
   12479 
   12480           (truncate:M1 (div:M2 X (sign_extend:M2 Y)))
   12481 
   12482 `(udiv:M X Y)'
   12483 `(us_div:M X Y)'
   12484      Like `div' but represents unsigned division.  `us_div' ensures
   12485      that an out-of-bounds result saturates to the maximum or minimum
   12486      unsigned value.
   12487 
   12488 `(mod:M X Y)'
   12489 `(umod:M X Y)'
   12490      Like `div' and `udiv' but represent the remainder instead of the
   12491      quotient.
   12492 
   12493 `(smin:M X Y)'
   12494 `(smax:M X Y)'
   12495      Represents the smaller (for `smin') or larger (for `smax') of X
   12496      and Y, interpreted as signed values in mode M.  When used with
   12497      floating point, if both operands are zeros, or if either operand
   12498      is `NaN', then it is unspecified which of the two operands is
   12499      returned as the result.
   12500 
   12501 `(umin:M X Y)'
   12502 `(umax:M X Y)'
   12503      Like `smin' and `smax', but the values are interpreted as unsigned
   12504      integers.
   12505 
   12506 `(not:M X)'
   12507      Represents the bitwise complement of the value represented by X,
   12508      carried out in mode M, which must be a fixed-point machine mode.
   12509 
   12510 `(and:M X Y)'
   12511      Represents the bitwise logical-and of the values represented by X
   12512      and Y, carried out in machine mode M, which must be a fixed-point
   12513      machine mode.
   12514 
   12515 `(ior:M X Y)'
   12516      Represents the bitwise inclusive-or of the values represented by X
   12517      and Y, carried out in machine mode M, which must be a fixed-point
   12518      mode.
   12519 
   12520 `(xor:M X Y)'
   12521      Represents the bitwise exclusive-or of the values represented by X
   12522      and Y, carried out in machine mode M, which must be a fixed-point
   12523      mode.
   12524 
   12525 `(ashift:M X C)'
   12526 `(ss_ashift:M X C)'
   12527 `(us_ashift:M X C)'
   12528      These three expressions represent the result of arithmetically
   12529      shifting X left by C places.  They differ in their behavior on
   12530      overflow of integer modes.  An `ashift' operation is a plain shift
   12531      with no special behavior in case of a change in the sign bit;
   12532      `ss_ashift' and `us_ashift' saturates to the minimum or maximum
   12533      representable value if any of the bits shifted out differs from
   12534      the final sign bit.
   12535 
   12536      X have mode M, a fixed-point machine mode.  C be a fixed-point
   12537      mode or be a constant with mode `VOIDmode'; which mode is
   12538      determined by the mode called for in the machine description entry
   12539      for the left-shift instruction.  For example, on the VAX, the mode
   12540      of C is `QImode' regardless of M.
   12541 
   12542 `(lshiftrt:M X C)'
   12543 `(ashiftrt:M X C)'
   12544      Like `ashift' but for right shift.  Unlike the case for left shift,
   12545      these two operations are distinct.
   12546 
   12547 `(rotate:M X C)'
   12548 `(rotatert:M X C)'
   12549      Similar but represent left and right rotate.  If C is a constant,
   12550      use `rotate'.
   12551 
   12552 `(abs:M X)'
   12553      Represents the absolute value of X, computed in mode M.
   12554 
   12555 `(sqrt:M X)'
   12556      Represents the square root of X, computed in mode M.  Most often M
   12557      will be a floating point mode.
   12558 
   12559 `(ffs:M X)'
   12560      Represents one plus the index of the least significant 1-bit in X,
   12561      represented as an integer of mode M.  (The value is zero if X is
   12562      zero.)  The mode of X need not be M; depending on the target
   12563      machine, various mode combinations may be valid.
   12564 
   12565 `(clz:M X)'
   12566      Represents the number of leading 0-bits in X, represented as an
   12567      integer of mode M, starting at the most significant bit position.
   12568      If X is zero, the value is determined by
   12569      `CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::).  Note that this is one
   12570      of the few expressions that is not invariant under widening.  The
   12571      mode of X will usually be an integer mode.
   12572 
   12573 `(ctz:M X)'
   12574      Represents the number of trailing 0-bits in X, represented as an
   12575      integer of mode M, starting at the least significant bit position.
   12576      If X is zero, the value is determined by
   12577      `CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::).  Except for this case,
   12578      `ctz(x)' is equivalent to `ffs(X) - 1'.  The mode of X will
   12579      usually be an integer mode.
   12580 
   12581 `(popcount:M X)'
   12582      Represents the number of 1-bits in X, represented as an integer of
   12583      mode M.  The mode of X will usually be an integer mode.
   12584 
   12585 `(parity:M X)'
   12586      Represents the number of 1-bits modulo 2 in X, represented as an
   12587      integer of mode M.  The mode of X will usually be an integer mode.
   12588 
   12589 `(bswap:M X)'
   12590      Represents the value X with the order of bytes reversed, carried
   12591      out in mode M, which must be a fixed-point machine mode.
   12592 
   12593 
   12594 File: gccint.info,  Node: Comparisons,  Next: Bit-Fields,  Prev: Arithmetic,  Up: RTL
   12595 
   12596 12.10 Comparison Operations
   12597 ===========================
   12598 
   12599 Comparison operators test a relation on two operands and are considered
   12600 to represent a machine-dependent nonzero value described by, but not
   12601 necessarily equal to, `STORE_FLAG_VALUE' (*note Misc::) if the relation
   12602 holds, or zero if it does not, for comparison operators whose results
   12603 have a `MODE_INT' mode, `FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the
   12604 relation holds, or zero if it does not, for comparison operators that
   12605 return floating-point values, and a vector of either
   12606 `VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of
   12607 zeros if it does not, for comparison operators that return vector
   12608 results.  The mode of the comparison operation is independent of the
   12609 mode of the data being compared.  If the comparison operation is being
   12610 tested (e.g., the first operand of an `if_then_else'), the mode must be
   12611 `VOIDmode'.
   12612 
   12613  There are two ways that comparison operations may be used.  The
   12614 comparison operators may be used to compare the condition codes `(cc0)'
   12615 against zero, as in `(eq (cc0) (const_int 0))'.  Such a construct
   12616 actually refers to the result of the preceding instruction in which the
   12617 condition codes were set.  The instruction setting the condition code
   12618 must be adjacent to the instruction using the condition code; only
   12619 `note' insns may separate them.
   12620 
   12621  Alternatively, a comparison operation may directly compare two data
   12622 objects.  The mode of the comparison is determined by the operands; they
   12623 must both be valid for a common machine mode.  A comparison with both
   12624 operands constant would be invalid as the machine mode could not be
   12625 deduced from it, but such a comparison should never exist in RTL due to
   12626 constant folding.
   12627 
   12628  In the example above, if `(cc0)' were last set to `(compare X Y)', the
   12629 comparison operation is identical to `(eq X Y)'.  Usually only one style
   12630 of comparisons is supported on a particular machine, but the combine
   12631 pass will try to merge the operations to produce the `eq' shown in case
   12632 it exists in the context of the particular insn involved.
   12633 
   12634  Inequality comparisons come in two flavors, signed and unsigned.  Thus,
   12635 there are distinct expression codes `gt' and `gtu' for signed and
   12636 unsigned greater-than.  These can produce different results for the same
   12637 pair of integer values: for example, 1 is signed greater-than -1 but not
   12638 unsigned greater-than, because -1 when regarded as unsigned is actually
   12639 `0xffffffff' which is greater than 1.
   12640 
   12641  The signed comparisons are also used for floating point values.
   12642 Floating point comparisons are distinguished by the machine modes of
   12643 the operands.
   12644 
   12645 `(eq:M X Y)'
   12646      `STORE_FLAG_VALUE' if the values represented by X and Y are equal,
   12647      otherwise 0.
   12648 
   12649 `(ne:M X Y)'
   12650      `STORE_FLAG_VALUE' if the values represented by X and Y are not
   12651      equal, otherwise 0.
   12652 
   12653 `(gt:M X Y)'
   12654      `STORE_FLAG_VALUE' if the X is greater than Y.  If they are
   12655      fixed-point, the comparison is done in a signed sense.
   12656 
   12657 `(gtu:M X Y)'
   12658      Like `gt' but does unsigned comparison, on fixed-point numbers
   12659      only.
   12660 
   12661 `(lt:M X Y)'
   12662 `(ltu:M X Y)'
   12663      Like `gt' and `gtu' but test for "less than".
   12664 
   12665 `(ge:M X Y)'
   12666 `(geu:M X Y)'
   12667      Like `gt' and `gtu' but test for "greater than or equal".
   12668 
   12669 `(le:M X Y)'
   12670 `(leu:M X Y)'
   12671      Like `gt' and `gtu' but test for "less than or equal".
   12672 
   12673 `(if_then_else COND THEN ELSE)'
   12674      This is not a comparison operation but is listed here because it is
   12675      always used in conjunction with a comparison operation.  To be
   12676      precise, COND is a comparison expression.  This expression
   12677      represents a choice, according to COND, between the value
   12678      represented by THEN and the one represented by ELSE.
   12679 
   12680      On most machines, `if_then_else' expressions are valid only to
   12681      express conditional jumps.
   12682 
   12683 `(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)'
   12684      Similar to `if_then_else', but more general.  Each of TEST1,
   12685      TEST2, ... is performed in turn.  The result of this expression is
   12686      the VALUE corresponding to the first nonzero test, or DEFAULT if
   12687      none of the tests are nonzero expressions.
   12688 
   12689      This is currently not valid for instruction patterns and is
   12690      supported only for insn attributes.  *Note Insn Attributes::.
   12691 
   12692 
   12693 File: gccint.info,  Node: Bit-Fields,  Next: Vector Operations,  Prev: Comparisons,  Up: RTL
   12694 
   12695 12.11 Bit-Fields
   12696 ================
   12697 
   12698 Special expression codes exist to represent bit-field instructions.
   12699 
   12700 `(sign_extract:M LOC SIZE POS)'
   12701      This represents a reference to a sign-extended bit-field contained
   12702      or starting in LOC (a memory or register reference).  The bit-field
   12703      is SIZE bits wide and starts at bit POS.  The compilation option
   12704      `BITS_BIG_ENDIAN' says which end of the memory unit POS counts
   12705      from.
   12706 
   12707      If LOC is in memory, its mode must be a single-byte integer mode.
   12708      If LOC is in a register, the mode to use is specified by the
   12709      operand of the `insv' or `extv' pattern (*note Standard Names::)
   12710      and is usually a full-word integer mode, which is the default if
   12711      none is specified.
   12712 
   12713      The mode of POS is machine-specific and is also specified in the
   12714      `insv' or `extv' pattern.
   12715 
   12716      The mode M is the same as the mode that would be used for LOC if
   12717      it were a register.
   12718 
   12719      A `sign_extract' can not appear as an lvalue, or part thereof, in
   12720      RTL.
   12721 
   12722 `(zero_extract:M LOC SIZE POS)'
   12723      Like `sign_extract' but refers to an unsigned or zero-extended
   12724      bit-field.  The same sequence of bits are extracted, but they are
   12725      filled to an entire word with zeros instead of by sign-extension.
   12726 
   12727      Unlike `sign_extract', this type of expressions can be lvalues in
   12728      RTL; they may appear on the left side of an assignment, indicating
   12729      insertion of a value into the specified bit-field.
   12730 
   12731 
   12732 File: gccint.info,  Node: Vector Operations,  Next: Conversions,  Prev: Bit-Fields,  Up: RTL
   12733 
   12734 12.12 Vector Operations
   12735 =======================
   12736 
   12737 All normal RTL expressions can be used with vector modes; they are
   12738 interpreted as operating on each part of the vector independently.
   12739 Additionally, there are a few new expressions to describe specific
   12740 vector operations.
   12741 
   12742 `(vec_merge:M VEC1 VEC2 ITEMS)'
   12743      This describes a merge operation between two vectors.  The result
   12744      is a vector of mode M; its elements are selected from either VEC1
   12745      or VEC2.  Which elements are selected is described by ITEMS, which
   12746      is a bit mask represented by a `const_int'; a zero bit indicates
   12747      the corresponding element in the result vector is taken from VEC2
   12748      while a set bit indicates it is taken from VEC1.
   12749 
   12750 `(vec_select:M VEC1 SELECTION)'
   12751      This describes an operation that selects parts of a vector.  VEC1
   12752      is the source vector, SELECTION is a `parallel' that contains a
   12753      `const_int' for each of the subparts of the result vector, giving
   12754      the number of the source subpart that should be stored into it.
   12755 
   12756 `(vec_concat:M VEC1 VEC2)'
   12757      Describes a vector concat operation.  The result is a
   12758      concatenation of the vectors VEC1 and VEC2; its length is the sum
   12759      of the lengths of the two inputs.
   12760 
   12761 `(vec_duplicate:M VEC)'
   12762      This operation converts a small vector into a larger one by
   12763      duplicating the input values.  The output vector mode must have
   12764      the same submodes as the input vector mode, and the number of
   12765      output parts must be an integer multiple of the number of input
   12766      parts.
   12767 
   12768 
   12769 
   12770 File: gccint.info,  Node: Conversions,  Next: RTL Declarations,  Prev: Vector Operations,  Up: RTL
   12771 
   12772 12.13 Conversions
   12773 =================
   12774 
   12775 All conversions between machine modes must be represented by explicit
   12776 conversion operations.  For example, an expression which is the sum of
   12777 a byte and a full word cannot be written as `(plus:SI (reg:QI 34)
   12778 (reg:SI 80))' because the `plus' operation requires two operands of the
   12779 same machine mode.  Therefore, the byte-sized operand is enclosed in a
   12780 conversion operation, as in
   12781 
   12782      (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
   12783 
   12784  The conversion operation is not a mere placeholder, because there may
   12785 be more than one way of converting from a given starting mode to the
   12786 desired final mode.  The conversion operation code says how to do it.
   12787 
   12788  For all conversion operations, X must not be `VOIDmode' because the
   12789 mode in which to do the conversion would not be known.  The conversion
   12790 must either be done at compile-time or X must be placed into a register.
   12791 
   12792 `(sign_extend:M X)'
   12793      Represents the result of sign-extending the value X to machine
   12794      mode M.  M must be a fixed-point mode and X a fixed-point value of
   12795      a mode narrower than M.
   12796 
   12797 `(zero_extend:M X)'
   12798      Represents the result of zero-extending the value X to machine
   12799      mode M.  M must be a fixed-point mode and X a fixed-point value of
   12800      a mode narrower than M.
   12801 
   12802 `(float_extend:M X)'
   12803      Represents the result of extending the value X to machine mode M.
   12804      M must be a floating point mode and X a floating point value of a
   12805      mode narrower than M.
   12806 
   12807 `(truncate:M X)'
   12808      Represents the result of truncating the value X to machine mode M.
   12809      M must be a fixed-point mode and X a fixed-point value of a mode
   12810      wider than M.
   12811 
   12812 `(ss_truncate:M X)'
   12813      Represents the result of truncating the value X to machine mode M,
   12814      using signed saturation in the case of overflow.  Both M and the
   12815      mode of X must be fixed-point modes.
   12816 
   12817 `(us_truncate:M X)'
   12818      Represents the result of truncating the value X to machine mode M,
   12819      using unsigned saturation in the case of overflow.  Both M and the
   12820      mode of X must be fixed-point modes.
   12821 
   12822 `(float_truncate:M X)'
   12823      Represents the result of truncating the value X to machine mode M.
   12824      M must be a floating point mode and X a floating point value of a
   12825      mode wider than M.
   12826 
   12827 `(float:M X)'
   12828      Represents the result of converting fixed point value X, regarded
   12829      as signed, to floating point mode M.
   12830 
   12831 `(unsigned_float:M X)'
   12832      Represents the result of converting fixed point value X, regarded
   12833      as unsigned, to floating point mode M.
   12834 
   12835 `(fix:M X)'
   12836      When M is a fixed point mode, represents the result of converting
   12837      floating point value X to mode M, regarded as signed.  How
   12838      rounding is done is not specified, so this operation may be used
   12839      validly in compiling C code only for integer-valued operands.
   12840 
   12841 `(unsigned_fix:M X)'
   12842      Represents the result of converting floating point value X to
   12843      fixed point mode M, regarded as unsigned.  How rounding is done is
   12844      not specified.
   12845 
   12846 `(fix:M X)'
   12847      When M is a floating point mode, represents the result of
   12848      converting floating point value X (valid for mode M) to an
   12849      integer, still represented in floating point mode M, by rounding
   12850      towards zero.
   12851 
   12852 `(fract_convert:M X)'
   12853      Represents the result of converting fixed-point value X to
   12854      fixed-point mode M, signed integer value X to fixed-point mode M,
   12855      floating-point value X to fixed-point mode M, fixed-point value X
   12856      to integer mode M regarded as signed, or fixed-point value X to
   12857      floating-point mode M.  When overflows or underflows happen, the
   12858      results are undefined.
   12859 
   12860 `(sat_fract:M X)'
   12861      Represents the result of converting fixed-point value X to
   12862      fixed-point mode M, signed integer value X to fixed-point mode M,
   12863      or floating-point value X to fixed-point mode M.  When overflows
   12864      or underflows happen, the results are saturated to the maximum or
   12865      the minimum.
   12866 
   12867 `(unsigned_fract_convert:M X)'
   12868      Represents the result of converting fixed-point value X to integer
   12869      mode M regarded as unsigned, or unsigned integer value X to
   12870      fixed-point mode M.  When overflows or underflows happen, the
   12871      results are undefined.
   12872 
   12873 `(unsigned_sat_fract:M X)'
   12874      Represents the result of converting unsigned integer value X to
   12875      fixed-point mode M.  When overflows or underflows happen, the
   12876      results are saturated to the maximum or the minimum.
   12877 
   12878 
   12879 File: gccint.info,  Node: RTL Declarations,  Next: Side Effects,  Prev: Conversions,  Up: RTL
   12880 
   12881 12.14 Declarations
   12882 ==================
   12883 
   12884 Declaration expression codes do not represent arithmetic operations but
   12885 rather state assertions about their operands.
   12886 
   12887 `(strict_low_part (subreg:M (reg:N R) 0))'
   12888      This expression code is used in only one context: as the
   12889      destination operand of a `set' expression.  In addition, the
   12890      operand of this expression must be a non-paradoxical `subreg'
   12891      expression.
   12892 
   12893      The presence of `strict_low_part' says that the part of the
   12894      register which is meaningful in mode N, but is not part of mode M,
   12895      is not to be altered.  Normally, an assignment to such a subreg is
   12896      allowed to have undefined effects on the rest of the register when
   12897      M is less than a word.
   12898 
   12899 
   12900 File: gccint.info,  Node: Side Effects,  Next: Incdec,  Prev: RTL Declarations,  Up: RTL
   12901 
   12902 12.15 Side Effect Expressions
   12903 =============================
   12904 
   12905 The expression codes described so far represent values, not actions.
   12906 But machine instructions never produce values; they are meaningful only
   12907 for their side effects on the state of the machine.  Special expression
   12908 codes are used to represent side effects.
   12909 
   12910  The body of an instruction is always one of these side effect codes;
   12911 the codes described above, which represent values, appear only as the
   12912 operands of these.
   12913 
   12914 `(set LVAL X)'
   12915      Represents the action of storing the value of X into the place
   12916      represented by LVAL.  LVAL must be an expression representing a
   12917      place that can be stored in: `reg' (or `subreg', `strict_low_part'
   12918      or `zero_extract'), `mem', `pc', `parallel', or `cc0'.
   12919 
   12920      If LVAL is a `reg', `subreg' or `mem', it has a machine mode; then
   12921      X must be valid for that mode.
   12922 
   12923      If LVAL is a `reg' whose machine mode is less than the full width
   12924      of the register, then it means that the part of the register
   12925      specified by the machine mode is given the specified value and the
   12926      rest of the register receives an undefined value.  Likewise, if
   12927      LVAL is a `subreg' whose machine mode is narrower than the mode of
   12928      the register, the rest of the register can be changed in an
   12929      undefined way.
   12930 
   12931      If LVAL is a `strict_low_part' of a subreg, then the part of the
   12932      register specified by the machine mode of the `subreg' is given
   12933      the value X and the rest of the register is not changed.
   12934 
   12935      If LVAL is a `zero_extract', then the referenced part of the
   12936      bit-field (a memory or register reference) specified by the
   12937      `zero_extract' is given the value X and the rest of the bit-field
   12938      is not changed.  Note that `sign_extract' can not appear in LVAL.
   12939 
   12940      If LVAL is `(cc0)', it has no machine mode, and X may be either a
   12941      `compare' expression or a value that may have any mode.  The
   12942      latter case represents a "test" instruction.  The expression `(set
   12943      (cc0) (reg:M N))' is equivalent to `(set (cc0) (compare (reg:M N)
   12944      (const_int 0)))'.  Use the former expression to save space during
   12945      the compilation.
   12946 
   12947      If LVAL is a `parallel', it is used to represent the case of a
   12948      function returning a structure in multiple registers.  Each element
   12949      of the `parallel' is an `expr_list' whose first operand is a `reg'
   12950      and whose second operand is a `const_int' representing the offset
   12951      (in bytes) into the structure at which the data in that register
   12952      corresponds.  The first element may be null to indicate that the
   12953      structure is also passed partly in memory.
   12954 
   12955      If LVAL is `(pc)', we have a jump instruction, and the
   12956      possibilities for X are very limited.  It may be a `label_ref'
   12957      expression (unconditional jump).  It may be an `if_then_else'
   12958      (conditional jump), in which case either the second or the third
   12959      operand must be `(pc)' (for the case which does not jump) and the
   12960      other of the two must be a `label_ref' (for the case which does
   12961      jump).  X may also be a `mem' or `(plus:SI (pc) Y)', where Y may
   12962      be a `reg' or a `mem'; these unusual patterns are used to
   12963      represent jumps through branch tables.
   12964 
   12965      If LVAL is neither `(cc0)' nor `(pc)', the mode of LVAL must not
   12966      be `VOIDmode' and the mode of X must be valid for the mode of LVAL.
   12967 
   12968      LVAL is customarily accessed with the `SET_DEST' macro and X with
   12969      the `SET_SRC' macro.
   12970 
   12971 `(return)'
   12972      As the sole expression in a pattern, represents a return from the
   12973      current function, on machines where this can be done with one
   12974      instruction, such as VAXen.  On machines where a multi-instruction
   12975      "epilogue" must be executed in order to return from the function,
   12976      returning is done by jumping to a label which precedes the
   12977      epilogue, and the `return' expression code is never used.
   12978 
   12979      Inside an `if_then_else' expression, represents the value to be
   12980      placed in `pc' to return to the caller.
   12981 
   12982      Note that an insn pattern of `(return)' is logically equivalent to
   12983      `(set (pc) (return))', but the latter form is never used.
   12984 
   12985 `(call FUNCTION NARGS)'
   12986      Represents a function call.  FUNCTION is a `mem' expression whose
   12987      address is the address of the function to be called.  NARGS is an
   12988      expression which can be used for two purposes: on some machines it
   12989      represents the number of bytes of stack argument; on others, it
   12990      represents the number of argument registers.
   12991 
   12992      Each machine has a standard machine mode which FUNCTION must have.
   12993      The machine description defines macro `FUNCTION_MODE' to expand
   12994      into the requisite mode name.  The purpose of this mode is to
   12995      specify what kind of addressing is allowed, on machines where the
   12996      allowed kinds of addressing depend on the machine mode being
   12997      addressed.
   12998 
   12999 `(clobber X)'
   13000      Represents the storing or possible storing of an unpredictable,
   13001      undescribed value into X, which must be a `reg', `scratch',
   13002      `parallel' or `mem' expression.
   13003 
   13004      One place this is used is in string instructions that store
   13005      standard values into particular hard registers.  It may not be
   13006      worth the trouble to describe the values that are stored, but it
   13007      is essential to inform the compiler that the registers will be
   13008      altered, lest it attempt to keep data in them across the string
   13009      instruction.
   13010 
   13011      If X is `(mem:BLK (const_int 0))' or `(mem:BLK (scratch))', it
   13012      means that all memory locations must be presumed clobbered.  If X
   13013      is a `parallel', it has the same meaning as a `parallel' in a
   13014      `set' expression.
   13015 
   13016      Note that the machine description classifies certain hard
   13017      registers as "call-clobbered".  All function call instructions are
   13018      assumed by default to clobber these registers, so there is no need
   13019      to use `clobber' expressions to indicate this fact.  Also, each
   13020      function call is assumed to have the potential to alter any memory
   13021      location, unless the function is declared `const'.
   13022 
   13023      If the last group of expressions in a `parallel' are each a
   13024      `clobber' expression whose arguments are `reg' or `match_scratch'
   13025      (*note RTL Template::) expressions, the combiner phase can add the
   13026      appropriate `clobber' expressions to an insn it has constructed
   13027      when doing so will cause a pattern to be matched.
   13028 
   13029      This feature can be used, for example, on a machine that whose
   13030      multiply and add instructions don't use an MQ register but which
   13031      has an add-accumulate instruction that does clobber the MQ
   13032      register.  Similarly, a combined instruction might require a
   13033      temporary register while the constituent instructions might not.
   13034 
   13035      When a `clobber' expression for a register appears inside a
   13036      `parallel' with other side effects, the register allocator
   13037      guarantees that the register is unoccupied both before and after
   13038      that insn.  However, the reload phase may allocate a register used
   13039      for one of the inputs unless the `&' constraint is specified for
   13040      the selected alternative (*note Modifiers::).  You can clobber
   13041      either a specific hard register, a pseudo register, or a `scratch'
   13042      expression; in the latter two cases, GCC will allocate a hard
   13043      register that is available there for use as a temporary.
   13044 
   13045      For instructions that require a temporary register, you should use
   13046      `scratch' instead of a pseudo-register because this will allow the
   13047      combiner phase to add the `clobber' when required.  You do this by
   13048      coding (`clobber' (`match_scratch' ...)).  If you do clobber a
   13049      pseudo register, use one which appears nowhere else--generate a
   13050      new one each time.  Otherwise, you may confuse CSE.
   13051 
   13052      There is one other known use for clobbering a pseudo register in a
   13053      `parallel': when one of the input operands of the insn is also
   13054      clobbered by the insn.  In this case, using the same pseudo
   13055      register in the clobber and elsewhere in the insn produces the
   13056      expected results.
   13057 
   13058 `(use X)'
   13059      Represents the use of the value of X.  It indicates that the value
   13060      in X at this point in the program is needed, even though it may
   13061      not be apparent why this is so.  Therefore, the compiler will not
   13062      attempt to delete previous instructions whose only effect is to
   13063      store a value in X.  X must be a `reg' expression.
   13064 
   13065      In some situations, it may be tempting to add a `use' of a
   13066      register in a `parallel' to describe a situation where the value
   13067      of a special register will modify the behavior of the instruction.
   13068      An hypothetical example might be a pattern for an addition that can
   13069      either wrap around or use saturating addition depending on the
   13070      value of a special control register:
   13071 
   13072           (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3)
   13073                                                  (reg:SI 4)] 0))
   13074                      (use (reg:SI 1))])
   13075 
   13076      This will not work, several of the optimizers only look at
   13077      expressions locally; it is very likely that if you have multiple
   13078      insns with identical inputs to the `unspec', they will be
   13079      optimized away even if register 1 changes in between.
   13080 
   13081      This means that `use' can _only_ be used to describe that the
   13082      register is live.  You should think twice before adding `use'
   13083      statements, more often you will want to use `unspec' instead.  The
   13084      `use' RTX is most commonly useful to describe that a fixed
   13085      register is implicitly used in an insn.  It is also safe to use in
   13086      patterns where the compiler knows for other reasons that the result
   13087      of the whole pattern is variable, such as `movmemM' or `call'
   13088      patterns.
   13089 
   13090      During the reload phase, an insn that has a `use' as pattern can
   13091      carry a reg_equal note.  These `use' insns will be deleted before
   13092      the reload phase exits.
   13093 
   13094      During the delayed branch scheduling phase, X may be an insn.
   13095      This indicates that X previously was located at this place in the
   13096      code and its data dependencies need to be taken into account.
   13097      These `use' insns will be deleted before the delayed branch
   13098      scheduling phase exits.
   13099 
   13100 `(parallel [X0 X1 ...])'
   13101      Represents several side effects performed in parallel.  The square
   13102      brackets stand for a vector; the operand of `parallel' is a vector
   13103      of expressions.  X0, X1 and so on are individual side effect
   13104      expressions--expressions of code `set', `call', `return',
   13105      `clobber' or `use'.
   13106 
   13107      "In parallel" means that first all the values used in the
   13108      individual side-effects are computed, and second all the actual
   13109      side-effects are performed.  For example,
   13110 
   13111           (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
   13112                      (set (mem:SI (reg:SI 1)) (reg:SI 1))])
   13113 
   13114      says unambiguously that the values of hard register 1 and the
   13115      memory location addressed by it are interchanged.  In both places
   13116      where `(reg:SI 1)' appears as a memory address it refers to the
   13117      value in register 1 _before_ the execution of the insn.
   13118 
   13119      It follows that it is _incorrect_ to use `parallel' and expect the
   13120      result of one `set' to be available for the next one.  For
   13121      example, people sometimes attempt to represent a jump-if-zero
   13122      instruction this way:
   13123 
   13124           (parallel [(set (cc0) (reg:SI 34))
   13125                      (set (pc) (if_then_else
   13126                                   (eq (cc0) (const_int 0))
   13127                                   (label_ref ...)
   13128                                   (pc)))])
   13129 
   13130      But this is incorrect, because it says that the jump condition
   13131      depends on the condition code value _before_ this instruction, not
   13132      on the new value that is set by this instruction.
   13133 
   13134      Peephole optimization, which takes place together with final
   13135      assembly code output, can produce insns whose patterns consist of
   13136      a `parallel' whose elements are the operands needed to output the
   13137      resulting assembler code--often `reg', `mem' or constant
   13138      expressions.  This would not be well-formed RTL at any other stage
   13139      in compilation, but it is ok then because no further optimization
   13140      remains to be done.  However, the definition of the macro
   13141      `NOTICE_UPDATE_CC', if any, must deal with such insns if you
   13142      define any peephole optimizations.
   13143 
   13144 `(cond_exec [COND EXPR])'
   13145      Represents a conditionally executed expression.  The EXPR is
   13146      executed only if the COND is nonzero.  The COND expression must
   13147      not have side-effects, but the EXPR may very well have
   13148      side-effects.
   13149 
   13150 `(sequence [INSNS ...])'
   13151      Represents a sequence of insns.  Each of the INSNS that appears in
   13152      the vector is suitable for appearing in the chain of insns, so it
   13153      must be an `insn', `jump_insn', `call_insn', `code_label',
   13154      `barrier' or `note'.
   13155 
   13156      A `sequence' RTX is never placed in an actual insn during RTL
   13157      generation.  It represents the sequence of insns that result from a
   13158      `define_expand' _before_ those insns are passed to `emit_insn' to
   13159      insert them in the chain of insns.  When actually inserted, the
   13160      individual sub-insns are separated out and the `sequence' is
   13161      forgotten.
   13162 
   13163      After delay-slot scheduling is completed, an insn and all the
   13164      insns that reside in its delay slots are grouped together into a
   13165      `sequence'.  The insn requiring the delay slot is the first insn
   13166      in the vector; subsequent insns are to be placed in the delay slot.
   13167 
   13168      `INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to
   13169      indicate that a branch insn should be used that will conditionally
   13170      annul the effect of the insns in the delay slots.  In such a case,
   13171      `INSN_FROM_TARGET_P' indicates that the insn is from the target of
   13172      the branch and should be executed only if the branch is taken;
   13173      otherwise the insn should be executed only if the branch is not
   13174      taken.  *Note Delay Slots::.
   13175 
   13176  These expression codes appear in place of a side effect, as the body of
   13177 an insn, though strictly speaking they do not always describe side
   13178 effects as such:
   13179 
   13180 `(asm_input S)'
   13181      Represents literal assembler code as described by the string S.
   13182 
   13183 `(unspec [OPERANDS ...] INDEX)'
   13184 `(unspec_volatile [OPERANDS ...] INDEX)'
   13185      Represents a machine-specific operation on OPERANDS.  INDEX
   13186      selects between multiple machine-specific operations.
   13187      `unspec_volatile' is used for volatile operations and operations
   13188      that may trap; `unspec' is used for other operations.
   13189 
   13190      These codes may appear inside a `pattern' of an insn, inside a
   13191      `parallel', or inside an expression.
   13192 
   13193 `(addr_vec:M [LR0 LR1 ...])'
   13194      Represents a table of jump addresses.  The vector elements LR0,
   13195      etc., are `label_ref' expressions.  The mode M specifies how much
   13196      space is given to each address; normally M would be `Pmode'.
   13197 
   13198 `(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)'
   13199      Represents a table of jump addresses expressed as offsets from
   13200      BASE.  The vector elements LR0, etc., are `label_ref' expressions
   13201      and so is BASE.  The mode M specifies how much space is given to
   13202      each address-difference.  MIN and MAX are set up by branch
   13203      shortening and hold a label with a minimum and a maximum address,
   13204      respectively.  FLAGS indicates the relative position of BASE, MIN
   13205      and MAX to the containing insn and of MIN and MAX to BASE.  See
   13206      rtl.def for details.
   13207 
   13208 `(prefetch:M ADDR RW LOCALITY)'
   13209      Represents prefetch of memory at address ADDR.  Operand RW is 1 if
   13210      the prefetch is for data to be written, 0 otherwise; targets that
   13211      do not support write prefetches should treat this as a normal
   13212      prefetch.  Operand LOCALITY specifies the amount of temporal
   13213      locality; 0 if there is none or 1, 2, or 3 for increasing levels
   13214      of temporal locality; targets that do not support locality hints
   13215      should ignore this.
   13216 
   13217      This insn is used to minimize cache-miss latency by moving data
   13218      into a cache before it is accessed.  It should use only
   13219      non-faulting data prefetch instructions.
   13220 
   13221 
   13222 File: gccint.info,  Node: Incdec,  Next: Assembler,  Prev: Side Effects,  Up: RTL
   13223 
   13224 12.16 Embedded Side-Effects on Addresses
   13225 ========================================
   13226 
   13227 Six special side-effect expression codes appear as memory addresses.
   13228 
   13229 `(pre_dec:M X)'
   13230      Represents the side effect of decrementing X by a standard amount
   13231      and represents also the value that X has after being decremented.
   13232      X must be a `reg' or `mem', but most machines allow only a `reg'.
   13233      M must be the machine mode for pointers on the machine in use.
   13234      The amount X is decremented by is the length in bytes of the
   13235      machine mode of the containing memory reference of which this
   13236      expression serves as the address.  Here is an example of its use:
   13237 
   13238           (mem:DF (pre_dec:SI (reg:SI 39)))
   13239 
   13240      This says to decrement pseudo register 39 by the length of a
   13241      `DFmode' value and use the result to address a `DFmode' value.
   13242 
   13243 `(pre_inc:M X)'
   13244      Similar, but specifies incrementing X instead of decrementing it.
   13245 
   13246 `(post_dec:M X)'
   13247      Represents the same side effect as `pre_dec' but a different
   13248      value.  The value represented here is the value X has before being
   13249      decremented.
   13250 
   13251 `(post_inc:M X)'
   13252      Similar, but specifies incrementing X instead of decrementing it.
   13253 
   13254 `(post_modify:M X Y)'
   13255      Represents the side effect of setting X to Y and represents X
   13256      before X is modified.  X must be a `reg' or `mem', but most
   13257      machines allow only a `reg'.  M must be the machine mode for
   13258      pointers on the machine in use.
   13259 
   13260      The expression Y must be one of three forms:
   13261           `(plus:M X Z)', `(minus:M X Z)', or `(plus:M X I)',
   13262      where Z is an index register and I is a constant.
   13263 
   13264      Here is an example of its use:
   13265 
   13266           (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42)
   13267                                                     (reg:SI 48))))
   13268 
   13269      This says to modify pseudo register 42 by adding the contents of
   13270      pseudo register 48 to it, after the use of what ever 42 points to.
   13271 
   13272 `(pre_modify:M X EXPR)'
   13273      Similar except side effects happen before the use.
   13274 
   13275  These embedded side effect expressions must be used with care.
   13276 Instruction patterns may not use them.  Until the `flow' pass of the
   13277 compiler, they may occur only to represent pushes onto the stack.  The
   13278 `flow' pass finds cases where registers are incremented or decremented
   13279 in one instruction and used as an address shortly before or after;
   13280 these cases are then transformed to use pre- or post-increment or
   13281 -decrement.
   13282 
   13283  If a register used as the operand of these expressions is used in
   13284 another address in an insn, the original value of the register is used.
   13285 Uses of the register outside of an address are not permitted within the
   13286 same insn as a use in an embedded side effect expression because such
   13287 insns behave differently on different machines and hence must be treated
   13288 as ambiguous and disallowed.
   13289 
   13290  An instruction that can be represented with an embedded side effect
   13291 could also be represented using `parallel' containing an additional
   13292 `set' to describe how the address register is altered.  This is not
   13293 done because machines that allow these operations at all typically
   13294 allow them wherever a memory address is called for.  Describing them as
   13295 additional parallel stores would require doubling the number of entries
   13296 in the machine description.
   13297 
   13298 
   13299 File: gccint.info,  Node: Assembler,  Next: Insns,  Prev: Incdec,  Up: RTL
   13300 
   13301 12.17 Assembler Instructions as Expressions
   13302 ===========================================
   13303 
   13304 The RTX code `asm_operands' represents a value produced by a
   13305 user-specified assembler instruction.  It is used to represent an `asm'
   13306 statement with arguments.  An `asm' statement with a single output
   13307 operand, like this:
   13308 
   13309      asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
   13310 
   13311 is represented using a single `asm_operands' RTX which represents the
   13312 value that is stored in `outputvar':
   13313 
   13314      (set RTX-FOR-OUTPUTVAR
   13315           (asm_operands "foo %1,%2,%0" "a" 0
   13316                         [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z]
   13317                         [(asm_input:M1 "g")
   13318                          (asm_input:M2 "di")]))
   13319 
   13320 Here the operands of the `asm_operands' RTX are the assembler template
   13321 string, the output-operand's constraint, the index-number of the output
   13322 operand among the output operands specified, a vector of input operand
   13323 RTX's, and a vector of input-operand modes and constraints.  The mode
   13324 M1 is the mode of the sum `x+y'; M2 is that of `*z'.
   13325 
   13326  When an `asm' statement has multiple output values, its insn has
   13327 several such `set' RTX's inside of a `parallel'.  Each `set' contains a
   13328 `asm_operands'; all of these share the same assembler template and
   13329 vectors, but each contains the constraint for the respective output
   13330 operand.  They are also distinguished by the output-operand index
   13331 number, which is 0, 1, ... for successive output operands.
   13332 
   13333 
   13334 File: gccint.info,  Node: Insns,  Next: Calls,  Prev: Assembler,  Up: RTL
   13335 
   13336 12.18 Insns
   13337 ===========
   13338 
   13339 The RTL representation of the code for a function is a doubly-linked
   13340 chain of objects called "insns".  Insns are expressions with special
   13341 codes that are used for no other purpose.  Some insns are actual
   13342 instructions; others represent dispatch tables for `switch' statements;
   13343 others represent labels to jump to or various sorts of declarative
   13344 information.
   13345 
   13346  In addition to its own specific data, each insn must have a unique
   13347 id-number that distinguishes it from all other insns in the current
   13348 function (after delayed branch scheduling, copies of an insn with the
   13349 same id-number may be present in multiple places in a function, but
   13350 these copies will always be identical and will only appear inside a
   13351 `sequence'), and chain pointers to the preceding and following insns.
   13352 These three fields occupy the same position in every insn, independent
   13353 of the expression code of the insn.  They could be accessed with `XEXP'
   13354 and `XINT', but instead three special macros are always used:
   13355 
   13356 `INSN_UID (I)'
   13357      Accesses the unique id of insn I.
   13358 
   13359 `PREV_INSN (I)'
   13360      Accesses the chain pointer to the insn preceding I.  If I is the
   13361      first insn, this is a null pointer.
   13362 
   13363 `NEXT_INSN (I)'
   13364      Accesses the chain pointer to the insn following I.  If I is the
   13365      last insn, this is a null pointer.
   13366 
   13367  The first insn in the chain is obtained by calling `get_insns'; the
   13368 last insn is the result of calling `get_last_insn'.  Within the chain
   13369 delimited by these insns, the `NEXT_INSN' and `PREV_INSN' pointers must
   13370 always correspond: if INSN is not the first insn,
   13371 
   13372      NEXT_INSN (PREV_INSN (INSN)) == INSN
   13373 
   13374 is always true and if INSN is not the last insn,
   13375 
   13376      PREV_INSN (NEXT_INSN (INSN)) == INSN
   13377 
   13378 is always true.
   13379 
   13380  After delay slot scheduling, some of the insns in the chain might be
   13381 `sequence' expressions, which contain a vector of insns.  The value of
   13382 `NEXT_INSN' in all but the last of these insns is the next insn in the
   13383 vector; the value of `NEXT_INSN' of the last insn in the vector is the
   13384 same as the value of `NEXT_INSN' for the `sequence' in which it is
   13385 contained.  Similar rules apply for `PREV_INSN'.
   13386 
   13387  This means that the above invariants are not necessarily true for insns
   13388 inside `sequence' expressions.  Specifically, if INSN is the first insn
   13389 in a `sequence', `NEXT_INSN (PREV_INSN (INSN))' is the insn containing
   13390 the `sequence' expression, as is the value of `PREV_INSN (NEXT_INSN
   13391 (INSN))' if INSN is the last insn in the `sequence' expression.  You
   13392 can use these expressions to find the containing `sequence' expression.
   13393 
   13394  Every insn has one of the following six expression codes:
   13395 
   13396 `insn'
   13397      The expression code `insn' is used for instructions that do not
   13398      jump and do not do function calls.  `sequence' expressions are
   13399      always contained in insns with code `insn' even if one of those
   13400      insns should jump or do function calls.
   13401 
   13402      Insns with code `insn' have four additional fields beyond the three
   13403      mandatory ones listed above.  These four are described in a table
   13404      below.
   13405 
   13406 `jump_insn'
   13407      The expression code `jump_insn' is used for instructions that may
   13408      jump (or, more generally, may contain `label_ref' expressions to
   13409      which `pc' can be set in that instruction).  If there is an
   13410      instruction to return from the current function, it is recorded as
   13411      a `jump_insn'.
   13412 
   13413      `jump_insn' insns have the same extra fields as `insn' insns,
   13414      accessed in the same way and in addition contain a field
   13415      `JUMP_LABEL' which is defined once jump optimization has completed.
   13416 
   13417      For simple conditional and unconditional jumps, this field contains
   13418      the `code_label' to which this insn will (possibly conditionally)
   13419      branch.  In a more complex jump, `JUMP_LABEL' records one of the
   13420      labels that the insn refers to; other jump target labels are
   13421      recorded as `REG_LABEL_TARGET' notes.  The exception is `addr_vec'
   13422      and `addr_diff_vec', where `JUMP_LABEL' is `NULL_RTX' and the only
   13423      way to find the labels is to scan the entire body of the insn.
   13424 
   13425      Return insns count as jumps, but since they do not refer to any
   13426      labels, their `JUMP_LABEL' is `NULL_RTX'.
   13427 
   13428 `call_insn'
   13429      The expression code `call_insn' is used for instructions that may
   13430      do function calls.  It is important to distinguish these
   13431      instructions because they imply that certain registers and memory
   13432      locations may be altered unpredictably.
   13433 
   13434      `call_insn' insns have the same extra fields as `insn' insns,
   13435      accessed in the same way and in addition contain a field
   13436      `CALL_INSN_FUNCTION_USAGE', which contains a list (chain of
   13437      `expr_list' expressions) containing `use' and `clobber'
   13438      expressions that denote hard registers and `MEM's used or
   13439      clobbered by the called function.
   13440 
   13441      A `MEM' generally points to a stack slots in which arguments passed
   13442      to the libcall by reference (*note TARGET_PASS_BY_REFERENCE:
   13443      Register Arguments.) are stored.  If the argument is caller-copied
   13444      (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot
   13445      will be mentioned in `CLOBBER' and `USE' entries; if it's
   13446      callee-copied, only a `USE' will appear, and the `MEM' may point
   13447      to addresses that are not stack slots.
   13448 
   13449      `CLOBBER'ed registers in this list augment registers specified in
   13450      `CALL_USED_REGISTERS' (*note Register Basics::).
   13451 
   13452 `code_label'
   13453      A `code_label' insn represents a label that a jump insn can jump
   13454      to.  It contains two special fields of data in addition to the
   13455      three standard ones.  `CODE_LABEL_NUMBER' is used to hold the
   13456      "label number", a number that identifies this label uniquely among
   13457      all the labels in the compilation (not just in the current
   13458      function).  Ultimately, the label is represented in the assembler
   13459      output as an assembler label, usually of the form `LN' where N is
   13460      the label number.
   13461 
   13462      When a `code_label' appears in an RTL expression, it normally
   13463      appears within a `label_ref' which represents the address of the
   13464      label, as a number.
   13465 
   13466      Besides as a `code_label', a label can also be represented as a
   13467      `note' of type `NOTE_INSN_DELETED_LABEL'.
   13468 
   13469      The field `LABEL_NUSES' is only defined once the jump optimization
   13470      phase is completed.  It contains the number of times this label is
   13471      referenced in the current function.
   13472 
   13473      The field `LABEL_KIND' differentiates four different types of
   13474      labels: `LABEL_NORMAL', `LABEL_STATIC_ENTRY',
   13475      `LABEL_GLOBAL_ENTRY', and `LABEL_WEAK_ENTRY'.  The only labels
   13476      that do not have type `LABEL_NORMAL' are "alternate entry points"
   13477      to the current function.  These may be static (visible only in the
   13478      containing translation unit), global (exposed to all translation
   13479      units), or weak (global, but can be overridden by another symbol
   13480      with the same name).
   13481 
   13482      Much of the compiler treats all four kinds of label identically.
   13483      Some of it needs to know whether or not a label is an alternate
   13484      entry point; for this purpose, the macro `LABEL_ALT_ENTRY_P' is
   13485      provided.  It is equivalent to testing whether `LABEL_KIND (label)
   13486      == LABEL_NORMAL'.  The only place that cares about the distinction
   13487      between static, global, and weak alternate entry points, besides
   13488      the front-end code that creates them, is the function
   13489      `output_alternate_entry_point', in `final.c'.
   13490 
   13491      To set the kind of a label, use the `SET_LABEL_KIND' macro.
   13492 
   13493 `barrier'
   13494      Barriers are placed in the instruction stream when control cannot
   13495      flow past them.  They are placed after unconditional jump
   13496      instructions to indicate that the jumps are unconditional and
   13497      after calls to `volatile' functions, which do not return (e.g.,
   13498      `exit').  They contain no information beyond the three standard
   13499      fields.
   13500 
   13501 `note'
   13502      `note' insns are used to represent additional debugging and
   13503      declarative information.  They contain two nonstandard fields, an
   13504      integer which is accessed with the macro `NOTE_LINE_NUMBER' and a
   13505      string accessed with `NOTE_SOURCE_FILE'.
   13506 
   13507      If `NOTE_LINE_NUMBER' is positive, the note represents the
   13508      position of a source line and `NOTE_SOURCE_FILE' is the source
   13509      file name that the line came from.  These notes control generation
   13510      of line number data in the assembler output.
   13511 
   13512      Otherwise, `NOTE_LINE_NUMBER' is not really a line number but a
   13513      code with one of the following values (and `NOTE_SOURCE_FILE' must
   13514      contain a null pointer):
   13515 
   13516     `NOTE_INSN_DELETED'
   13517           Such a note is completely ignorable.  Some passes of the
   13518           compiler delete insns by altering them into notes of this
   13519           kind.
   13520 
   13521     `NOTE_INSN_DELETED_LABEL'
   13522           This marks what used to be a `code_label', but was not used
   13523           for other purposes than taking its address and was
   13524           transformed to mark that no code jumps to it.
   13525 
   13526     `NOTE_INSN_BLOCK_BEG'
   13527     `NOTE_INSN_BLOCK_END'
   13528           These types of notes indicate the position of the beginning
   13529           and end of a level of scoping of variable names.  They
   13530           control the output of debugging information.
   13531 
   13532     `NOTE_INSN_EH_REGION_BEG'
   13533     `NOTE_INSN_EH_REGION_END'
   13534           These types of notes indicate the position of the beginning
   13535           and end of a level of scoping for exception handling.
   13536           `NOTE_BLOCK_NUMBER' identifies which `CODE_LABEL' or `note'
   13537           of type `NOTE_INSN_DELETED_LABEL' is associated with the
   13538           given region.
   13539 
   13540     `NOTE_INSN_LOOP_BEG'
   13541     `NOTE_INSN_LOOP_END'
   13542           These types of notes indicate the position of the beginning
   13543           and end of a `while' or `for' loop.  They enable the loop
   13544           optimizer to find loops quickly.
   13545 
   13546     `NOTE_INSN_LOOP_CONT'
   13547           Appears at the place in a loop that `continue' statements
   13548           jump to.
   13549 
   13550     `NOTE_INSN_LOOP_VTOP'
   13551           This note indicates the place in a loop where the exit test
   13552           begins for those loops in which the exit test has been
   13553           duplicated.  This position becomes another virtual start of
   13554           the loop when considering loop invariants.
   13555 
   13556     `NOTE_INSN_FUNCTION_BEG'
   13557           Appears at the start of the function body, after the function
   13558           prologue.
   13559 
   13560 
   13561      These codes are printed symbolically when they appear in debugging
   13562      dumps.
   13563 
   13564  The machine mode of an insn is normally `VOIDmode', but some phases
   13565 use the mode for various purposes.
   13566 
   13567  The common subexpression elimination pass sets the mode of an insn to
   13568 `QImode' when it is the first insn in a block that has already been
   13569 processed.
   13570 
   13571  The second Haifa scheduling pass, for targets that can multiple issue,
   13572 sets the mode of an insn to `TImode' when it is believed that the
   13573 instruction begins an issue group.  That is, when the instruction
   13574 cannot issue simultaneously with the previous.  This may be relied on
   13575 by later passes, in particular machine-dependent reorg.
   13576 
   13577  Here is a table of the extra fields of `insn', `jump_insn' and
   13578 `call_insn' insns:
   13579 
   13580 `PATTERN (I)'
   13581      An expression for the side effect performed by this insn.  This
   13582      must be one of the following codes: `set', `call', `use',
   13583      `clobber', `return', `asm_input', `asm_output', `addr_vec',
   13584      `addr_diff_vec', `trap_if', `unspec', `unspec_volatile',
   13585      `parallel', `cond_exec', or `sequence'.  If it is a `parallel',
   13586      each element of the `parallel' must be one these codes, except that
   13587      `parallel' expressions cannot be nested and `addr_vec' and
   13588      `addr_diff_vec' are not permitted inside a `parallel' expression.
   13589 
   13590 `INSN_CODE (I)'
   13591      An integer that says which pattern in the machine description
   13592      matches this insn, or -1 if the matching has not yet been
   13593      attempted.
   13594 
   13595      Such matching is never attempted and this field remains -1 on an
   13596      insn whose pattern consists of a single `use', `clobber',
   13597      `asm_input', `addr_vec' or `addr_diff_vec' expression.
   13598 
   13599      Matching is also never attempted on insns that result from an `asm'
   13600      statement.  These contain at least one `asm_operands' expression.
   13601      The function `asm_noperands' returns a non-negative value for such
   13602      insns.
   13603 
   13604      In the debugging output, this field is printed as a number
   13605      followed by a symbolic representation that locates the pattern in
   13606      the `md' file as some small positive or negative offset from a
   13607      named pattern.
   13608 
   13609 `LOG_LINKS (I)'
   13610      A list (chain of `insn_list' expressions) giving information about
   13611      dependencies between instructions within a basic block.  Neither a
   13612      jump nor a label may come between the related insns.  These are
   13613      only used by the schedulers and by combine.  This is a deprecated
   13614      data structure.  Def-use and use-def chains are now preferred.
   13615 
   13616 `REG_NOTES (I)'
   13617      A list (chain of `expr_list' and `insn_list' expressions) giving
   13618      miscellaneous information about the insn.  It is often information
   13619      pertaining to the registers used in this insn.
   13620 
   13621  The `LOG_LINKS' field of an insn is a chain of `insn_list'
   13622 expressions.  Each of these has two operands: the first is an insn, and
   13623 the second is another `insn_list' expression (the next one in the
   13624 chain).  The last `insn_list' in the chain has a null pointer as second
   13625 operand.  The significant thing about the chain is which insns appear
   13626 in it (as first operands of `insn_list' expressions).  Their order is
   13627 not significant.
   13628 
   13629  This list is originally set up by the flow analysis pass; it is a null
   13630 pointer until then.  Flow only adds links for those data dependencies
   13631 which can be used for instruction combination.  For each insn, the flow
   13632 analysis pass adds a link to insns which store into registers values
   13633 that are used for the first time in this insn.
   13634 
   13635  The `REG_NOTES' field of an insn is a chain similar to the `LOG_LINKS'
   13636 field but it includes `expr_list' expressions in addition to
   13637 `insn_list' expressions.  There are several kinds of register notes,
   13638 which are distinguished by the machine mode, which in a register note
   13639 is really understood as being an `enum reg_note'.  The first operand OP
   13640 of the note is data whose meaning depends on the kind of note.
   13641 
   13642  The macro `REG_NOTE_KIND (X)' returns the kind of register note.  Its
   13643 counterpart, the macro `PUT_REG_NOTE_KIND (X, NEWKIND)' sets the
   13644 register note type of X to be NEWKIND.
   13645 
   13646  Register notes are of three classes: They may say something about an
   13647 input to an insn, they may say something about an output of an insn, or
   13648 they may create a linkage between two insns.  There are also a set of
   13649 values that are only used in `LOG_LINKS'.
   13650 
   13651  These register notes annotate inputs to an insn:
   13652 
   13653 `REG_DEAD'
   13654      The value in OP dies in this insn; that is to say, altering the
   13655      value immediately after this insn would not affect the future
   13656      behavior of the program.
   13657 
   13658      It does not follow that the register OP has no useful value after
   13659      this insn since OP is not necessarily modified by this insn.
   13660      Rather, no subsequent instruction uses the contents of OP.
   13661 
   13662 `REG_UNUSED'
   13663      The register OP being set by this insn will not be used in a
   13664      subsequent insn.  This differs from a `REG_DEAD' note, which
   13665      indicates that the value in an input will not be used subsequently.
   13666      These two notes are independent; both may be present for the same
   13667      register.
   13668 
   13669 `REG_INC'
   13670      The register OP is incremented (or decremented; at this level
   13671      there is no distinction) by an embedded side effect inside this
   13672      insn.  This means it appears in a `post_inc', `pre_inc',
   13673      `post_dec' or `pre_dec' expression.
   13674 
   13675 `REG_NONNEG'
   13676      The register OP is known to have a nonnegative value when this
   13677      insn is reached.  This is used so that decrement and branch until
   13678      zero instructions, such as the m68k dbra, can be matched.
   13679 
   13680      The `REG_NONNEG' note is added to insns only if the machine
   13681      description has a `decrement_and_branch_until_zero' pattern.
   13682 
   13683 `REG_NO_CONFLICT'
   13684      This insn does not cause a conflict between OP and the item being
   13685      set by this insn even though it might appear that it does.  In
   13686      other words, if the destination register and OP could otherwise be
   13687      assigned the same register, this insn does not prevent that
   13688      assignment.
   13689 
   13690      Insns with this note are usually part of a block that begins with a
   13691      `clobber' insn specifying a multi-word pseudo register (which will
   13692      be the output of the block), a group of insns that each set one
   13693      word of the value and have the `REG_NO_CONFLICT' note attached,
   13694      and a final insn that copies the output to itself with an attached
   13695      `REG_EQUAL' note giving the expression being computed.  This block
   13696      is encapsulated with `REG_LIBCALL' and `REG_RETVAL' notes on the
   13697      first and last insns, respectively.
   13698 
   13699 `REG_LABEL_OPERAND'
   13700      This insn uses OP, a `code_label' or a `note' of type
   13701      `NOTE_INSN_DELETED_LABEL', but is not a `jump_insn', or it is a
   13702      `jump_insn' that refers to the operand as an ordinary operand.
   13703      The label may still eventually be a jump target, but if so in an
   13704      indirect jump in a subsequent insn.  The presence of this note
   13705      allows jump optimization to be aware that OP is, in fact, being
   13706      used, and flow optimization to build an accurate flow graph.
   13707 
   13708 `REG_LABEL_TARGET'
   13709      This insn is a `jump_insn' but not a `addr_vec' or
   13710      `addr_diff_vec'.  It uses OP, a `code_label' as a direct or
   13711      indirect jump target.  Its purpose is similar to that of
   13712      `REG_LABEL_OPERAND'.  This note is only present if the insn has
   13713      multiple targets; the last label in the insn (in the highest
   13714      numbered insn-field) goes into the `JUMP_LABEL' field and does not
   13715      have a `REG_LABEL_TARGET' note.  *Note JUMP_LABEL: Insns.
   13716 
   13717 `REG_CROSSING_JUMP'
   13718      This insn is an branching instruction (either an unconditional
   13719      jump or an indirect jump) which crosses between hot and cold
   13720      sections, which could potentially be very far apart in the
   13721      executable.  The presence of this note indicates to other
   13722      optimizations that this this branching instruction should not be
   13723      "collapsed" into a simpler branching construct.  It is used when
   13724      the optimization to partition basic blocks into hot and cold
   13725      sections is turned on.
   13726 
   13727 `REG_SETJMP'
   13728      Appears attached to each `CALL_INSN' to `setjmp' or a related
   13729      function.
   13730 
   13731  The following notes describe attributes of outputs of an insn:
   13732 
   13733 `REG_EQUIV'
   13734 `REG_EQUAL'
   13735      This note is only valid on an insn that sets only one register and
   13736      indicates that that register will be equal to OP at run time; the
   13737      scope of this equivalence differs between the two types of notes.
   13738      The value which the insn explicitly copies into the register may
   13739      look different from OP, but they will be equal at run time.  If the
   13740      output of the single `set' is a `strict_low_part' expression, the
   13741      note refers to the register that is contained in `SUBREG_REG' of
   13742      the `subreg' expression.
   13743 
   13744      For `REG_EQUIV', the register is equivalent to OP throughout the
   13745      entire function, and could validly be replaced in all its
   13746      occurrences by OP.  ("Validly" here refers to the data flow of the
   13747      program; simple replacement may make some insns invalid.)  For
   13748      example, when a constant is loaded into a register that is never
   13749      assigned any other value, this kind of note is used.
   13750 
   13751      When a parameter is copied into a pseudo-register at entry to a
   13752      function, a note of this kind records that the register is
   13753      equivalent to the stack slot where the parameter was passed.
   13754      Although in this case the register may be set by other insns, it
   13755      is still valid to replace the register by the stack slot
   13756      throughout the function.
   13757 
   13758      A `REG_EQUIV' note is also used on an instruction which copies a
   13759      register parameter into a pseudo-register at entry to a function,
   13760      if there is a stack slot where that parameter could be stored.
   13761      Although other insns may set the pseudo-register, it is valid for
   13762      the compiler to replace the pseudo-register by stack slot
   13763      throughout the function, provided the compiler ensures that the
   13764      stack slot is properly initialized by making the replacement in
   13765      the initial copy instruction as well.  This is used on machines
   13766      for which the calling convention allocates stack space for
   13767      register parameters.  See `REG_PARM_STACK_SPACE' in *Note Stack
   13768      Arguments::.
   13769 
   13770      In the case of `REG_EQUAL', the register that is set by this insn
   13771      will be equal to OP at run time at the end of this insn but not
   13772      necessarily elsewhere in the function.  In this case, OP is
   13773      typically an arithmetic expression.  For example, when a sequence
   13774      of insns such as a library call is used to perform an arithmetic
   13775      operation, this kind of note is attached to the insn that produces
   13776      or copies the final value.
   13777 
   13778      These two notes are used in different ways by the compiler passes.
   13779      `REG_EQUAL' is used by passes prior to register allocation (such as
   13780      common subexpression elimination and loop optimization) to tell
   13781      them how to think of that value.  `REG_EQUIV' notes are used by
   13782      register allocation to indicate that there is an available
   13783      substitute expression (either a constant or a `mem' expression for
   13784      the location of a parameter on the stack) that may be used in
   13785      place of a register if insufficient registers are available.
   13786 
   13787      Except for stack homes for parameters, which are indicated by a
   13788      `REG_EQUIV' note and are not useful to the early optimization
   13789      passes and pseudo registers that are equivalent to a memory
   13790      location throughout their entire life, which is not detected until
   13791      later in the compilation, all equivalences are initially indicated
   13792      by an attached `REG_EQUAL' note.  In the early stages of register
   13793      allocation, a `REG_EQUAL' note is changed into a `REG_EQUIV' note
   13794      if OP is a constant and the insn represents the only set of its
   13795      destination register.
   13796 
   13797      Thus, compiler passes prior to register allocation need only check
   13798      for `REG_EQUAL' notes and passes subsequent to register allocation
   13799      need only check for `REG_EQUIV' notes.
   13800 
   13801  These notes describe linkages between insns.  They occur in pairs: one
   13802 insn has one of a pair of notes that points to a second insn, which has
   13803 the inverse note pointing back to the first insn.
   13804 
   13805 `REG_RETVAL'
   13806      This insn copies the value of a multi-insn sequence (for example, a
   13807      library call), and OP is the first insn of the sequence (for a
   13808      library call, the first insn that was generated to set up the
   13809      arguments for the library call).
   13810 
   13811      Loop optimization uses this note to treat such a sequence as a
   13812      single operation for code motion purposes and flow analysis uses
   13813      this note to delete such sequences whose results are dead.
   13814 
   13815      A `REG_EQUAL' note will also usually be attached to this insn to
   13816      provide the expression being computed by the sequence.
   13817 
   13818      These notes will be deleted after reload, since they are no longer
   13819      accurate or useful.
   13820 
   13821 `REG_LIBCALL'
   13822      This is the inverse of `REG_RETVAL': it is placed on the first
   13823      insn of a multi-insn sequence, and it points to the last one.
   13824 
   13825      These notes are deleted after reload, since they are no longer
   13826      useful or accurate.
   13827 
   13828 `REG_CC_SETTER'
   13829 `REG_CC_USER'
   13830      On machines that use `cc0', the insns which set and use `cc0' set
   13831      and use `cc0' are adjacent.  However, when branch delay slot
   13832      filling is done, this may no longer be true.  In this case a
   13833      `REG_CC_USER' note will be placed on the insn setting `cc0' to
   13834      point to the insn using `cc0' and a `REG_CC_SETTER' note will be
   13835      placed on the insn using `cc0' to point to the insn setting `cc0'.
   13836 
   13837  These values are only used in the `LOG_LINKS' field, and indicate the
   13838 type of dependency that each link represents.  Links which indicate a
   13839 data dependence (a read after write dependence) do not use any code,
   13840 they simply have mode `VOIDmode', and are printed without any
   13841 descriptive text.
   13842 
   13843 `REG_DEP_TRUE'
   13844      This indicates a true dependence (a read after write dependence).
   13845 
   13846 `REG_DEP_OUTPUT'
   13847      This indicates an output dependence (a write after write
   13848      dependence).
   13849 
   13850 `REG_DEP_ANTI'
   13851      This indicates an anti dependence (a write after read dependence).
   13852 
   13853 
   13854  These notes describe information gathered from gcov profile data.  They
   13855 are stored in the `REG_NOTES' field of an insn as an `expr_list'.
   13856 
   13857 `REG_BR_PROB'
   13858      This is used to specify the ratio of branches to non-branches of a
   13859      branch insn according to the profile data.  The value is stored as
   13860      a value between 0 and REG_BR_PROB_BASE; larger values indicate a
   13861      higher probability that the branch will be taken.
   13862 
   13863 `REG_BR_PRED'
   13864      These notes are found in JUMP insns after delayed branch scheduling
   13865      has taken place.  They indicate both the direction and the
   13866      likelihood of the JUMP.  The format is a bitmask of ATTR_FLAG_*
   13867      values.
   13868 
   13869 `REG_FRAME_RELATED_EXPR'
   13870      This is used on an RTX_FRAME_RELATED_P insn wherein the attached
   13871      expression is used in place of the actual insn pattern.  This is
   13872      done in cases where the pattern is either complex or misleading.
   13873 
   13874 `REG_LIBCALL_ID'
   13875      This is used to specify that an insn is part of a libcall.  Each
   13876      libcall in a function has a unique id, and all the insns that are
   13877      part of that libcall will have a REG_LIBCALL_ID note attached with
   13878      the same ID.
   13879 
   13880  For convenience, the machine mode in an `insn_list' or `expr_list' is
   13881 printed using these symbolic codes in debugging dumps.
   13882 
   13883  The only difference between the expression codes `insn_list' and
   13884 `expr_list' is that the first operand of an `insn_list' is assumed to
   13885 be an insn and is printed in debugging dumps as the insn's unique id;
   13886 the first operand of an `expr_list' is printed in the ordinary way as
   13887 an expression.
   13888 
   13889 
   13890 File: gccint.info,  Node: Calls,  Next: Sharing,  Prev: Insns,  Up: RTL
   13891 
   13892 12.19 RTL Representation of Function-Call Insns
   13893 ===============================================
   13894 
   13895 Insns that call subroutines have the RTL expression code `call_insn'.
   13896 These insns must satisfy special rules, and their bodies must use a
   13897 special RTL expression code, `call'.
   13898 
   13899  A `call' expression has two operands, as follows:
   13900 
   13901      (call (mem:FM ADDR) NBYTES)
   13902 
   13903 Here NBYTES is an operand that represents the number of bytes of
   13904 argument data being passed to the subroutine, FM is a machine mode
   13905 (which must equal as the definition of the `FUNCTION_MODE' macro in the
   13906 machine description) and ADDR represents the address of the subroutine.
   13907 
   13908  For a subroutine that returns no value, the `call' expression as shown
   13909 above is the entire body of the insn, except that the insn might also
   13910 contain `use' or `clobber' expressions.
   13911 
   13912  For a subroutine that returns a value whose mode is not `BLKmode', the
   13913 value is returned in a hard register.  If this register's number is R,
   13914 then the body of the call insn looks like this:
   13915 
   13916      (set (reg:M R)
   13917           (call (mem:FM ADDR) NBYTES))
   13918 
   13919 This RTL expression makes it clear (to the optimizer passes) that the
   13920 appropriate register receives a useful value in this insn.
   13921 
   13922  When a subroutine returns a `BLKmode' value, it is handled by passing
   13923 to the subroutine the address of a place to store the value.  So the
   13924 call insn itself does not "return" any value, and it has the same RTL
   13925 form as a call that returns nothing.
   13926 
   13927  On some machines, the call instruction itself clobbers some register,
   13928 for example to contain the return address.  `call_insn' insns on these
   13929 machines should have a body which is a `parallel' that contains both
   13930 the `call' expression and `clobber' expressions that indicate which
   13931 registers are destroyed.  Similarly, if the call instruction requires
   13932 some register other than the stack pointer that is not explicitly
   13933 mentioned in its RTL, a `use' subexpression should mention that
   13934 register.
   13935 
   13936  Functions that are called are assumed to modify all registers listed in
   13937 the configuration macro `CALL_USED_REGISTERS' (*note Register Basics::)
   13938 and, with the exception of `const' functions and library calls, to
   13939 modify all of memory.
   13940 
   13941  Insns containing just `use' expressions directly precede the
   13942 `call_insn' insn to indicate which registers contain inputs to the
   13943 function.  Similarly, if registers other than those in
   13944 `CALL_USED_REGISTERS' are clobbered by the called function, insns
   13945 containing a single `clobber' follow immediately after the call to
   13946 indicate which registers.
   13947 
   13948 
   13949 File: gccint.info,  Node: Sharing,  Next: Reading RTL,  Prev: Calls,  Up: RTL
   13950 
   13951 12.20 Structure Sharing Assumptions
   13952 ===================================
   13953 
   13954 The compiler assumes that certain kinds of RTL expressions are unique;
   13955 there do not exist two distinct objects representing the same value.
   13956 In other cases, it makes an opposite assumption: that no RTL expression
   13957 object of a certain kind appears in more than one place in the
   13958 containing structure.
   13959 
   13960  These assumptions refer to a single function; except for the RTL
   13961 objects that describe global variables and external functions, and a
   13962 few standard objects such as small integer constants, no RTL objects
   13963 are common to two functions.
   13964 
   13965    * Each pseudo-register has only a single `reg' object to represent
   13966      it, and therefore only a single machine mode.
   13967 
   13968    * For any symbolic label, there is only one `symbol_ref' object
   13969      referring to it.
   13970 
   13971    * All `const_int' expressions with equal values are shared.
   13972 
   13973    * There is only one `pc' expression.
   13974 
   13975    * There is only one `cc0' expression.
   13976 
   13977    * There is only one `const_double' expression with value 0 for each
   13978      floating point mode.  Likewise for values 1 and 2.
   13979 
   13980    * There is only one `const_vector' expression with value 0 for each
   13981      vector mode, be it an integer or a double constant vector.
   13982 
   13983    * No `label_ref' or `scratch' appears in more than one place in the
   13984      RTL structure; in other words, it is safe to do a tree-walk of all
   13985      the insns in the function and assume that each time a `label_ref'
   13986      or `scratch' is seen it is distinct from all others that are seen.
   13987 
   13988    * Only one `mem' object is normally created for each static variable
   13989      or stack slot, so these objects are frequently shared in all the
   13990      places they appear.  However, separate but equal objects for these
   13991      variables are occasionally made.
   13992 
   13993    * When a single `asm' statement has multiple output operands, a
   13994      distinct `asm_operands' expression is made for each output operand.
   13995      However, these all share the vector which contains the sequence of
   13996      input operands.  This sharing is used later on to test whether two
   13997      `asm_operands' expressions come from the same statement, so all
   13998      optimizations must carefully preserve the sharing if they copy the
   13999      vector at all.
   14000 
   14001    * No RTL object appears in more than one place in the RTL structure
   14002      except as described above.  Many passes of the compiler rely on
   14003      this by assuming that they can modify RTL objects in place without
   14004      unwanted side-effects on other insns.
   14005 
   14006    * During initial RTL generation, shared structure is freely
   14007      introduced.  After all the RTL for a function has been generated,
   14008      all shared structure is copied by `unshare_all_rtl' in
   14009      `emit-rtl.c', after which the above rules are guaranteed to be
   14010      followed.
   14011 
   14012    * During the combiner pass, shared structure within an insn can exist
   14013      temporarily.  However, the shared structure is copied before the
   14014      combiner is finished with the insn.  This is done by calling
   14015      `copy_rtx_if_shared', which is a subroutine of `unshare_all_rtl'.
   14016 
   14017 
   14018 File: gccint.info,  Node: Reading RTL,  Prev: Sharing,  Up: RTL
   14019 
   14020 12.21 Reading RTL
   14021 =================
   14022 
   14023 To read an RTL object from a file, call `read_rtx'.  It takes one
   14024 argument, a stdio stream, and returns a single RTL object.  This routine
   14025 is defined in `read-rtl.c'.  It is not available in the compiler
   14026 itself, only the various programs that generate the compiler back end
   14027 from the machine description.
   14028 
   14029  People frequently have the idea of using RTL stored as text in a file
   14030 as an interface between a language front end and the bulk of GCC.  This
   14031 idea is not feasible.
   14032 
   14033  GCC was designed to use RTL internally only.  Correct RTL for a given
   14034 program is very dependent on the particular target machine.  And the RTL
   14035 does not contain all the information about the program.
   14036 
   14037  The proper way to interface GCC to a new language front end is with
   14038 the "tree" data structure, described in the files `tree.h' and
   14039 `tree.def'.  The documentation for this structure (*note Trees::) is
   14040 incomplete.
   14041 
   14042 
   14043 File: gccint.info,  Node: Control Flow,  Next: Tree SSA,  Prev: RTL,  Up: Top
   14044 
   14045 13 Control Flow Graph
   14046 *********************
   14047 
   14048 A control flow graph (CFG) is a data structure built on top of the
   14049 intermediate code representation (the RTL or `tree' instruction stream)
   14050 abstracting the control flow behavior of a function that is being
   14051 compiled.  The CFG is a directed graph where the vertices represent
   14052 basic blocks and edges represent possible transfer of control flow from
   14053 one basic block to another.  The data structures used to represent the
   14054 control flow graph are defined in `basic-block.h'.
   14055 
   14056 * Menu:
   14057 
   14058 * Basic Blocks::           The definition and representation of basic blocks.
   14059 * Edges::                  Types of edges and their representation.
   14060 * Profile information::    Representation of frequencies and probabilities.
   14061 * Maintaining the CFG::    Keeping the control flow graph and up to date.
   14062 * Liveness information::   Using and maintaining liveness information.
   14063 
   14064 
   14065 File: gccint.info,  Node: Basic Blocks,  Next: Edges,  Up: Control Flow
   14066 
   14067 13.1 Basic Blocks
   14068 =================
   14069 
   14070 A basic block is a straight-line sequence of code with only one entry
   14071 point and only one exit.  In GCC, basic blocks are represented using
   14072 the `basic_block' data type.
   14073 
   14074  Two pointer members of the `basic_block' structure are the pointers
   14075 `next_bb' and `prev_bb'.  These are used to keep doubly linked chain of
   14076 basic blocks in the same order as the underlying instruction stream.
   14077 The chain of basic blocks is updated transparently by the provided API
   14078 for manipulating the CFG.  The macro `FOR_EACH_BB' can be used to visit
   14079 all the basic blocks in lexicographical order.  Dominator traversals
   14080 are also possible using `walk_dominator_tree'.  Given two basic blocks
   14081 A and B, block A dominates block B if A is _always_ executed before B.
   14082 
   14083  The `BASIC_BLOCK' array contains all basic blocks in an unspecified
   14084 order.  Each `basic_block' structure has a field that holds a unique
   14085 integer identifier `index' that is the index of the block in the
   14086 `BASIC_BLOCK' array.  The total number of basic blocks in the function
   14087 is `n_basic_blocks'.  Both the basic block indices and the total number
   14088 of basic blocks may vary during the compilation process, as passes
   14089 reorder, create, duplicate, and destroy basic blocks.  The index for
   14090 any block should never be greater than `last_basic_block'.
   14091 
   14092  Special basic blocks represent possible entry and exit points of a
   14093 function.  These blocks are called `ENTRY_BLOCK_PTR' and
   14094 `EXIT_BLOCK_PTR'.  These blocks do not contain any code, and are not
   14095 elements of the `BASIC_BLOCK' array.  Therefore they have been assigned
   14096 unique, negative index numbers.
   14097 
   14098  Each `basic_block' also contains pointers to the first instruction
   14099 (the "head") and the last instruction (the "tail") or "end" of the
   14100 instruction stream contained in a basic block.  In fact, since the
   14101 `basic_block' data type is used to represent blocks in both major
   14102 intermediate representations of GCC (`tree' and RTL), there are
   14103 pointers to the head and end of a basic block for both representations.
   14104 
   14105  For RTL, these pointers are `rtx head, end'.  In the RTL function
   14106 representation, the head pointer always points either to a
   14107 `NOTE_INSN_BASIC_BLOCK' or to a `CODE_LABEL', if present.  In the RTL
   14108 representation of a function, the instruction stream contains not only
   14109 the "real" instructions, but also "notes".  Any function that moves or
   14110 duplicates the basic blocks needs to take care of updating of these
   14111 notes.  Many of these notes expect that the instruction stream consists
   14112 of linear regions, making such updates difficult.   The
   14113 `NOTE_INSN_BASIC_BLOCK' note is the only kind of note that may appear
   14114 in the instruction stream contained in a basic block.  The instruction
   14115 stream of a basic block always follows a `NOTE_INSN_BASIC_BLOCK',  but
   14116 zero or more `CODE_LABEL' nodes can precede the block note.   A basic
   14117 block ends by control flow instruction or last instruction before
   14118 following `CODE_LABEL' or `NOTE_INSN_BASIC_BLOCK'.  A `CODE_LABEL'
   14119 cannot appear in the instruction stream of a basic block.
   14120 
   14121  In addition to notes, the jump table vectors are also represented as
   14122 "pseudo-instructions" inside the insn stream.  These vectors never
   14123 appear in the basic block and should always be placed just after the
   14124 table jump instructions referencing them.  After removing the
   14125 table-jump it is often difficult to eliminate the code computing the
   14126 address and referencing the vector, so cleaning up these vectors is
   14127 postponed until after liveness analysis.   Thus the jump table vectors
   14128 may appear in the insn stream unreferenced and without any purpose.
   14129 Before any edge is made "fall-thru", the existence of such construct in
   14130 the way needs to be checked by calling `can_fallthru' function.
   14131 
   14132  For the `tree' representation, the head and end of the basic block are
   14133 being pointed to by the `stmt_list' field, but this special `tree'
   14134 should never be referenced directly.  Instead, at the tree level
   14135 abstract containers and iterators are used to access statements and
   14136 expressions in basic blocks.  These iterators are called "block
   14137 statement iterators" (BSIs).  Grep for `^bsi' in the various `tree-*'
   14138 files.  The following snippet will pretty-print all the statements of
   14139 the program in the GIMPLE representation.
   14140 
   14141      FOR_EACH_BB (bb)
   14142        {
   14143           block_stmt_iterator si;
   14144 
   14145           for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
   14146             {
   14147                tree stmt = bsi_stmt (si);
   14148                print_generic_stmt (stderr, stmt, 0);
   14149             }
   14150        }
   14151 
   14152 
   14153 File: gccint.info,  Node: Edges,  Next: Profile information,  Prev: Basic Blocks,  Up: Control Flow
   14154 
   14155 13.2 Edges
   14156 ==========
   14157 
   14158 Edges represent possible control flow transfers from the end of some
   14159 basic block A to the head of another basic block B.  We say that A is a
   14160 predecessor of B, and B is a successor of A.  Edges are represented in
   14161 GCC with the `edge' data type.  Each `edge' acts as a link between two
   14162 basic blocks: the `src' member of an edge points to the predecessor
   14163 basic block of the `dest' basic block.  The members `preds' and `succs'
   14164 of the `basic_block' data type point to type-safe vectors of edges to
   14165 the predecessors and successors of the block.
   14166 
   14167  When walking the edges in an edge vector, "edge iterators" should be
   14168 used.  Edge iterators are constructed using the `edge_iterator' data
   14169 structure and several methods are available to operate on them:
   14170 
   14171 `ei_start'
   14172      This function initializes an `edge_iterator' that points to the
   14173      first edge in a vector of edges.
   14174 
   14175 `ei_last'
   14176      This function initializes an `edge_iterator' that points to the
   14177      last edge in a vector of edges.
   14178 
   14179 `ei_end_p'
   14180      This predicate is `true' if an `edge_iterator' represents the last
   14181      edge in an edge vector.
   14182 
   14183 `ei_one_before_end_p'
   14184      This predicate is `true' if an `edge_iterator' represents the
   14185      second last edge in an edge vector.
   14186 
   14187 `ei_next'
   14188      This function takes a pointer to an `edge_iterator' and makes it
   14189      point to the next edge in the sequence.
   14190 
   14191 `ei_prev'
   14192      This function takes a pointer to an `edge_iterator' and makes it
   14193      point to the previous edge in the sequence.
   14194 
   14195 `ei_edge'
   14196      This function returns the `edge' currently pointed to by an
   14197      `edge_iterator'.
   14198 
   14199 `ei_safe_safe'
   14200      This function returns the `edge' currently pointed to by an
   14201      `edge_iterator', but returns `NULL' if the iterator is pointing at
   14202      the end of the sequence.  This function has been provided for
   14203      existing code makes the assumption that a `NULL' edge indicates
   14204      the end of the sequence.
   14205 
   14206 
   14207  The convenience macro `FOR_EACH_EDGE' can be used to visit all of the
   14208 edges in a sequence of predecessor or successor edges.  It must not be
   14209 used when an element might be removed during the traversal, otherwise
   14210 elements will be missed.  Here is an example of how to use the macro:
   14211 
   14212      edge e;
   14213      edge_iterator ei;
   14214 
   14215      FOR_EACH_EDGE (e, ei, bb->succs)
   14216        {
   14217           if (e->flags & EDGE_FALLTHRU)
   14218             break;
   14219        }
   14220 
   14221  There are various reasons why control flow may transfer from one block
   14222 to another.  One possibility is that some instruction, for example a
   14223 `CODE_LABEL', in a linearized instruction stream just always starts a
   14224 new basic block.  In this case a "fall-thru" edge links the basic block
   14225 to the first following basic block.  But there are several other
   14226 reasons why edges may be created.  The `flags' field of the `edge' data
   14227 type is used to store information about the type of edge we are dealing
   14228 with.  Each edge is of one of the following types:
   14229 
   14230 _jump_
   14231      No type flags are set for edges corresponding to jump instructions.
   14232      These edges are used for unconditional or conditional jumps and in
   14233      RTL also for table jumps.  They are the easiest to manipulate as
   14234      they may be freely redirected when the flow graph is not in SSA
   14235      form.
   14236 
   14237 _fall-thru_
   14238      Fall-thru edges are present in case where the basic block may
   14239      continue execution to the following one without branching.  These
   14240      edges have the `EDGE_FALLTHRU' flag set.  Unlike other types of
   14241      edges, these edges must come into the basic block immediately
   14242      following in the instruction stream.  The function
   14243      `force_nonfallthru' is available to insert an unconditional jump
   14244      in the case that redirection is needed.  Note that this may
   14245      require creation of a new basic block.
   14246 
   14247 _exception handling_
   14248      Exception handling edges represent possible control transfers from
   14249      a trapping instruction to an exception handler.  The definition of
   14250      "trapping" varies.  In C++, only function calls can throw, but for
   14251      Java, exceptions like division by zero or segmentation fault are
   14252      defined and thus each instruction possibly throwing this kind of
   14253      exception needs to be handled as control flow instruction.
   14254      Exception edges have the `EDGE_ABNORMAL' and `EDGE_EH' flags set.
   14255 
   14256      When updating the instruction stream it is easy to change possibly
   14257      trapping instruction to non-trapping, by simply removing the
   14258      exception edge.  The opposite conversion is difficult, but should
   14259      not happen anyway.  The edges can be eliminated via
   14260      `purge_dead_edges' call.
   14261 
   14262      In the RTL representation, the destination of an exception edge is
   14263      specified by `REG_EH_REGION' note attached to the insn.  In case
   14264      of a trapping call the `EDGE_ABNORMAL_CALL' flag is set too.  In
   14265      the `tree' representation, this extra flag is not set.
   14266 
   14267      In the RTL representation, the predicate `may_trap_p' may be used
   14268      to check whether instruction still may trap or not.  For the tree
   14269      representation, the `tree_could_trap_p' predicate is available,
   14270      but this predicate only checks for possible memory traps, as in
   14271      dereferencing an invalid pointer location.
   14272 
   14273 _sibling calls_
   14274      Sibling calls or tail calls terminate the function in a
   14275      non-standard way and thus an edge to the exit must be present.
   14276      `EDGE_SIBCALL' and `EDGE_ABNORMAL' are set in such case.  These
   14277      edges only exist in the RTL representation.
   14278 
   14279 _computed jumps_
   14280      Computed jumps contain edges to all labels in the function
   14281      referenced from the code.  All those edges have `EDGE_ABNORMAL'
   14282      flag set.  The edges used to represent computed jumps often cause
   14283      compile time performance problems, since functions consisting of
   14284      many taken labels and many computed jumps may have _very_ dense
   14285      flow graphs, so these edges need to be handled with special care.
   14286      During the earlier stages of the compilation process, GCC tries to
   14287      avoid such dense flow graphs by factoring computed jumps.  For
   14288      example, given the following series of jumps,
   14289 
   14290             goto *x;
   14291             [ ... ]
   14292 
   14293             goto *x;
   14294             [ ... ]
   14295 
   14296             goto *x;
   14297             [ ... ]
   14298 
   14299      factoring the computed jumps results in the following code sequence
   14300      which has a much simpler flow graph:
   14301 
   14302             goto y;
   14303             [ ... ]
   14304 
   14305             goto y;
   14306             [ ... ]
   14307 
   14308             goto y;
   14309             [ ... ]
   14310 
   14311           y:
   14312             goto *x;
   14313 
   14314      However, the classic problem with this transformation is that it
   14315      has a runtime cost in there resulting code: An extra jump.
   14316      Therefore, the computed jumps are un-factored in the later passes
   14317      of the compiler.  Be aware of that when you work on passes in that
   14318      area.  There have been numerous examples already where the compile
   14319      time for code with unfactored computed jumps caused some serious
   14320      headaches.
   14321 
   14322 _nonlocal goto handlers_
   14323      GCC allows nested functions to return into caller using a `goto'
   14324      to a label passed to as an argument to the callee.  The labels
   14325      passed to nested functions contain special code to cleanup after
   14326      function call.  Such sections of code are referred to as "nonlocal
   14327      goto receivers".  If a function contains such nonlocal goto
   14328      receivers, an edge from the call to the label is created with the
   14329      `EDGE_ABNORMAL' and `EDGE_ABNORMAL_CALL' flags set.
   14330 
   14331 _function entry points_
   14332      By definition, execution of function starts at basic block 0, so
   14333      there is always an edge from the `ENTRY_BLOCK_PTR' to basic block
   14334      0.  There is no `tree' representation for alternate entry points at
   14335      this moment.  In RTL, alternate entry points are specified by
   14336      `CODE_LABEL' with `LABEL_ALTERNATE_NAME' defined.  This feature is
   14337      currently used for multiple entry point prologues and is limited
   14338      to post-reload passes only.  This can be used by back-ends to emit
   14339      alternate prologues for functions called from different contexts.
   14340      In future full support for multiple entry functions defined by
   14341      Fortran 90 needs to be implemented.
   14342 
   14343 _function exits_
   14344      In the pre-reload representation a function terminates after the
   14345      last instruction in the insn chain and no explicit return
   14346      instructions are used.  This corresponds to the fall-thru edge
   14347      into exit block.  After reload, optimal RTL epilogues are used
   14348      that use explicit (conditional) return instructions that are
   14349      represented by edges with no flags set.
   14350 
   14351 
   14352 
   14353 File: gccint.info,  Node: Profile information,  Next: Maintaining the CFG,  Prev: Edges,  Up: Control Flow
   14354 
   14355 13.3 Profile information
   14356 ========================
   14357 
   14358 In many cases a compiler must make a choice whether to trade speed in
   14359 one part of code for speed in another, or to trade code size for code
   14360 speed.  In such cases it is useful to know information about how often
   14361 some given block will be executed.  That is the purpose for maintaining
   14362 profile within the flow graph.  GCC can handle profile information
   14363 obtained through "profile feedback", but it can also  estimate branch
   14364 probabilities based on statics and heuristics.
   14365 
   14366  The feedback based profile is produced by compiling the program with
   14367 instrumentation, executing it on a train run and reading the numbers of
   14368 executions of basic blocks and edges back to the compiler while
   14369 re-compiling the program to produce the final executable.  This method
   14370 provides very accurate information about where a program spends most of
   14371 its time on the train run.  Whether it matches the average run of
   14372 course depends on the choice of train data set, but several studies
   14373 have shown that the behavior of a program usually changes just
   14374 marginally over different data sets.
   14375 
   14376  When profile feedback is not available, the compiler may be asked to
   14377 attempt to predict the behavior of each branch in the program using a
   14378 set of heuristics (see `predict.def' for details) and compute estimated
   14379 frequencies of each basic block by propagating the probabilities over
   14380 the graph.
   14381 
   14382  Each `basic_block' contains two integer fields to represent profile
   14383 information: `frequency' and `count'.  The `frequency' is an estimation
   14384 how often is basic block executed within a function.  It is represented
   14385 as an integer scaled in the range from 0 to `BB_FREQ_BASE'.  The most
   14386 frequently executed basic block in function is initially set to
   14387 `BB_FREQ_BASE' and the rest of frequencies are scaled accordingly.
   14388 During optimization, the frequency of the most frequent basic block can
   14389 both decrease (for instance by loop unrolling) or grow (for instance by
   14390 cross-jumping optimization), so scaling sometimes has to be performed
   14391 multiple times.
   14392 
   14393  The `count' contains hard-counted numbers of execution measured during
   14394 training runs and is nonzero only when profile feedback is available.
   14395 This value is represented as the host's widest integer (typically a 64
   14396 bit integer) of the special type `gcov_type'.
   14397 
   14398  Most optimization passes can use only the frequency information of a
   14399 basic block, but a few passes may want to know hard execution counts.
   14400 The frequencies should always match the counts after scaling, however
   14401 during updating of the profile information numerical error may
   14402 accumulate into quite large errors.
   14403 
   14404  Each edge also contains a branch probability field: an integer in the
   14405 range from 0 to `REG_BR_PROB_BASE'.  It represents probability of
   14406 passing control from the end of the `src' basic block to the `dest'
   14407 basic block, i.e. the probability that control will flow along this
   14408 edge.   The `EDGE_FREQUENCY' macro is available to compute how
   14409 frequently a given edge is taken.  There is a `count' field for each
   14410 edge as well, representing same information as for a basic block.
   14411 
   14412  The basic block frequencies are not represented in the instruction
   14413 stream, but in the RTL representation the edge frequencies are
   14414 represented for conditional jumps (via the `REG_BR_PROB' macro) since
   14415 they are used when instructions are output to the assembly file and the
   14416 flow graph is no longer maintained.
   14417 
   14418  The probability that control flow arrives via a given edge to its
   14419 destination basic block is called "reverse probability" and is not
   14420 directly represented, but it may be easily computed from frequencies of
   14421 basic blocks.
   14422 
   14423  Updating profile information is a delicate task that can unfortunately
   14424 not be easily integrated with the CFG manipulation API.  Many of the
   14425 functions and hooks to modify the CFG, such as
   14426 `redirect_edge_and_branch', do not have enough information to easily
   14427 update the profile, so updating it is in the majority of cases left up
   14428 to the caller.  It is difficult to uncover bugs in the profile updating
   14429 code, because they manifest themselves only by producing worse code,
   14430 and checking profile consistency is not possible because of numeric
   14431 error accumulation.  Hence special attention needs to be given to this
   14432 issue in each pass that modifies the CFG.
   14433 
   14434  It is important to point out that `REG_BR_PROB_BASE' and
   14435 `BB_FREQ_BASE' are both set low enough to be possible to compute second
   14436 power of any frequency or probability in the flow graph, it is not
   14437 possible to even square the `count' field, as modern CPUs are fast
   14438 enough to execute $2^32$ operations quickly.
   14439 
   14440 
   14441 File: gccint.info,  Node: Maintaining the CFG,  Next: Liveness information,  Prev: Profile information,  Up: Control Flow
   14442 
   14443 13.4 Maintaining the CFG
   14444 ========================
   14445 
   14446 An important task of each compiler pass is to keep both the control
   14447 flow graph and all profile information up-to-date.  Reconstruction of
   14448 the control flow graph after each pass is not an option, since it may be
   14449 very expensive and lost profile information cannot be reconstructed at
   14450 all.
   14451 
   14452  GCC has two major intermediate representations, and both use the
   14453 `basic_block' and `edge' data types to represent control flow.  Both
   14454 representations share as much of the CFG maintenance code as possible.
   14455 For each representation, a set of "hooks" is defined so that each
   14456 representation can provide its own implementation of CFG manipulation
   14457 routines when necessary.  These hooks are defined in `cfghooks.h'.
   14458 There are hooks for almost all common CFG manipulations, including
   14459 block splitting and merging, edge redirection and creating and deleting
   14460 basic blocks.  These hooks should provide everything you need to
   14461 maintain and manipulate the CFG in both the RTL and `tree'
   14462 representation.
   14463 
   14464  At the moment, the basic block boundaries are maintained transparently
   14465 when modifying instructions, so there rarely is a need to move them
   14466 manually (such as in case someone wants to output instruction outside
   14467 basic block explicitly).  Often the CFG may be better viewed as
   14468 integral part of instruction chain, than structure built on the top of
   14469 it.  However, in principle the control flow graph for the `tree'
   14470 representation is _not_ an integral part of the representation, in that
   14471 a function tree may be expanded without first building a  flow graph
   14472 for the `tree' representation at all.  This happens when compiling
   14473 without any `tree' optimization enabled.  When the `tree' optimizations
   14474 are enabled and the instruction stream is rewritten in SSA form, the
   14475 CFG is very tightly coupled with the instruction stream.  In
   14476 particular, statement insertion and removal has to be done with care.
   14477 In fact, the whole `tree' representation can not be easily used or
   14478 maintained without proper maintenance of the CFG simultaneously.
   14479 
   14480  In the RTL representation, each instruction has a `BLOCK_FOR_INSN'
   14481 value that represents pointer to the basic block that contains the
   14482 instruction.  In the `tree' representation, the function `bb_for_stmt'
   14483 returns a pointer to the basic block containing the queried statement.
   14484 
   14485  When changes need to be applied to a function in its `tree'
   14486 representation, "block statement iterators" should be used.  These
   14487 iterators provide an integrated abstraction of the flow graph and the
   14488 instruction stream.  Block statement iterators iterators are
   14489 constructed using the `block_stmt_iterator' data structure and several
   14490 modifier are available, including the following:
   14491 
   14492 `bsi_start'
   14493      This function initializes a `block_stmt_iterator' that points to
   14494      the first non-empty statement in a basic block.
   14495 
   14496 `bsi_last'
   14497      This function initializes a `block_stmt_iterator' that points to
   14498      the last statement in a basic block.
   14499 
   14500 `bsi_end_p'
   14501      This predicate is `true' if a `block_stmt_iterator' represents the
   14502      end of a basic block.
   14503 
   14504 `bsi_next'
   14505      This function takes a `block_stmt_iterator' and makes it point to
   14506      its successor.
   14507 
   14508 `bsi_prev'
   14509      This function takes a `block_stmt_iterator' and makes it point to
   14510      its predecessor.
   14511 
   14512 `bsi_insert_after'
   14513      This function inserts a statement after the `block_stmt_iterator'
   14514      passed in.  The final parameter determines whether the statement
   14515      iterator is updated to point to the newly inserted statement, or
   14516      left pointing to the original statement.
   14517 
   14518 `bsi_insert_before'
   14519      This function inserts a statement before the `block_stmt_iterator'
   14520      passed in.  The final parameter determines whether the statement
   14521      iterator is updated to point to the newly inserted statement, or
   14522      left pointing to the original  statement.
   14523 
   14524 `bsi_remove'
   14525      This function removes the `block_stmt_iterator' passed in and
   14526      rechains the remaining statements in a basic block, if any.
   14527 
   14528  In the RTL representation, the macros `BB_HEAD' and `BB_END' may be
   14529 used to get the head and end `rtx' of a basic block.  No abstract
   14530 iterators are defined for traversing the insn chain, but you can just
   14531 use `NEXT_INSN' and `PREV_INSN' instead.  See *Note Insns::.
   14532 
   14533  Usually a code manipulating pass simplifies the instruction stream and
   14534 the flow of control, possibly eliminating some edges.  This may for
   14535 example happen when a conditional jump is replaced with an
   14536 unconditional jump, but also when simplifying possibly trapping
   14537 instruction to non-trapping while compiling Java.  Updating of edges is
   14538 not transparent and each optimization pass is required to do so
   14539 manually.  However only few cases occur in practice.  The pass may call
   14540 `purge_dead_edges' on a given basic block to remove superfluous edges,
   14541 if any.
   14542 
   14543  Another common scenario is redirection of branch instructions, but
   14544 this is best modeled as redirection of edges in the control flow graph
   14545 and thus use of `redirect_edge_and_branch' is preferred over more low
   14546 level functions, such as `redirect_jump' that operate on RTL chain
   14547 only.  The CFG hooks defined in `cfghooks.h' should provide the
   14548 complete API required for manipulating and maintaining the CFG.
   14549 
   14550  It is also possible that a pass has to insert control flow instruction
   14551 into the middle of a basic block, thus creating an entry point in the
   14552 middle of the basic block, which is impossible by definition: The block
   14553 must be split to make sure it only has one entry point, i.e. the head
   14554 of the basic block.  The CFG hook `split_block' may be used when an
   14555 instruction in the middle of a basic block has to become the target of
   14556 a jump or branch instruction.
   14557 
   14558  For a global optimizer, a common operation is to split edges in the
   14559 flow graph and insert instructions on them.  In the RTL representation,
   14560 this can be easily done using the `insert_insn_on_edge' function that
   14561 emits an instruction "on the edge", caching it for a later
   14562 `commit_edge_insertions' call that will take care of moving the
   14563 inserted instructions off the edge into the instruction stream
   14564 contained in a basic block.  This includes the creation of new basic
   14565 blocks where needed.  In the `tree' representation, the equivalent
   14566 functions are `bsi_insert_on_edge' which inserts a block statement
   14567 iterator on an edge, and `bsi_commit_edge_inserts' which flushes the
   14568 instruction to actual instruction stream.
   14569 
   14570  While debugging the optimization pass, an `verify_flow_info' function
   14571 may be useful to find bugs in the control flow graph updating code.
   14572 
   14573  Note that at present, the representation of control flow in the `tree'
   14574 representation is discarded before expanding to RTL.  Long term the CFG
   14575 should be maintained and "expanded" to the RTL representation along
   14576 with the function `tree' itself.
   14577 
   14578 
   14579 File: gccint.info,  Node: Liveness information,  Prev: Maintaining the CFG,  Up: Control Flow
   14580 
   14581 13.5 Liveness information
   14582 =========================
   14583 
   14584 Liveness information is useful to determine whether some register is
   14585 "live" at given point of program, i.e. that it contains a value that
   14586 may be used at a later point in the program.  This information is used,
   14587 for instance, during register allocation, as the pseudo registers only
   14588 need to be assigned to a unique hard register or to a stack slot if
   14589 they are live.  The hard registers and stack slots may be freely reused
   14590 for other values when a register is dead.
   14591 
   14592  Liveness information is available in the back end starting with
   14593 `pass_df_initialize' and ending with `pass_df_finish'.  Three flavors
   14594 of live analysis are available: With `LR', it is possible to determine
   14595 at any point `P' in the function if the register may be used on some
   14596 path from `P' to the end of the function.  With `UR', it is possible to
   14597 determine if there is a path from the beginning of the function to `P'
   14598 that defines the variable.  `LIVE' is the intersection of the `LR' and
   14599 `UR' and a variable is live at `P' if there is both an assignment that
   14600 reaches it from the beginning of the function and a uses that can be
   14601 reached on some path from `P' to the end of the function.
   14602 
   14603  In general `LIVE' is the most useful of the three.  The macros
   14604 `DF_[LR,UR,LIVE]_[IN,OUT]' can be used to access this information.  The
   14605 macros take a basic block number and return a bitmap that is indexed by
   14606 the register number.  This information is only guaranteed to be up to
   14607 date after calls are made to `df_analyze'.  See the file `df-core.c'
   14608 for details on using the dataflow.
   14609 
   14610  The liveness information is stored partly in the RTL instruction stream
   14611 and partly in the flow graph.  Local information is stored in the
   14612 instruction stream: Each instruction may contain `REG_DEAD' notes
   14613 representing that the value of a given register is no longer needed, or
   14614 `REG_UNUSED' notes representing that the value computed by the
   14615 instruction is never used.  The second is useful for instructions
   14616 computing multiple values at once.
   14617 
   14618 
   14619 File: gccint.info,  Node: Machine Desc,  Next: Target Macros,  Prev: Loop Analysis and Representation,  Up: Top
   14620 
   14621 14 Machine Descriptions
   14622 ***********************
   14623 
   14624 A machine description has two parts: a file of instruction patterns
   14625 (`.md' file) and a C header file of macro definitions.
   14626 
   14627  The `.md' file for a target machine contains a pattern for each
   14628 instruction that the target machine supports (or at least each
   14629 instruction that is worth telling the compiler about).  It may also
   14630 contain comments.  A semicolon causes the rest of the line to be a
   14631 comment, unless the semicolon is inside a quoted string.
   14632 
   14633  See the next chapter for information on the C header file.
   14634 
   14635 * Menu:
   14636 
   14637 * Overview::            How the machine description is used.
   14638 * Patterns::            How to write instruction patterns.
   14639 * Example::             An explained example of a `define_insn' pattern.
   14640 * RTL Template::        The RTL template defines what insns match a pattern.
   14641 * Output Template::     The output template says how to make assembler code
   14642                           from such an insn.
   14643 * Output Statement::    For more generality, write C code to output
   14644                           the assembler code.
   14645 * Predicates::          Controlling what kinds of operands can be used
   14646                           for an insn.
   14647 * Constraints::         Fine-tuning operand selection.
   14648 * Standard Names::      Names mark patterns to use for code generation.
   14649 * Pattern Ordering::    When the order of patterns makes a difference.
   14650 * Dependent Patterns::  Having one pattern may make you need another.
   14651 * Jump Patterns::       Special considerations for patterns for jump insns.
   14652 * Looping Patterns::    How to define patterns for special looping insns.
   14653 * Insn Canonicalizations::Canonicalization of Instructions
   14654 * Expander Definitions::Generating a sequence of several RTL insns
   14655                           for a standard operation.
   14656 * Insn Splitting::      Splitting Instructions into Multiple Instructions.
   14657 * Including Patterns::      Including Patterns in Machine Descriptions.
   14658 * Peephole Definitions::Defining machine-specific peephole optimizations.
   14659 * Insn Attributes::     Specifying the value of attributes for generated insns.
   14660 * Conditional Execution::Generating `define_insn' patterns for
   14661                            predication.
   14662 * Constant Definitions::Defining symbolic constants that can be used in the
   14663                         md file.
   14664 * Iterators::           Using iterators to generate patterns from a template.
   14665 
   14666 
   14667 File: gccint.info,  Node: Overview,  Next: Patterns,  Up: Machine Desc
   14668 
   14669 14.1 Overview of How the Machine Description is Used
   14670 ====================================================
   14671 
   14672 There are three main conversions that happen in the compiler:
   14673 
   14674   1. The front end reads the source code and builds a parse tree.
   14675 
   14676   2. The parse tree is used to generate an RTL insn list based on named
   14677      instruction patterns.
   14678 
   14679   3. The insn list is matched against the RTL templates to produce
   14680      assembler code.
   14681 
   14682 
   14683  For the generate pass, only the names of the insns matter, from either
   14684 a named `define_insn' or a `define_expand'.  The compiler will choose
   14685 the pattern with the right name and apply the operands according to the
   14686 documentation later in this chapter, without regard for the RTL
   14687 template or operand constraints.  Note that the names the compiler looks
   14688 for are hard-coded in the compiler--it will ignore unnamed patterns and
   14689 patterns with names it doesn't know about, but if you don't provide a
   14690 named pattern it needs, it will abort.
   14691 
   14692  If a `define_insn' is used, the template given is inserted into the
   14693 insn list.  If a `define_expand' is used, one of three things happens,
   14694 based on the condition logic.  The condition logic may manually create
   14695 new insns for the insn list, say via `emit_insn()', and invoke `DONE'.
   14696 For certain named patterns, it may invoke `FAIL' to tell the compiler
   14697 to use an alternate way of performing that task.  If it invokes neither
   14698 `DONE' nor `FAIL', the template given in the pattern is inserted, as if
   14699 the `define_expand' were a `define_insn'.
   14700 
   14701  Once the insn list is generated, various optimization passes convert,
   14702 replace, and rearrange the insns in the insn list.  This is where the
   14703 `define_split' and `define_peephole' patterns get used, for example.
   14704 
   14705  Finally, the insn list's RTL is matched up with the RTL templates in
   14706 the `define_insn' patterns, and those patterns are used to emit the
   14707 final assembly code.  For this purpose, each named `define_insn' acts
   14708 like it's unnamed, since the names are ignored.
   14709 
   14710 
   14711 File: gccint.info,  Node: Patterns,  Next: Example,  Prev: Overview,  Up: Machine Desc
   14712 
   14713 14.2 Everything about Instruction Patterns
   14714 ==========================================
   14715 
   14716 Each instruction pattern contains an incomplete RTL expression, with
   14717 pieces to be filled in later, operand constraints that restrict how the
   14718 pieces can be filled in, and an output pattern or C code to generate
   14719 the assembler output, all wrapped up in a `define_insn' expression.
   14720 
   14721  A `define_insn' is an RTL expression containing four or five operands:
   14722 
   14723   1. An optional name.  The presence of a name indicate that this
   14724      instruction pattern can perform a certain standard job for the
   14725      RTL-generation pass of the compiler.  This pass knows certain
   14726      names and will use the instruction patterns with those names, if
   14727      the names are defined in the machine description.
   14728 
   14729      The absence of a name is indicated by writing an empty string
   14730      where the name should go.  Nameless instruction patterns are never
   14731      used for generating RTL code, but they may permit several simpler
   14732      insns to be combined later on.
   14733 
   14734      Names that are not thus known and used in RTL-generation have no
   14735      effect; they are equivalent to no name at all.
   14736 
   14737      For the purpose of debugging the compiler, you may also specify a
   14738      name beginning with the `*' character.  Such a name is used only
   14739      for identifying the instruction in RTL dumps; it is entirely
   14740      equivalent to having a nameless pattern for all other purposes.
   14741 
   14742   2. The "RTL template" (*note RTL Template::) is a vector of incomplete
   14743      RTL expressions which show what the instruction should look like.
   14744      It is incomplete because it may contain `match_operand',
   14745      `match_operator', and `match_dup' expressions that stand for
   14746      operands of the instruction.
   14747 
   14748      If the vector has only one element, that element is the template
   14749      for the instruction pattern.  If the vector has multiple elements,
   14750      then the instruction pattern is a `parallel' expression containing
   14751      the elements described.
   14752 
   14753   3. A condition.  This is a string which contains a C expression that
   14754      is the final test to decide whether an insn body matches this
   14755      pattern.
   14756 
   14757      For a named pattern, the condition (if present) may not depend on
   14758      the data in the insn being matched, but only the
   14759      target-machine-type flags.  The compiler needs to test these
   14760      conditions during initialization in order to learn exactly which
   14761      named instructions are available in a particular run.
   14762 
   14763      For nameless patterns, the condition is applied only when matching
   14764      an individual insn, and only after the insn has matched the
   14765      pattern's recognition template.  The insn's operands may be found
   14766      in the vector `operands'.  For an insn where the condition has
   14767      once matched, it can't be used to control register allocation, for
   14768      example by excluding certain hard registers or hard register
   14769      combinations.
   14770 
   14771   4. The "output template": a string that says how to output matching
   14772      insns as assembler code.  `%' in this string specifies where to
   14773      substitute the value of an operand.  *Note Output Template::.
   14774 
   14775      When simple substitution isn't general enough, you can specify a
   14776      piece of C code to compute the output.  *Note Output Statement::.
   14777 
   14778   5. Optionally, a vector containing the values of attributes for insns
   14779      matching this pattern.  *Note Insn Attributes::.
   14780 
   14781 
   14782 File: gccint.info,  Node: Example,  Next: RTL Template,  Prev: Patterns,  Up: Machine Desc
   14783 
   14784 14.3 Example of `define_insn'
   14785 =============================
   14786 
   14787 Here is an actual example of an instruction pattern, for the
   14788 68000/68020.
   14789 
   14790      (define_insn "tstsi"
   14791        [(set (cc0)
   14792              (match_operand:SI 0 "general_operand" "rm"))]
   14793        ""
   14794        "*
   14795      {
   14796        if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
   14797          return \"tstl %0\";
   14798        return \"cmpl #0,%0\";
   14799      }")
   14800 
   14801 This can also be written using braced strings:
   14802 
   14803      (define_insn "tstsi"
   14804        [(set (cc0)
   14805              (match_operand:SI 0 "general_operand" "rm"))]
   14806        ""
   14807      {
   14808        if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
   14809          return "tstl %0";
   14810        return "cmpl #0,%0";
   14811      })
   14812 
   14813  This is an instruction that sets the condition codes based on the
   14814 value of a general operand.  It has no condition, so any insn whose RTL
   14815 description has the form shown may be handled according to this
   14816 pattern.  The name `tstsi' means "test a `SImode' value" and tells the
   14817 RTL generation pass that, when it is necessary to test such a value, an
   14818 insn to do so can be constructed using this pattern.
   14819 
   14820  The output control string is a piece of C code which chooses which
   14821 output template to return based on the kind of operand and the specific
   14822 type of CPU for which code is being generated.
   14823 
   14824  `"rm"' is an operand constraint.  Its meaning is explained below.
   14825 
   14826 
   14827 File: gccint.info,  Node: RTL Template,  Next: Output Template,  Prev: Example,  Up: Machine Desc
   14828 
   14829 14.4 RTL Template
   14830 =================
   14831 
   14832 The RTL template is used to define which insns match the particular
   14833 pattern and how to find their operands.  For named patterns, the RTL
   14834 template also says how to construct an insn from specified operands.
   14835 
   14836  Construction involves substituting specified operands into a copy of
   14837 the template.  Matching involves determining the values that serve as
   14838 the operands in the insn being matched.  Both of these activities are
   14839 controlled by special expression types that direct matching and
   14840 substitution of the operands.
   14841 
   14842 `(match_operand:M N PREDICATE CONSTRAINT)'
   14843      This expression is a placeholder for operand number N of the insn.
   14844      When constructing an insn, operand number N will be substituted
   14845      at this point.  When matching an insn, whatever appears at this
   14846      position in the insn will be taken as operand number N; but it
   14847      must satisfy PREDICATE or this instruction pattern will not match
   14848      at all.
   14849 
   14850      Operand numbers must be chosen consecutively counting from zero in
   14851      each instruction pattern.  There may be only one `match_operand'
   14852      expression in the pattern for each operand number.  Usually
   14853      operands are numbered in the order of appearance in `match_operand'
   14854      expressions.  In the case of a `define_expand', any operand numbers
   14855      used only in `match_dup' expressions have higher values than all
   14856      other operand numbers.
   14857 
   14858      PREDICATE is a string that is the name of a function that accepts
   14859      two arguments, an expression and a machine mode.  *Note
   14860      Predicates::.  During matching, the function will be called with
   14861      the putative operand as the expression and M as the mode argument
   14862      (if M is not specified, `VOIDmode' will be used, which normally
   14863      causes PREDICATE to accept any mode).  If it returns zero, this
   14864      instruction pattern fails to match.  PREDICATE may be an empty
   14865      string; then it means no test is to be done on the operand, so
   14866      anything which occurs in this position is valid.
   14867 
   14868      Most of the time, PREDICATE will reject modes other than M--but
   14869      not always.  For example, the predicate `address_operand' uses M
   14870      as the mode of memory ref that the address should be valid for.
   14871      Many predicates accept `const_int' nodes even though their mode is
   14872      `VOIDmode'.
   14873 
   14874      CONSTRAINT controls reloading and the choice of the best register
   14875      class to use for a value, as explained later (*note Constraints::).
   14876      If the constraint would be an empty string, it can be omitted.
   14877 
   14878      People are often unclear on the difference between the constraint
   14879      and the predicate.  The predicate helps decide whether a given
   14880      insn matches the pattern.  The constraint plays no role in this
   14881      decision; instead, it controls various decisions in the case of an
   14882      insn which does match.
   14883 
   14884 `(match_scratch:M N CONSTRAINT)'
   14885      This expression is also a placeholder for operand number N and
   14886      indicates that operand must be a `scratch' or `reg' expression.
   14887 
   14888      When matching patterns, this is equivalent to
   14889 
   14890           (match_operand:M N "scratch_operand" PRED)
   14891 
   14892      but, when generating RTL, it produces a (`scratch':M) expression.
   14893 
   14894      If the last few expressions in a `parallel' are `clobber'
   14895      expressions whose operands are either a hard register or
   14896      `match_scratch', the combiner can add or delete them when
   14897      necessary.  *Note Side Effects::.
   14898 
   14899 `(match_dup N)'
   14900      This expression is also a placeholder for operand number N.  It is
   14901      used when the operand needs to appear more than once in the insn.
   14902 
   14903      In construction, `match_dup' acts just like `match_operand': the
   14904      operand is substituted into the insn being constructed.  But in
   14905      matching, `match_dup' behaves differently.  It assumes that operand
   14906      number N has already been determined by a `match_operand'
   14907      appearing earlier in the recognition template, and it matches only
   14908      an identical-looking expression.
   14909 
   14910      Note that `match_dup' should not be used to tell the compiler that
   14911      a particular register is being used for two operands (example:
   14912      `add' that adds one register to another; the second register is
   14913      both an input operand and the output operand).  Use a matching
   14914      constraint (*note Simple Constraints::) for those.  `match_dup' is
   14915      for the cases where one operand is used in two places in the
   14916      template, such as an instruction that computes both a quotient and
   14917      a remainder, where the opcode takes two input operands but the RTL
   14918      template has to refer to each of those twice; once for the
   14919      quotient pattern and once for the remainder pattern.
   14920 
   14921 `(match_operator:M N PREDICATE [OPERANDS...])'
   14922      This pattern is a kind of placeholder for a variable RTL expression
   14923      code.
   14924 
   14925      When constructing an insn, it stands for an RTL expression whose
   14926      expression code is taken from that of operand N, and whose
   14927      operands are constructed from the patterns OPERANDS.
   14928 
   14929      When matching an expression, it matches an expression if the
   14930      function PREDICATE returns nonzero on that expression _and_ the
   14931      patterns OPERANDS match the operands of the expression.
   14932 
   14933      Suppose that the function `commutative_operator' is defined as
   14934      follows, to match any expression whose operator is one of the
   14935      commutative arithmetic operators of RTL and whose mode is MODE:
   14936 
   14937           int
   14938           commutative_integer_operator (x, mode)
   14939                rtx x;
   14940                enum machine_mode mode;
   14941           {
   14942             enum rtx_code code = GET_CODE (x);
   14943             if (GET_MODE (x) != mode)
   14944               return 0;
   14945             return (GET_RTX_CLASS (code) == RTX_COMM_ARITH
   14946                     || code == EQ || code == NE);
   14947           }
   14948 
   14949      Then the following pattern will match any RTL expression consisting
   14950      of a commutative operator applied to two general operands:
   14951 
   14952           (match_operator:SI 3 "commutative_operator"
   14953             [(match_operand:SI 1 "general_operand" "g")
   14954              (match_operand:SI 2 "general_operand" "g")])
   14955 
   14956      Here the vector `[OPERANDS...]' contains two patterns because the
   14957      expressions to be matched all contain two operands.
   14958 
   14959      When this pattern does match, the two operands of the commutative
   14960      operator are recorded as operands 1 and 2 of the insn.  (This is
   14961      done by the two instances of `match_operand'.)  Operand 3 of the
   14962      insn will be the entire commutative expression: use `GET_CODE
   14963      (operands[3])' to see which commutative operator was used.
   14964 
   14965      The machine mode M of `match_operator' works like that of
   14966      `match_operand': it is passed as the second argument to the
   14967      predicate function, and that function is solely responsible for
   14968      deciding whether the expression to be matched "has" that mode.
   14969 
   14970      When constructing an insn, argument 3 of the gen-function will
   14971      specify the operation (i.e. the expression code) for the
   14972      expression to be made.  It should be an RTL expression, whose
   14973      expression code is copied into a new expression whose operands are
   14974      arguments 1 and 2 of the gen-function.  The subexpressions of
   14975      argument 3 are not used; only its expression code matters.
   14976 
   14977      When `match_operator' is used in a pattern for matching an insn,
   14978      it usually best if the operand number of the `match_operator' is
   14979      higher than that of the actual operands of the insn.  This improves
   14980      register allocation because the register allocator often looks at
   14981      operands 1 and 2 of insns to see if it can do register tying.
   14982 
   14983      There is no way to specify constraints in `match_operator'.  The
   14984      operand of the insn which corresponds to the `match_operator'
   14985      never has any constraints because it is never reloaded as a whole.
   14986      However, if parts of its OPERANDS are matched by `match_operand'
   14987      patterns, those parts may have constraints of their own.
   14988 
   14989 `(match_op_dup:M N[OPERANDS...])'
   14990      Like `match_dup', except that it applies to operators instead of
   14991      operands.  When constructing an insn, operand number N will be
   14992      substituted at this point.  But in matching, `match_op_dup' behaves
   14993      differently.  It assumes that operand number N has already been
   14994      determined by a `match_operator' appearing earlier in the
   14995      recognition template, and it matches only an identical-looking
   14996      expression.
   14997 
   14998 `(match_parallel N PREDICATE [SUBPAT...])'
   14999      This pattern is a placeholder for an insn that consists of a
   15000      `parallel' expression with a variable number of elements.  This
   15001      expression should only appear at the top level of an insn pattern.
   15002 
   15003      When constructing an insn, operand number N will be substituted at
   15004      this point.  When matching an insn, it matches if the body of the
   15005      insn is a `parallel' expression with at least as many elements as
   15006      the vector of SUBPAT expressions in the `match_parallel', if each
   15007      SUBPAT matches the corresponding element of the `parallel', _and_
   15008      the function PREDICATE returns nonzero on the `parallel' that is
   15009      the body of the insn.  It is the responsibility of the predicate
   15010      to validate elements of the `parallel' beyond those listed in the
   15011      `match_parallel'.
   15012 
   15013      A typical use of `match_parallel' is to match load and store
   15014      multiple expressions, which can contain a variable number of
   15015      elements in a `parallel'.  For example,
   15016 
   15017           (define_insn ""
   15018             [(match_parallel 0 "load_multiple_operation"
   15019                [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
   15020                      (match_operand:SI 2 "memory_operand" "m"))
   15021                 (use (reg:SI 179))
   15022                 (clobber (reg:SI 179))])]
   15023             ""
   15024             "loadm 0,0,%1,%2")
   15025 
   15026      This example comes from `a29k.md'.  The function
   15027      `load_multiple_operation' is defined in `a29k.c' and checks that
   15028      subsequent elements in the `parallel' are the same as the `set' in
   15029      the pattern, except that they are referencing subsequent registers
   15030      and memory locations.
   15031 
   15032      An insn that matches this pattern might look like:
   15033 
   15034           (parallel
   15035            [(set (reg:SI 20) (mem:SI (reg:SI 100)))
   15036             (use (reg:SI 179))
   15037             (clobber (reg:SI 179))
   15038             (set (reg:SI 21)
   15039                  (mem:SI (plus:SI (reg:SI 100)
   15040                                   (const_int 4))))
   15041             (set (reg:SI 22)
   15042                  (mem:SI (plus:SI (reg:SI 100)
   15043                                   (const_int 8))))])
   15044 
   15045 `(match_par_dup N [SUBPAT...])'
   15046      Like `match_op_dup', but for `match_parallel' instead of
   15047      `match_operator'.
   15048 
   15049 
   15050 
   15051 File: gccint.info,  Node: Output Template,  Next: Output Statement,  Prev: RTL Template,  Up: Machine Desc
   15052 
   15053 14.5 Output Templates and Operand Substitution
   15054 ==============================================
   15055 
   15056 The "output template" is a string which specifies how to output the
   15057 assembler code for an instruction pattern.  Most of the template is a
   15058 fixed string which is output literally.  The character `%' is used to
   15059 specify where to substitute an operand; it can also be used to identify
   15060 places where different variants of the assembler require different
   15061 syntax.
   15062 
   15063  In the simplest case, a `%' followed by a digit N says to output
   15064 operand N at that point in the string.
   15065 
   15066  `%' followed by a letter and a digit says to output an operand in an
   15067 alternate fashion.  Four letters have standard, built-in meanings
   15068 described below.  The machine description macro `PRINT_OPERAND' can
   15069 define additional letters with nonstandard meanings.
   15070 
   15071  `%cDIGIT' can be used to substitute an operand that is a constant
   15072 value without the syntax that normally indicates an immediate operand.
   15073 
   15074  `%nDIGIT' is like `%cDIGIT' except that the value of the constant is
   15075 negated before printing.
   15076 
   15077  `%aDIGIT' can be used to substitute an operand as if it were a memory
   15078 reference, with the actual operand treated as the address.  This may be
   15079 useful when outputting a "load address" instruction, because often the
   15080 assembler syntax for such an instruction requires you to write the
   15081 operand as if it were a memory reference.
   15082 
   15083  `%lDIGIT' is used to substitute a `label_ref' into a jump instruction.
   15084 
   15085  `%=' outputs a number which is unique to each instruction in the
   15086 entire compilation.  This is useful for making local labels to be
   15087 referred to more than once in a single template that generates multiple
   15088 assembler instructions.
   15089 
   15090  `%' followed by a punctuation character specifies a substitution that
   15091 does not use an operand.  Only one case is standard: `%%' outputs a `%'
   15092 into the assembler code.  Other nonstandard cases can be defined in the
   15093 `PRINT_OPERAND' macro.  You must also define which punctuation
   15094 characters are valid with the `PRINT_OPERAND_PUNCT_VALID_P' macro.
   15095 
   15096  The template may generate multiple assembler instructions.  Write the
   15097 text for the instructions, with `\;' between them.
   15098 
   15099  When the RTL contains two operands which are required by constraint to
   15100 match each other, the output template must refer only to the
   15101 lower-numbered operand.  Matching operands are not always identical,
   15102 and the rest of the compiler arranges to put the proper RTL expression
   15103 for printing into the lower-numbered operand.
   15104 
   15105  One use of nonstandard letters or punctuation following `%' is to
   15106 distinguish between different assembler languages for the same machine;
   15107 for example, Motorola syntax versus MIT syntax for the 68000.  Motorola
   15108 syntax requires periods in most opcode names, while MIT syntax does
   15109 not.  For example, the opcode `movel' in MIT syntax is `move.l' in
   15110 Motorola syntax.  The same file of patterns is used for both kinds of
   15111 output syntax, but the character sequence `%.' is used in each place
   15112 where Motorola syntax wants a period.  The `PRINT_OPERAND' macro for
   15113 Motorola syntax defines the sequence to output a period; the macro for
   15114 MIT syntax defines it to do nothing.
   15115 
   15116  As a special case, a template consisting of the single character `#'
   15117 instructs the compiler to first split the insn, and then output the
   15118 resulting instructions separately.  This helps eliminate redundancy in
   15119 the output templates.   If you have a `define_insn' that needs to emit
   15120 multiple assembler instructions, and there is an matching `define_split'
   15121 already defined, then you can simply use `#' as the output template
   15122 instead of writing an output template that emits the multiple assembler
   15123 instructions.
   15124 
   15125  If the macro `ASSEMBLER_DIALECT' is defined, you can use construct of
   15126 the form `{option0|option1|option2}' in the templates.  These describe
   15127 multiple variants of assembler language syntax.  *Note Instruction
   15128 Output::.
   15129 
   15130 
   15131 File: gccint.info,  Node: Output Statement,  Next: Predicates,  Prev: Output Template,  Up: Machine Desc
   15132 
   15133 14.6 C Statements for Assembler Output
   15134 ======================================
   15135 
   15136 Often a single fixed template string cannot produce correct and
   15137 efficient assembler code for all the cases that are recognized by a
   15138 single instruction pattern.  For example, the opcodes may depend on the
   15139 kinds of operands; or some unfortunate combinations of operands may
   15140 require extra machine instructions.
   15141 
   15142  If the output control string starts with a `@', then it is actually a
   15143 series of templates, each on a separate line.  (Blank lines and leading
   15144 spaces and tabs are ignored.)  The templates correspond to the
   15145 pattern's constraint alternatives (*note Multi-Alternative::).  For
   15146 example, if a target machine has a two-address add instruction `addr'
   15147 to add into a register and another `addm' to add a register to memory,
   15148 you might write this pattern:
   15149 
   15150      (define_insn "addsi3"
   15151        [(set (match_operand:SI 0 "general_operand" "=r,m")
   15152              (plus:SI (match_operand:SI 1 "general_operand" "0,0")
   15153                       (match_operand:SI 2 "general_operand" "g,r")))]
   15154        ""
   15155        "@
   15156         addr %2,%0
   15157         addm %2,%0")
   15158 
   15159  If the output control string starts with a `*', then it is not an
   15160 output template but rather a piece of C program that should compute a
   15161 template.  It should execute a `return' statement to return the
   15162 template-string you want.  Most such templates use C string literals,
   15163 which require doublequote characters to delimit them.  To include these
   15164 doublequote characters in the string, prefix each one with `\'.
   15165 
   15166  If the output control string is written as a brace block instead of a
   15167 double-quoted string, it is automatically assumed to be C code.  In that
   15168 case, it is not necessary to put in a leading asterisk, or to escape the
   15169 doublequotes surrounding C string literals.
   15170 
   15171  The operands may be found in the array `operands', whose C data type
   15172 is `rtx []'.
   15173 
   15174  It is very common to select different ways of generating assembler code
   15175 based on whether an immediate operand is within a certain range.  Be
   15176 careful when doing this, because the result of `INTVAL' is an integer
   15177 on the host machine.  If the host machine has more bits in an `int'
   15178 than the target machine has in the mode in which the constant will be
   15179 used, then some of the bits you get from `INTVAL' will be superfluous.
   15180 For proper results, you must carefully disregard the values of those
   15181 bits.
   15182 
   15183  It is possible to output an assembler instruction and then go on to
   15184 output or compute more of them, using the subroutine `output_asm_insn'.
   15185 This receives two arguments: a template-string and a vector of
   15186 operands.  The vector may be `operands', or it may be another array of
   15187 `rtx' that you declare locally and initialize yourself.
   15188 
   15189  When an insn pattern has multiple alternatives in its constraints,
   15190 often the appearance of the assembler code is determined mostly by
   15191 which alternative was matched.  When this is so, the C code can test
   15192 the variable `which_alternative', which is the ordinal number of the
   15193 alternative that was actually satisfied (0 for the first, 1 for the
   15194 second alternative, etc.).
   15195 
   15196  For example, suppose there are two opcodes for storing zero, `clrreg'
   15197 for registers and `clrmem' for memory locations.  Here is how a pattern
   15198 could use `which_alternative' to choose between them:
   15199 
   15200      (define_insn ""
   15201        [(set (match_operand:SI 0 "general_operand" "=r,m")
   15202              (const_int 0))]
   15203        ""
   15204        {
   15205        return (which_alternative == 0
   15206                ? "clrreg %0" : "clrmem %0");
   15207        })
   15208 
   15209  The example above, where the assembler code to generate was _solely_
   15210 determined by the alternative, could also have been specified as
   15211 follows, having the output control string start with a `@':
   15212 
   15213      (define_insn ""
   15214        [(set (match_operand:SI 0 "general_operand" "=r,m")
   15215              (const_int 0))]
   15216        ""
   15217        "@
   15218         clrreg %0
   15219         clrmem %0")
   15220 
   15221 
   15222 File: gccint.info,  Node: Predicates,  Next: Constraints,  Prev: Output Statement,  Up: Machine Desc
   15223 
   15224 14.7 Predicates
   15225 ===============
   15226 
   15227 A predicate determines whether a `match_operand' or `match_operator'
   15228 expression matches, and therefore whether the surrounding instruction
   15229 pattern will be used for that combination of operands.  GCC has a
   15230 number of machine-independent predicates, and you can define
   15231 machine-specific predicates as needed.  By convention, predicates used
   15232 with `match_operand' have names that end in `_operand', and those used
   15233 with `match_operator' have names that end in `_operator'.
   15234 
   15235  All predicates are Boolean functions (in the mathematical sense) of
   15236 two arguments: the RTL expression that is being considered at that
   15237 position in the instruction pattern, and the machine mode that the
   15238 `match_operand' or `match_operator' specifies.  In this section, the
   15239 first argument is called OP and the second argument MODE.  Predicates
   15240 can be called from C as ordinary two-argument functions; this can be
   15241 useful in output templates or other machine-specific code.
   15242 
   15243  Operand predicates can allow operands that are not actually acceptable
   15244 to the hardware, as long as the constraints give reload the ability to
   15245 fix them up (*note Constraints::).  However, GCC will usually generate
   15246 better code if the predicates specify the requirements of the machine
   15247 instructions as closely as possible.  Reload cannot fix up operands
   15248 that must be constants ("immediate operands"); you must use a predicate
   15249 that allows only constants, or else enforce the requirement in the
   15250 extra condition.
   15251 
   15252  Most predicates handle their MODE argument in a uniform manner.  If
   15253 MODE is `VOIDmode' (unspecified), then OP can have any mode.  If MODE
   15254 is anything else, then OP must have the same mode, unless OP is a
   15255 `CONST_INT' or integer `CONST_DOUBLE'.  These RTL expressions always
   15256 have `VOIDmode', so it would be counterproductive to check that their
   15257 mode matches.  Instead, predicates that accept `CONST_INT' and/or
   15258 integer `CONST_DOUBLE' check that the value stored in the constant will
   15259 fit in the requested mode.
   15260 
   15261  Predicates with this behavior are called "normal".  `genrecog' can
   15262 optimize the instruction recognizer based on knowledge of how normal
   15263 predicates treat modes.  It can also diagnose certain kinds of common
   15264 errors in the use of normal predicates; for instance, it is almost
   15265 always an error to use a normal predicate without specifying a mode.
   15266 
   15267  Predicates that do something different with their MODE argument are
   15268 called "special".  The generic predicates `address_operand' and
   15269 `pmode_register_operand' are special predicates.  `genrecog' does not
   15270 do any optimizations or diagnosis when special predicates are used.
   15271 
   15272 * Menu:
   15273 
   15274 * Machine-Independent Predicates::  Predicates available to all back ends.
   15275 * Defining Predicates::             How to write machine-specific predicate
   15276                                     functions.
   15277 
   15278 
   15279 File: gccint.info,  Node: Machine-Independent Predicates,  Next: Defining Predicates,  Up: Predicates
   15280 
   15281 14.7.1 Machine-Independent Predicates
   15282 -------------------------------------
   15283 
   15284 These are the generic predicates available to all back ends.  They are
   15285 defined in `recog.c'.  The first category of predicates allow only
   15286 constant, or "immediate", operands.
   15287 
   15288  -- Function: immediate_operand
   15289      This predicate allows any sort of constant that fits in MODE.  It
   15290      is an appropriate choice for instructions that take operands that
   15291      must be constant.
   15292 
   15293  -- Function: const_int_operand
   15294      This predicate allows any `CONST_INT' expression that fits in
   15295      MODE.  It is an appropriate choice for an immediate operand that
   15296      does not allow a symbol or label.
   15297 
   15298  -- Function: const_double_operand
   15299      This predicate accepts any `CONST_DOUBLE' expression that has
   15300      exactly MODE.  If MODE is `VOIDmode', it will also accept
   15301      `CONST_INT'.  It is intended for immediate floating point
   15302      constants.
   15303 
   15304 The second category of predicates allow only some kind of machine
   15305 register.
   15306 
   15307  -- Function: register_operand
   15308      This predicate allows any `REG' or `SUBREG' expression that is
   15309      valid for MODE.  It is often suitable for arithmetic instruction
   15310      operands on a RISC machine.
   15311 
   15312  -- Function: pmode_register_operand
   15313      This is a slight variant on `register_operand' which works around
   15314      a limitation in the machine-description reader.
   15315 
   15316           (match_operand N "pmode_register_operand" CONSTRAINT)
   15317 
   15318      means exactly what
   15319 
   15320           (match_operand:P N "register_operand" CONSTRAINT)
   15321 
   15322      would mean, if the machine-description reader accepted `:P' mode
   15323      suffixes.  Unfortunately, it cannot, because `Pmode' is an alias
   15324      for some other mode, and might vary with machine-specific options.
   15325      *Note Misc::.
   15326 
   15327  -- Function: scratch_operand
   15328      This predicate allows hard registers and `SCRATCH' expressions,
   15329      but not pseudo-registers.  It is used internally by
   15330      `match_scratch'; it should not be used directly.
   15331 
   15332 The third category of predicates allow only some kind of memory
   15333 reference.
   15334 
   15335  -- Function: memory_operand
   15336      This predicate allows any valid reference to a quantity of mode
   15337      MODE in memory, as determined by the weak form of
   15338      `GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::).
   15339 
   15340  -- Function: address_operand
   15341      This predicate is a little unusual; it allows any operand that is a
   15342      valid expression for the _address_ of a quantity of mode MODE,
   15343      again determined by the weak form of `GO_IF_LEGITIMATE_ADDRESS'.
   15344      To first order, if `(mem:MODE (EXP))' is acceptable to
   15345      `memory_operand', then EXP is acceptable to `address_operand'.
   15346      Note that EXP does not necessarily have the mode MODE.
   15347 
   15348  -- Function: indirect_operand
   15349      This is a stricter form of `memory_operand' which allows only
   15350      memory references with a `general_operand' as the address
   15351      expression.  New uses of this predicate are discouraged, because
   15352      `general_operand' is very permissive, so it's hard to tell what an
   15353      `indirect_operand' does or does not allow.  If a target has
   15354      different requirements for memory operands for different
   15355      instructions, it is better to define target-specific predicates
   15356      which enforce the hardware's requirements explicitly.
   15357 
   15358  -- Function: push_operand
   15359      This predicate allows a memory reference suitable for pushing a
   15360      value onto the stack.  This will be a `MEM' which refers to
   15361      `stack_pointer_rtx', with a side-effect in its address expression
   15362      (*note Incdec::); which one is determined by the `STACK_PUSH_CODE'
   15363      macro (*note Frame Layout::).
   15364 
   15365  -- Function: pop_operand
   15366      This predicate allows a memory reference suitable for popping a
   15367      value off the stack.  Again, this will be a `MEM' referring to
   15368      `stack_pointer_rtx', with a side-effect in its address expression.
   15369      However, this time `STACK_POP_CODE' is expected.
   15370 
   15371 The fourth category of predicates allow some combination of the above
   15372 operands.
   15373 
   15374  -- Function: nonmemory_operand
   15375      This predicate allows any immediate or register operand valid for
   15376      MODE.
   15377 
   15378  -- Function: nonimmediate_operand
   15379      This predicate allows any register or memory operand valid for
   15380      MODE.
   15381 
   15382  -- Function: general_operand
   15383      This predicate allows any immediate, register, or memory operand
   15384      valid for MODE.
   15385 
   15386 Finally, there is one generic operator predicate.
   15387 
   15388  -- Function: comparison_operator
   15389      This predicate matches any expression which performs an arithmetic
   15390      comparison in MODE; that is, `COMPARISON_P' is true for the
   15391      expression code.
   15392 
   15393 
   15394 File: gccint.info,  Node: Defining Predicates,  Prev: Machine-Independent Predicates,  Up: Predicates
   15395 
   15396 14.7.2 Defining Machine-Specific Predicates
   15397 -------------------------------------------
   15398 
   15399 Many machines have requirements for their operands that cannot be
   15400 expressed precisely using the generic predicates.  You can define
   15401 additional predicates using `define_predicate' and
   15402 `define_special_predicate' expressions.  These expressions have three
   15403 operands:
   15404 
   15405    * The name of the predicate, as it will be referred to in
   15406      `match_operand' or `match_operator' expressions.
   15407 
   15408    * An RTL expression which evaluates to true if the predicate allows
   15409      the operand OP, false if it does not.  This expression can only use
   15410      the following RTL codes:
   15411 
   15412     `MATCH_OPERAND'
   15413           When written inside a predicate expression, a `MATCH_OPERAND'
   15414           expression evaluates to true if the predicate it names would
   15415           allow OP.  The operand number and constraint are ignored.
   15416           Due to limitations in `genrecog', you can only refer to
   15417           generic predicates and predicates that have already been
   15418           defined.
   15419 
   15420     `MATCH_CODE'
   15421           This expression evaluates to true if OP or a specified
   15422           subexpression of OP has one of a given list of RTX codes.
   15423 
   15424           The first operand of this expression is a string constant
   15425           containing a comma-separated list of RTX code names (in lower
   15426           case).  These are the codes for which the `MATCH_CODE' will
   15427           be true.
   15428 
   15429           The second operand is a string constant which indicates what
   15430           subexpression of OP to examine.  If it is absent or the empty
   15431           string, OP itself is examined.  Otherwise, the string constant
   15432           must be a sequence of digits and/or lowercase letters.  Each
   15433           character indicates a subexpression to extract from the
   15434           current expression; for the first character this is OP, for
   15435           the second and subsequent characters it is the result of the
   15436           previous character.  A digit N extracts `XEXP (E, N)'; a
   15437           letter L extracts `XVECEXP (E, 0, N)' where N is the
   15438           alphabetic ordinal of L (0 for `a', 1 for 'b', and so on).
   15439           The `MATCH_CODE' then examines the RTX code of the
   15440           subexpression extracted by the complete string.  It is not
   15441           possible to extract components of an `rtvec' that is not at
   15442           position 0 within its RTX object.
   15443 
   15444     `MATCH_TEST'
   15445           This expression has one operand, a string constant containing
   15446           a C expression.  The predicate's arguments, OP and MODE, are
   15447           available with those names in the C expression.  The
   15448           `MATCH_TEST' evaluates to true if the C expression evaluates
   15449           to a nonzero value.  `MATCH_TEST' expressions must not have
   15450           side effects.
   15451 
   15452     `AND'
   15453     `IOR'
   15454     `NOT'
   15455     `IF_THEN_ELSE'
   15456           The basic `MATCH_' expressions can be combined using these
   15457           logical operators, which have the semantics of the C operators
   15458           `&&', `||', `!', and `? :' respectively.  As in Common Lisp,
   15459           you may give an `AND' or `IOR' expression an arbitrary number
   15460           of arguments; this has exactly the same effect as writing a
   15461           chain of two-argument `AND' or `IOR' expressions.
   15462 
   15463    * An optional block of C code, which should execute `return true' if
   15464      the predicate is found to match and `return false' if it does not.
   15465      It must not have any side effects.  The predicate arguments, OP
   15466      and MODE, are available with those names.
   15467 
   15468      If a code block is present in a predicate definition, then the RTL
   15469      expression must evaluate to true _and_ the code block must execute
   15470      `return true' for the predicate to allow the operand.  The RTL
   15471      expression is evaluated first; do not re-check anything in the
   15472      code block that was checked in the RTL expression.
   15473 
   15474  The program `genrecog' scans `define_predicate' and
   15475 `define_special_predicate' expressions to determine which RTX codes are
   15476 possibly allowed.  You should always make this explicit in the RTL
   15477 predicate expression, using `MATCH_OPERAND' and `MATCH_CODE'.
   15478 
   15479  Here is an example of a simple predicate definition, from the IA64
   15480 machine description:
   15481 
   15482      ;; True if OP is a `SYMBOL_REF' which refers to the sdata section.
   15483      (define_predicate "small_addr_symbolic_operand"
   15484        (and (match_code "symbol_ref")
   15485             (match_test "SYMBOL_REF_SMALL_ADDR_P (op)")))
   15486 
   15487 And here is another, showing the use of the C block.
   15488 
   15489      ;; True if OP is a register operand that is (or could be) a GR reg.
   15490      (define_predicate "gr_register_operand"
   15491        (match_operand 0 "register_operand")
   15492      {
   15493        unsigned int regno;
   15494        if (GET_CODE (op) == SUBREG)
   15495          op = SUBREG_REG (op);
   15496 
   15497        regno = REGNO (op);
   15498        return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
   15499      })
   15500 
   15501  Predicates written with `define_predicate' automatically include a
   15502 test that MODE is `VOIDmode', or OP has the same mode as MODE, or OP is
   15503 a `CONST_INT' or `CONST_DOUBLE'.  They do _not_ check specifically for
   15504 integer `CONST_DOUBLE', nor do they test that the value of either kind
   15505 of constant fits in the requested mode.  This is because
   15506 target-specific predicates that take constants usually have to do more
   15507 stringent value checks anyway.  If you need the exact same treatment of
   15508 `CONST_INT' or `CONST_DOUBLE' that the generic predicates provide, use
   15509 a `MATCH_OPERAND' subexpression to call `const_int_operand',
   15510 `const_double_operand', or `immediate_operand'.
   15511 
   15512  Predicates written with `define_special_predicate' do not get any
   15513 automatic mode checks, and are treated as having special mode handling
   15514 by `genrecog'.
   15515 
   15516  The program `genpreds' is responsible for generating code to test
   15517 predicates.  It also writes a header file containing function
   15518 declarations for all machine-specific predicates.  It is not necessary
   15519 to declare these predicates in `CPU-protos.h'.
   15520 
   15521 
   15522 File: gccint.info,  Node: Constraints,  Next: Standard Names,  Prev: Predicates,  Up: Machine Desc
   15523 
   15524 14.8 Operand Constraints
   15525 ========================
   15526 
   15527 Each `match_operand' in an instruction pattern can specify constraints
   15528 for the operands allowed.  The constraints allow you to fine-tune
   15529 matching within the set of operands allowed by the predicate.
   15530 
   15531  Constraints can say whether an operand may be in a register, and which
   15532 kinds of register; whether the operand can be a memory reference, and
   15533 which kinds of address; whether the operand may be an immediate
   15534 constant, and which possible values it may have.  Constraints can also
   15535 require two operands to match.
   15536 
   15537 * Menu:
   15538 
   15539 * Simple Constraints::  Basic use of constraints.
   15540 * Multi-Alternative::   When an insn has two alternative constraint-patterns.
   15541 * Class Preferences::   Constraints guide which hard register to put things in.
   15542 * Modifiers::           More precise control over effects of constraints.
   15543 * Machine Constraints:: Existing constraints for some particular machines.
   15544 * Define Constraints::  How to define machine-specific constraints.
   15545 * C Constraint Interface:: How to test constraints from C code.
   15546 
   15547 
   15548 File: gccint.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
   15549 
   15550 14.8.1 Simple Constraints
   15551 -------------------------
   15552 
   15553 The simplest kind of constraint is a string full of letters, each of
   15554 which describes one kind of operand that is permitted.  Here are the
   15555 letters that are allowed:
   15556 
   15557 whitespace
   15558      Whitespace characters are ignored and can be inserted at any
   15559      position except the first.  This enables each alternative for
   15560      different operands to be visually aligned in the machine
   15561      description even if they have different number of constraints and
   15562      modifiers.
   15563 
   15564 `m'
   15565      A memory operand is allowed, with any kind of address that the
   15566      machine supports in general.
   15567 
   15568 `o'
   15569      A memory operand is allowed, but only if the address is
   15570      "offsettable".  This means that adding a small integer (actually,
   15571      the width in bytes of the operand, as determined by its machine
   15572      mode) may be added to the address and the result is also a valid
   15573      memory address.
   15574 
   15575      For example, an address which is constant is offsettable; so is an
   15576      address that is the sum of a register and a constant (as long as a
   15577      slightly larger constant is also within the range of
   15578      address-offsets supported by the machine); but an autoincrement or
   15579      autodecrement address is not offsettable.  More complicated
   15580      indirect/indexed addresses may or may not be offsettable depending
   15581      on the other addressing modes that the machine supports.
   15582 
   15583      Note that in an output operand which can be matched by another
   15584      operand, the constraint letter `o' is valid only when accompanied
   15585      by both `<' (if the target machine has predecrement addressing)
   15586      and `>' (if the target machine has preincrement addressing).
   15587 
   15588 `V'
   15589      A memory operand that is not offsettable.  In other words,
   15590      anything that would fit the `m' constraint but not the `o'
   15591      constraint.
   15592 
   15593 `<'
   15594      A memory operand with autodecrement addressing (either
   15595      predecrement or postdecrement) is allowed.
   15596 
   15597 `>'
   15598      A memory operand with autoincrement addressing (either
   15599      preincrement or postincrement) is allowed.
   15600 
   15601 `r'
   15602      A register operand is allowed provided that it is in a general
   15603      register.
   15604 
   15605 `i'
   15606      An immediate integer operand (one with constant value) is allowed.
   15607      This includes symbolic constants whose values will be known only at
   15608      assembly time or later.
   15609 
   15610 `n'
   15611      An immediate integer operand with a known numeric value is allowed.
   15612      Many systems cannot support assembly-time constants for operands
   15613      less than a word wide.  Constraints for these operands should use
   15614      `n' rather than `i'.
   15615 
   15616 `I', `J', `K', ... `P'
   15617      Other letters in the range `I' through `P' may be defined in a
   15618      machine-dependent fashion to permit immediate integer operands with
   15619      explicit integer values in specified ranges.  For example, on the
   15620      68000, `I' is defined to stand for the range of values 1 to 8.
   15621      This is the range permitted as a shift count in the shift
   15622      instructions.
   15623 
   15624 `E'
   15625      An immediate floating operand (expression code `const_double') is
   15626      allowed, but only if the target floating point format is the same
   15627      as that of the host machine (on which the compiler is running).
   15628 
   15629 `F'
   15630      An immediate floating operand (expression code `const_double' or
   15631      `const_vector') is allowed.
   15632 
   15633 `G', `H'
   15634      `G' and `H' may be defined in a machine-dependent fashion to
   15635      permit immediate floating operands in particular ranges of values.
   15636 
   15637 `s'
   15638      An immediate integer operand whose value is not an explicit
   15639      integer is allowed.
   15640 
   15641      This might appear strange; if an insn allows a constant operand
   15642      with a value not known at compile time, it certainly must allow
   15643      any known value.  So why use `s' instead of `i'?  Sometimes it
   15644      allows better code to be generated.
   15645 
   15646      For example, on the 68000 in a fullword instruction it is possible
   15647      to use an immediate operand; but if the immediate value is between
   15648      -128 and 127, better code results from loading the value into a
   15649      register and using the register.  This is because the load into
   15650      the register can be done with a `moveq' instruction.  We arrange
   15651      for this to happen by defining the letter `K' to mean "any integer
   15652      outside the range -128 to 127", and then specifying `Ks' in the
   15653      operand constraints.
   15654 
   15655 `g'
   15656      Any register, memory or immediate integer operand is allowed,
   15657      except for registers that are not general registers.
   15658 
   15659 `X'
   15660      Any operand whatsoever is allowed, even if it does not satisfy
   15661      `general_operand'.  This is normally used in the constraint of a
   15662      `match_scratch' when certain alternatives will not actually
   15663      require a scratch register.
   15664 
   15665 `0', `1', `2', ... `9'
   15666      An operand that matches the specified operand number is allowed.
   15667      If a digit is used together with letters within the same
   15668      alternative, the digit should come last.
   15669 
   15670      This number is allowed to be more than a single digit.  If multiple
   15671      digits are encountered consecutively, they are interpreted as a
   15672      single decimal integer.  There is scant chance for ambiguity,
   15673      since to-date it has never been desirable that `10' be interpreted
   15674      as matching either operand 1 _or_ operand 0.  Should this be
   15675      desired, one can use multiple alternatives instead.
   15676 
   15677      This is called a "matching constraint" and what it really means is
   15678      that the assembler has only a single operand that fills two roles
   15679      considered separate in the RTL insn.  For example, an add insn has
   15680      two input operands and one output operand in the RTL, but on most
   15681      CISC machines an add instruction really has only two operands, one
   15682      of them an input-output operand:
   15683 
   15684           addl #35,r12
   15685 
   15686      Matching constraints are used in these circumstances.  More
   15687      precisely, the two operands that match must include one input-only
   15688      operand and one output-only operand.  Moreover, the digit must be a
   15689      smaller number than the number of the operand that uses it in the
   15690      constraint.
   15691 
   15692      For operands to match in a particular case usually means that they
   15693      are identical-looking RTL expressions.  But in a few special cases
   15694      specific kinds of dissimilarity are allowed.  For example, `*x' as
   15695      an input operand will match `*x++' as an output operand.  For
   15696      proper results in such cases, the output template should always
   15697      use the output-operand's number when printing the operand.
   15698 
   15699 `p'
   15700      An operand that is a valid memory address is allowed.  This is for
   15701      "load address" and "push address" instructions.
   15702 
   15703      `p' in the constraint must be accompanied by `address_operand' as
   15704      the predicate in the `match_operand'.  This predicate interprets
   15705      the mode specified in the `match_operand' as the mode of the memory
   15706      reference for which the address would be valid.
   15707 
   15708 OTHER-LETTERS
   15709      Other letters can be defined in machine-dependent fashion to stand
   15710      for particular classes of registers or other arbitrary operand
   15711      types.  `d', `a' and `f' are defined on the 68000/68020 to stand
   15712      for data, address and floating point registers.
   15713 
   15714  In order to have valid assembler code, each operand must satisfy its
   15715 constraint.  But a failure to do so does not prevent the pattern from
   15716 applying to an insn.  Instead, it directs the compiler to modify the
   15717 code so that the constraint will be satisfied.  Usually this is done by
   15718 copying an operand into a register.
   15719 
   15720  Contrast, therefore, the two instruction patterns that follow:
   15721 
   15722      (define_insn ""
   15723        [(set (match_operand:SI 0 "general_operand" "=r")
   15724              (plus:SI (match_dup 0)
   15725                       (match_operand:SI 1 "general_operand" "r")))]
   15726        ""
   15727        "...")
   15728 
   15729 which has two operands, one of which must appear in two places, and
   15730 
   15731      (define_insn ""
   15732        [(set (match_operand:SI 0 "general_operand" "=r")
   15733              (plus:SI (match_operand:SI 1 "general_operand" "0")
   15734                       (match_operand:SI 2 "general_operand" "r")))]
   15735        ""
   15736        "...")
   15737 
   15738 which has three operands, two of which are required by a constraint to
   15739 be identical.  If we are considering an insn of the form
   15740 
   15741      (insn N PREV NEXT
   15742        (set (reg:SI 3)
   15743             (plus:SI (reg:SI 6) (reg:SI 109)))
   15744        ...)
   15745 
   15746 the first pattern would not apply at all, because this insn does not
   15747 contain two identical subexpressions in the right place.  The pattern
   15748 would say, "That does not look like an add instruction; try other
   15749 patterns".  The second pattern would say, "Yes, that's an add
   15750 instruction, but there is something wrong with it".  It would direct
   15751 the reload pass of the compiler to generate additional insns to make
   15752 the constraint true.  The results might look like this:
   15753 
   15754      (insn N2 PREV N
   15755        (set (reg:SI 3) (reg:SI 6))
   15756        ...)
   15757 
   15758      (insn N N2 NEXT
   15759        (set (reg:SI 3)
   15760             (plus:SI (reg:SI 3) (reg:SI 109)))
   15761        ...)
   15762 
   15763  It is up to you to make sure that each operand, in each pattern, has
   15764 constraints that can handle any RTL expression that could be present for
   15765 that operand.  (When multiple alternatives are in use, each pattern
   15766 must, for each possible combination of operand expressions, have at
   15767 least one alternative which can handle that combination of operands.)
   15768 The constraints don't need to _allow_ any possible operand--when this is
   15769 the case, they do not constrain--but they must at least point the way to
   15770 reloading any possible operand so that it will fit.
   15771 
   15772    * If the constraint accepts whatever operands the predicate permits,
   15773      there is no problem: reloading is never necessary for this operand.
   15774 
   15775      For example, an operand whose constraints permit everything except
   15776      registers is safe provided its predicate rejects registers.
   15777 
   15778      An operand whose predicate accepts only constant values is safe
   15779      provided its constraints include the letter `i'.  If any possible
   15780      constant value is accepted, then nothing less than `i' will do; if
   15781      the predicate is more selective, then the constraints may also be
   15782      more selective.
   15783 
   15784    * Any operand expression can be reloaded by copying it into a
   15785      register.  So if an operand's constraints allow some kind of
   15786      register, it is certain to be safe.  It need not permit all
   15787      classes of registers; the compiler knows how to copy a register
   15788      into another register of the proper class in order to make an
   15789      instruction valid.
   15790 
   15791    * A nonoffsettable memory reference can be reloaded by copying the
   15792      address into a register.  So if the constraint uses the letter
   15793      `o', all memory references are taken care of.
   15794 
   15795    * A constant operand can be reloaded by allocating space in memory to
   15796      hold it as preinitialized data.  Then the memory reference can be
   15797      used in place of the constant.  So if the constraint uses the
   15798      letters `o' or `m', constant operands are not a problem.
   15799 
   15800    * If the constraint permits a constant and a pseudo register used in
   15801      an insn was not allocated to a hard register and is equivalent to
   15802      a constant, the register will be replaced with the constant.  If
   15803      the predicate does not permit a constant and the insn is
   15804      re-recognized for some reason, the compiler will crash.  Thus the
   15805      predicate must always recognize any objects allowed by the
   15806      constraint.
   15807 
   15808  If the operand's predicate can recognize registers, but the constraint
   15809 does not permit them, it can make the compiler crash.  When this
   15810 operand happens to be a register, the reload pass will be stymied,
   15811 because it does not know how to copy a register temporarily into memory.
   15812 
   15813  If the predicate accepts a unary operator, the constraint applies to
   15814 the operand.  For example, the MIPS processor at ISA level 3 supports an
   15815 instruction which adds two registers in `SImode' to produce a `DImode'
   15816 result, but only if the registers are correctly sign extended.  This
   15817 predicate for the input operands accepts a `sign_extend' of an `SImode'
   15818 register.  Write the constraint to indicate the type of register that
   15819 is required for the operand of the `sign_extend'.
   15820 
   15821 
   15822 File: gccint.info,  Node: Multi-Alternative,  Next: Class Preferences,  Prev: Simple Constraints,  Up: Constraints
   15823 
   15824 14.8.2 Multiple Alternative Constraints
   15825 ---------------------------------------
   15826 
   15827 Sometimes a single instruction has multiple alternative sets of possible
   15828 operands.  For example, on the 68000, a logical-or instruction can
   15829 combine register or an immediate value into memory, or it can combine
   15830 any kind of operand into a register; but it cannot combine one memory
   15831 location into another.
   15832 
   15833  These constraints are represented as multiple alternatives.  An
   15834 alternative can be described by a series of letters for each operand.
   15835 The overall constraint for an operand is made from the letters for this
   15836 operand from the first alternative, a comma, the letters for this
   15837 operand from the second alternative, a comma, and so on until the last
   15838 alternative.  Here is how it is done for fullword logical-or on the
   15839 68000:
   15840 
   15841      (define_insn "iorsi3"
   15842        [(set (match_operand:SI 0 "general_operand" "=m,d")
   15843              (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
   15844                      (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
   15845        ...)
   15846 
   15847  The first alternative has `m' (memory) for operand 0, `0' for operand
   15848 1 (meaning it must match operand 0), and `dKs' for operand 2.  The
   15849 second alternative has `d' (data register) for operand 0, `0' for
   15850 operand 1, and `dmKs' for operand 2.  The `=' and `%' in the
   15851 constraints apply to all the alternatives; their meaning is explained
   15852 in the next section (*note Class Preferences::).
   15853 
   15854  If all the operands fit any one alternative, the instruction is valid.
   15855 Otherwise, for each alternative, the compiler counts how many
   15856 instructions must be added to copy the operands so that that
   15857 alternative applies.  The alternative requiring the least copying is
   15858 chosen.  If two alternatives need the same amount of copying, the one
   15859 that comes first is chosen.  These choices can be altered with the `?'
   15860 and `!' characters:
   15861 
   15862 `?'
   15863      Disparage slightly the alternative that the `?' appears in, as a
   15864      choice when no alternative applies exactly.  The compiler regards
   15865      this alternative as one unit more costly for each `?' that appears
   15866      in it.
   15867 
   15868 `!'
   15869      Disparage severely the alternative that the `!' appears in.  This
   15870      alternative can still be used if it fits without reloading, but if
   15871      reloading is needed, some other alternative will be used.
   15872 
   15873  When an insn pattern has multiple alternatives in its constraints,
   15874 often the appearance of the assembler code is determined mostly by which
   15875 alternative was matched.  When this is so, the C code for writing the
   15876 assembler code can use the variable `which_alternative', which is the
   15877 ordinal number of the alternative that was actually satisfied (0 for
   15878 the first, 1 for the second alternative, etc.).  *Note Output
   15879 Statement::.
   15880 
   15881 
   15882 File: gccint.info,  Node: Class Preferences,  Next: Modifiers,  Prev: Multi-Alternative,  Up: Constraints
   15883 
   15884 14.8.3 Register Class Preferences
   15885 ---------------------------------
   15886 
   15887 The operand constraints have another function: they enable the compiler
   15888 to decide which kind of hardware register a pseudo register is best
   15889 allocated to.  The compiler examines the constraints that apply to the
   15890 insns that use the pseudo register, looking for the machine-dependent
   15891 letters such as `d' and `a' that specify classes of registers.  The
   15892 pseudo register is put in whichever class gets the most "votes".  The
   15893 constraint letters `g' and `r' also vote: they vote in favor of a
   15894 general register.  The machine description says which registers are
   15895 considered general.
   15896 
   15897  Of course, on some machines all registers are equivalent, and no
   15898 register classes are defined.  Then none of this complexity is relevant.
   15899 
   15900 
   15901 File: gccint.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Class Preferences,  Up: Constraints
   15902 
   15903 14.8.4 Constraint Modifier Characters
   15904 -------------------------------------
   15905 
   15906 Here are constraint modifier characters.
   15907 
   15908 `='
   15909      Means that this operand is write-only for this instruction: the
   15910      previous value is discarded and replaced by output data.
   15911 
   15912 `+'
   15913      Means that this operand is both read and written by the
   15914      instruction.
   15915 
   15916      When the compiler fixes up the operands to satisfy the constraints,
   15917      it needs to know which operands are inputs to the instruction and
   15918      which are outputs from it.  `=' identifies an output; `+'
   15919      identifies an operand that is both input and output; all other
   15920      operands are assumed to be input only.
   15921 
   15922      If you specify `=' or `+' in a constraint, you put it in the first
   15923      character of the constraint string.
   15924 
   15925 `&'
   15926      Means (in a particular alternative) that this operand is an
   15927      "earlyclobber" operand, which is modified before the instruction is
   15928      finished using the input operands.  Therefore, this operand may
   15929      not lie in a register that is used as an input operand or as part
   15930      of any memory address.
   15931 
   15932      `&' applies only to the alternative in which it is written.  In
   15933      constraints with multiple alternatives, sometimes one alternative
   15934      requires `&' while others do not.  See, for example, the `movdf'
   15935      insn of the 68000.
   15936 
   15937      An input operand can be tied to an earlyclobber operand if its only
   15938      use as an input occurs before the early result is written.  Adding
   15939      alternatives of this form often allows GCC to produce better code
   15940      when only some of the inputs can be affected by the earlyclobber.
   15941      See, for example, the `mulsi3' insn of the ARM.
   15942 
   15943      `&' does not obviate the need to write `='.
   15944 
   15945 `%'
   15946      Declares the instruction to be commutative for this operand and the
   15947      following operand.  This means that the compiler may interchange
   15948      the two operands if that is the cheapest way to make all operands
   15949      fit the constraints.  This is often used in patterns for addition
   15950      instructions that really have only two operands: the result must
   15951      go in one of the arguments.  Here for example, is how the 68000
   15952      halfword-add instruction is defined:
   15953 
   15954           (define_insn "addhi3"
   15955             [(set (match_operand:HI 0 "general_operand" "=m,r")
   15956                (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
   15957                         (match_operand:HI 2 "general_operand" "di,g")))]
   15958             ...)
   15959      GCC can only handle one commutative pair in an asm; if you use
   15960      more, the compiler may fail.  Note that you need not use the
   15961      modifier if the two alternatives are strictly identical; this
   15962      would only waste time in the reload pass.  The modifier is not
   15963      operational after register allocation, so the result of
   15964      `define_peephole2' and `define_split's performed after reload
   15965      cannot rely on `%' to make the intended insn match.
   15966 
   15967 `#'
   15968      Says that all following characters, up to the next comma, are to be
   15969      ignored as a constraint.  They are significant only for choosing
   15970      register preferences.
   15971 
   15972 `*'
   15973      Says that the following character should be ignored when choosing
   15974      register preferences.  `*' has no effect on the meaning of the
   15975      constraint as a constraint, and no effect on reloading.
   15976 
   15977      Here is an example: the 68000 has an instruction to sign-extend a
   15978      halfword in a data register, and can also sign-extend a value by
   15979      copying it into an address register.  While either kind of
   15980      register is acceptable, the constraints on an address-register
   15981      destination are less strict, so it is best if register allocation
   15982      makes an address register its goal.  Therefore, `*' is used so
   15983      that the `d' constraint letter (for data register) is ignored when
   15984      computing register preferences.
   15985 
   15986           (define_insn "extendhisi2"
   15987             [(set (match_operand:SI 0 "general_operand" "=*d,a")
   15988                   (sign_extend:SI
   15989                    (match_operand:HI 1 "general_operand" "0,g")))]
   15990             ...)
   15991 
   15992 
   15993 File: gccint.info,  Node: Machine Constraints,  Next: Define Constraints,  Prev: Modifiers,  Up: Constraints
   15994 
   15995 14.8.5 Constraints for Particular Machines
   15996 ------------------------------------------
   15997 
   15998 Whenever possible, you should use the general-purpose constraint letters
   15999 in `asm' arguments, since they will convey meaning more readily to
   16000 people reading your code.  Failing that, use the constraint letters
   16001 that usually have very similar meanings across architectures.  The most
   16002 commonly used constraints are `m' and `r' (for memory and
   16003 general-purpose registers respectively; *note Simple Constraints::), and
   16004 `I', usually the letter indicating the most common immediate-constant
   16005 format.
   16006 
   16007  Each architecture defines additional constraints.  These constraints
   16008 are used by the compiler itself for instruction generation, as well as
   16009 for `asm' statements; therefore, some of the constraints are not
   16010 particularly useful for `asm'.  Here is a summary of some of the
   16011 machine-dependent constraints available on some particular machines; it
   16012 includes both constraints that are useful for `asm' and constraints
   16013 that aren't.  The compiler source file mentioned in the table heading
   16014 for each architecture is the definitive reference for the meanings of
   16015 that architecture's constraints.
   16016 
   16017 _ARM family--`config/arm/arm.h'_
   16018 
   16019     `f'
   16020           Floating-point register
   16021 
   16022     `w'
   16023           VFP floating-point register
   16024 
   16025     `F'
   16026           One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
   16027           4.0, 5.0 or 10.0
   16028 
   16029     `G'
   16030           Floating-point constant that would satisfy the constraint `F'
   16031           if it were negated
   16032 
   16033     `I'
   16034           Integer that is valid as an immediate operand in a data
   16035           processing instruction.  That is, an integer in the range 0
   16036           to 255 rotated by a multiple of 2
   16037 
   16038     `J'
   16039           Integer in the range -4095 to 4095
   16040 
   16041     `K'
   16042           Integer that satisfies constraint `I' when inverted (ones
   16043           complement)
   16044 
   16045     `L'
   16046           Integer that satisfies constraint `I' when negated (twos
   16047           complement)
   16048 
   16049     `M'
   16050           Integer in the range 0 to 32
   16051 
   16052     `Q'
   16053           A memory reference where the exact address is in a single
   16054           register (``m'' is preferable for `asm' statements)
   16055 
   16056     `R'
   16057           An item in the constant pool
   16058 
   16059     `S'
   16060           A symbol in the text segment of the current file
   16061 
   16062     `Uv'
   16063           A memory reference suitable for VFP load/store insns
   16064           (reg+constant offset)
   16065 
   16066     `Uy'
   16067           A memory reference suitable for iWMMXt load/store
   16068           instructions.
   16069 
   16070     `Uq'
   16071           A memory reference suitable for the ARMv4 ldrsb instruction.
   16072 
   16073 _AVR family--`config/avr/constraints.md'_
   16074 
   16075     `l'
   16076           Registers from r0 to r15
   16077 
   16078     `a'
   16079           Registers from r16 to r23
   16080 
   16081     `d'
   16082           Registers from r16 to r31
   16083 
   16084     `w'
   16085           Registers from r24 to r31.  These registers can be used in
   16086           `adiw' command
   16087 
   16088     `e'
   16089           Pointer register (r26-r31)
   16090 
   16091     `b'
   16092           Base pointer register (r28-r31)
   16093 
   16094     `q'
   16095           Stack pointer register (SPH:SPL)
   16096 
   16097     `t'
   16098           Temporary register r0
   16099 
   16100     `x'
   16101           Register pair X (r27:r26)
   16102 
   16103     `y'
   16104           Register pair Y (r29:r28)
   16105 
   16106     `z'
   16107           Register pair Z (r31:r30)
   16108 
   16109     `I'
   16110           Constant greater than -1, less than 64
   16111 
   16112     `J'
   16113           Constant greater than -64, less than 1
   16114 
   16115     `K'
   16116           Constant integer 2
   16117 
   16118     `L'
   16119           Constant integer 0
   16120 
   16121     `M'
   16122           Constant that fits in 8 bits
   16123 
   16124     `N'
   16125           Constant integer -1
   16126 
   16127     `O'
   16128           Constant integer 8, 16, or 24
   16129 
   16130     `P'
   16131           Constant integer 1
   16132 
   16133     `G'
   16134           A floating point constant 0.0
   16135 
   16136     `R'
   16137           Integer constant in the range -6 ... 5.
   16138 
   16139     `Q'
   16140           A memory address based on Y or Z pointer with displacement.
   16141 
   16142 _CRX Architecture--`config/crx/crx.h'_
   16143 
   16144     `b'
   16145           Registers from r0 to r14 (registers without stack pointer)
   16146 
   16147     `l'
   16148           Register r16 (64-bit accumulator lo register)
   16149 
   16150     `h'
   16151           Register r17 (64-bit accumulator hi register)
   16152 
   16153     `k'
   16154           Register pair r16-r17. (64-bit accumulator lo-hi pair)
   16155 
   16156     `I'
   16157           Constant that fits in 3 bits
   16158 
   16159     `J'
   16160           Constant that fits in 4 bits
   16161 
   16162     `K'
   16163           Constant that fits in 5 bits
   16164 
   16165     `L'
   16166           Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48
   16167 
   16168     `G'
   16169           Floating point constant that is legal for store immediate
   16170 
   16171 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_
   16172 
   16173     `a'
   16174           General register 1
   16175 
   16176     `f'
   16177           Floating point register
   16178 
   16179     `q'
   16180           Shift amount register
   16181 
   16182     `x'
   16183           Floating point register (deprecated)
   16184 
   16185     `y'
   16186           Upper floating point register (32-bit), floating point
   16187           register (64-bit)
   16188 
   16189     `Z'
   16190           Any register
   16191 
   16192     `I'
   16193           Signed 11-bit integer constant
   16194 
   16195     `J'
   16196           Signed 14-bit integer constant
   16197 
   16198     `K'
   16199           Integer constant that can be deposited with a `zdepi'
   16200           instruction
   16201 
   16202     `L'
   16203           Signed 5-bit integer constant
   16204 
   16205     `M'
   16206           Integer constant 0
   16207 
   16208     `N'
   16209           Integer constant that can be loaded with a `ldil' instruction
   16210 
   16211     `O'
   16212           Integer constant whose value plus one is a power of 2
   16213 
   16214     `P'
   16215           Integer constant that can be used for `and' operations in
   16216           `depi' and `extru' instructions
   16217 
   16218     `S'
   16219           Integer constant 31
   16220 
   16221     `U'
   16222           Integer constant 63
   16223 
   16224     `G'
   16225           Floating-point constant 0.0
   16226 
   16227     `A'
   16228           A `lo_sum' data-linkage-table memory operand
   16229 
   16230     `Q'
   16231           A memory operand that can be used as the destination operand
   16232           of an integer store instruction
   16233 
   16234     `R'
   16235           A scaled or unscaled indexed memory operand
   16236 
   16237     `T'
   16238           A memory operand for floating-point loads and stores
   16239 
   16240     `W'
   16241           A register indirect memory operand
   16242 
   16243 _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
   16244 
   16245     `b'
   16246           Address base register
   16247 
   16248     `f'
   16249           Floating point register
   16250 
   16251     `v'
   16252           Vector register
   16253 
   16254     `h'
   16255           `MQ', `CTR', or `LINK' register
   16256 
   16257     `q'
   16258           `MQ' register
   16259 
   16260     `c'
   16261           `CTR' register
   16262 
   16263     `l'
   16264           `LINK' register
   16265 
   16266     `x'
   16267           `CR' register (condition register) number 0
   16268 
   16269     `y'
   16270           `CR' register (condition register)
   16271 
   16272     `z'
   16273           `FPMEM' stack memory for FPR-GPR transfers
   16274 
   16275     `I'
   16276           Signed 16-bit constant
   16277 
   16278     `J'
   16279           Unsigned 16-bit constant shifted left 16 bits (use `L'
   16280           instead for `SImode' constants)
   16281 
   16282     `K'
   16283           Unsigned 16-bit constant
   16284 
   16285     `L'
   16286           Signed 16-bit constant shifted left 16 bits
   16287 
   16288     `M'
   16289           Constant larger than 31
   16290 
   16291     `N'
   16292           Exact power of 2
   16293 
   16294     `O'
   16295           Zero
   16296 
   16297     `P'
   16298           Constant whose negation is a signed 16-bit constant
   16299 
   16300     `G'
   16301           Floating point constant that can be loaded into a register
   16302           with one instruction per word
   16303 
   16304     `H'
   16305           Integer/Floating point constant that can be loaded into a
   16306           register using three instructions
   16307 
   16308     `Q'
   16309           Memory operand that is an offset from a register (`m' is
   16310           preferable for `asm' statements)
   16311 
   16312     `Z'
   16313           Memory operand that is an indexed or indirect from a register
   16314           (`m' is preferable for `asm' statements)
   16315 
   16316     `R'
   16317           AIX TOC entry
   16318 
   16319     `a'
   16320           Address operand that is an indexed or indirect from a
   16321           register (`p' is preferable for `asm' statements)
   16322 
   16323     `S'
   16324           Constant suitable as a 64-bit mask operand
   16325 
   16326     `T'
   16327           Constant suitable as a 32-bit mask operand
   16328 
   16329     `U'
   16330           System V Release 4 small data area reference
   16331 
   16332     `t'
   16333           AND masks that can be performed by two rldic{l, r}
   16334           instructions
   16335 
   16336     `W'
   16337           Vector constant that does not require memory
   16338 
   16339 
   16340 _MorphoTech family--`config/mt/mt.h'_
   16341 
   16342     `I'
   16343           Constant for an arithmetic insn (16-bit signed integer).
   16344 
   16345     `J'
   16346           The constant 0.
   16347 
   16348     `K'
   16349           Constant for a logical insn (16-bit zero-extended integer).
   16350 
   16351     `L'
   16352           A constant that can be loaded with `lui' (i.e. the bottom 16
   16353           bits are zero).
   16354 
   16355     `M'
   16356           A constant that takes two words to load (i.e. not matched by
   16357           `I', `K', or `L').
   16358 
   16359     `N'
   16360           Negative 16-bit constants other than -65536.
   16361 
   16362     `O'
   16363           A 15-bit signed integer constant.
   16364 
   16365     `P'
   16366           A positive 16-bit constant.
   16367 
   16368 _Intel 386--`config/i386/constraints.md'_
   16369 
   16370     `R'
   16371           Legacy register--the eight integer registers available on all
   16372           i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
   16373 
   16374     `q'
   16375           Any register accessible as `Rl'.  In 32-bit mode, `a', `b',
   16376           `c', and `d'; in 64-bit mode, any integer register.
   16377 
   16378     `Q'
   16379           Any register accessible as `Rh': `a', `b', `c', and `d'.
   16380 
   16381     `l'
   16382           Any register that can be used as the index in a base+index
   16383           memory access: that is, any general register except the stack
   16384           pointer.
   16385 
   16386     `a'
   16387           The `a' register.
   16388 
   16389     `b'
   16390           The `b' register.
   16391 
   16392     `c'
   16393           The `c' register.
   16394 
   16395     `d'
   16396           The `d' register.
   16397 
   16398     `S'
   16399           The `si' register.
   16400 
   16401     `D'
   16402           The `di' register.
   16403 
   16404     `A'
   16405           The `a' and `d' registers, as a pair (for instructions that
   16406           return half the result in one and half in the other).
   16407 
   16408     `f'
   16409           Any 80387 floating-point (stack) register.
   16410 
   16411     `t'
   16412           Top of 80387 floating-point stack (`%st(0)').
   16413 
   16414     `u'
   16415           Second from top of 80387 floating-point stack (`%st(1)').
   16416 
   16417     `y'
   16418           Any MMX register.
   16419 
   16420     `x'
   16421           Any SSE register.
   16422 
   16423     `Y'
   16424           Any SSE2 register.
   16425 
   16426     `I'
   16427           Integer constant in the range 0 ... 31, for 32-bit shifts.
   16428 
   16429     `J'
   16430           Integer constant in the range 0 ... 63, for 64-bit shifts.
   16431 
   16432     `K'
   16433           Signed 8-bit integer constant.
   16434 
   16435     `L'
   16436           `0xFF' or `0xFFFF', for andsi as a zero-extending move.
   16437 
   16438     `M'
   16439           0, 1, 2, or 3 (shifts for the `lea' instruction).
   16440 
   16441     `N'
   16442           Unsigned 8-bit integer constant (for `in' and `out'
   16443           instructions).
   16444 
   16445     `O'
   16446           Integer constant in the range 0 ... 127, for 128-bit shifts.
   16447 
   16448     `G'
   16449           Standard 80387 floating point constant.
   16450 
   16451     `C'
   16452           Standard SSE floating point constant.
   16453 
   16454     `e'
   16455           32-bit signed integer constant, or a symbolic reference known
   16456           to fit that range (for immediate operands in sign-extending
   16457           x86-64 instructions).
   16458 
   16459     `Z'
   16460           32-bit unsigned integer constant, or a symbolic reference
   16461           known to fit that range (for immediate operands in
   16462           zero-extending x86-64 instructions).
   16463 
   16464 
   16465 _Intel IA-64--`config/ia64/ia64.h'_
   16466 
   16467     `a'
   16468           General register `r0' to `r3' for `addl' instruction
   16469 
   16470     `b'
   16471           Branch register
   16472 
   16473     `c'
   16474           Predicate register (`c' as in "conditional")
   16475 
   16476     `d'
   16477           Application register residing in M-unit
   16478 
   16479     `e'
   16480           Application register residing in I-unit
   16481 
   16482     `f'
   16483           Floating-point register
   16484 
   16485     `m'
   16486           Memory operand.  Remember that `m' allows postincrement and
   16487           postdecrement which require printing with `%Pn' on IA-64.
   16488           Use `S' to disallow postincrement and postdecrement.
   16489 
   16490     `G'
   16491           Floating-point constant 0.0 or 1.0
   16492 
   16493     `I'
   16494           14-bit signed integer constant
   16495 
   16496     `J'
   16497           22-bit signed integer constant
   16498 
   16499     `K'
   16500           8-bit signed integer constant for logical instructions
   16501 
   16502     `L'
   16503           8-bit adjusted signed integer constant for compare pseudo-ops
   16504 
   16505     `M'
   16506           6-bit unsigned integer constant for shift counts
   16507 
   16508     `N'
   16509           9-bit signed integer constant for load and store
   16510           postincrements
   16511 
   16512     `O'
   16513           The constant zero
   16514 
   16515     `P'
   16516           0 or -1 for `dep' instruction
   16517 
   16518     `Q'
   16519           Non-volatile memory for floating-point loads and stores
   16520 
   16521     `R'
   16522           Integer constant in the range 1 to 4 for `shladd' instruction
   16523 
   16524     `S'
   16525           Memory operand except postincrement and postdecrement
   16526 
   16527 _FRV--`config/frv/frv.h'_
   16528 
   16529     `a'
   16530           Register in the class `ACC_REGS' (`acc0' to `acc7').
   16531 
   16532     `b'
   16533           Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
   16534 
   16535     `c'
   16536           Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
   16537           to `icc3').
   16538 
   16539     `d'
   16540           Register in the class `GPR_REGS' (`gr0' to `gr63').
   16541 
   16542     `e'
   16543           Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
   16544           registers are excluded not in the class but through the use
   16545           of a machine mode larger than 4 bytes.
   16546 
   16547     `f'
   16548           Register in the class `FPR_REGS' (`fr0' to `fr63').
   16549 
   16550     `h'
   16551           Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
   16552           registers are excluded not in the class but through the use
   16553           of a machine mode larger than 4 bytes.
   16554 
   16555     `l'
   16556           Register in the class `LR_REG' (the `lr' register).
   16557 
   16558     `q'
   16559           Register in the class `QUAD_REGS' (`gr2' to `gr63').
   16560           Register numbers not divisible by 4 are excluded not in the
   16561           class but through the use of a machine mode larger than 8
   16562           bytes.
   16563 
   16564     `t'
   16565           Register in the class `ICC_REGS' (`icc0' to `icc3').
   16566 
   16567     `u'
   16568           Register in the class `FCC_REGS' (`fcc0' to `fcc3').
   16569 
   16570     `v'
   16571           Register in the class `ICR_REGS' (`cc4' to `cc7').
   16572 
   16573     `w'
   16574           Register in the class `FCR_REGS' (`cc0' to `cc3').
   16575 
   16576     `x'
   16577           Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
   16578           Register numbers not divisible by 4 are excluded not in the
   16579           class but through the use of a machine mode larger than 8
   16580           bytes.
   16581 
   16582     `z'
   16583           Register in the class `SPR_REGS' (`lcr' and `lr').
   16584 
   16585     `A'
   16586           Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
   16587 
   16588     `B'
   16589           Register in the class `ACCG_REGS' (`accg0' to `accg7').
   16590 
   16591     `C'
   16592           Register in the class `CR_REGS' (`cc0' to `cc7').
   16593 
   16594     `G'
   16595           Floating point constant zero
   16596 
   16597     `I'
   16598           6-bit signed integer constant
   16599 
   16600     `J'
   16601           10-bit signed integer constant
   16602 
   16603     `L'
   16604           16-bit signed integer constant
   16605 
   16606     `M'
   16607           16-bit unsigned integer constant
   16608 
   16609     `N'
   16610           12-bit signed integer constant that is negative--i.e. in the
   16611           range of -2048 to -1
   16612 
   16613     `O'
   16614           Constant zero
   16615 
   16616     `P'
   16617           12-bit signed integer constant that is greater than
   16618           zero--i.e. in the range of 1 to 2047.
   16619 
   16620 
   16621 _Blackfin family--`config/bfin/bfin.h'_
   16622 
   16623     `a'
   16624           P register
   16625 
   16626     `d'
   16627           D register
   16628 
   16629     `z'
   16630           A call clobbered P register.
   16631 
   16632     `qN'
   16633           A single register.  If N is in the range 0 to 7, the
   16634           corresponding D register.  If it is `A', then the register P0.
   16635 
   16636     `D'
   16637           Even-numbered D register
   16638 
   16639     `W'
   16640           Odd-numbered D register
   16641 
   16642     `e'
   16643           Accumulator register.
   16644 
   16645     `A'
   16646           Even-numbered accumulator register.
   16647 
   16648     `B'
   16649           Odd-numbered accumulator register.
   16650 
   16651     `b'
   16652           I register
   16653 
   16654     `v'
   16655           B register
   16656 
   16657     `f'
   16658           M register
   16659 
   16660     `c'
   16661           Registers used for circular buffering, i.e. I, B, or L
   16662           registers.
   16663 
   16664     `C'
   16665           The CC register.
   16666 
   16667     `t'
   16668           LT0 or LT1.
   16669 
   16670     `k'
   16671           LC0 or LC1.
   16672 
   16673     `u'
   16674           LB0 or LB1.
   16675 
   16676     `x'
   16677           Any D, P, B, M, I or L register.
   16678 
   16679     `y'
   16680           Additional registers typically used only in prologues and
   16681           epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
   16682           USP.
   16683 
   16684     `w'
   16685           Any register except accumulators or CC.
   16686 
   16687     `Ksh'
   16688           Signed 16 bit integer (in the range -32768 to 32767)
   16689 
   16690     `Kuh'
   16691           Unsigned 16 bit integer (in the range 0 to 65535)
   16692 
   16693     `Ks7'
   16694           Signed 7 bit integer (in the range -64 to 63)
   16695 
   16696     `Ku7'
   16697           Unsigned 7 bit integer (in the range 0 to 127)
   16698 
   16699     `Ku5'
   16700           Unsigned 5 bit integer (in the range 0 to 31)
   16701 
   16702     `Ks4'
   16703           Signed 4 bit integer (in the range -8 to 7)
   16704 
   16705     `Ks3'
   16706           Signed 3 bit integer (in the range -3 to 4)
   16707 
   16708     `Ku3'
   16709           Unsigned 3 bit integer (in the range 0 to 7)
   16710 
   16711     `PN'
   16712           Constant N, where N is a single-digit constant in the range 0
   16713           to 4.
   16714 
   16715     `PA'
   16716           An integer equal to one of the MACFLAG_XXX constants that is
   16717           suitable for use with either accumulator.
   16718 
   16719     `PB'
   16720           An integer equal to one of the MACFLAG_XXX constants that is
   16721           suitable for use only with accumulator A1.
   16722 
   16723     `M1'
   16724           Constant 255.
   16725 
   16726     `M2'
   16727           Constant 65535.
   16728 
   16729     `J'
   16730           An integer constant with exactly a single bit set.
   16731 
   16732     `L'
   16733           An integer constant with all bits set except exactly one.
   16734 
   16735     `H'
   16736 
   16737     `Q'
   16738           Any SYMBOL_REF.
   16739 
   16740 _M32C--`config/m32c/m32c.c'_
   16741 
   16742     `Rsp'
   16743     `Rfb'
   16744     `Rsb'
   16745           `$sp', `$fb', `$sb'.
   16746 
   16747     `Rcr'
   16748           Any control register, when they're 16 bits wide (nothing if
   16749           control registers are 24 bits wide)
   16750 
   16751     `Rcl'
   16752           Any control register, when they're 24 bits wide.
   16753 
   16754     `R0w'
   16755     `R1w'
   16756     `R2w'
   16757     `R3w'
   16758           $r0, $r1, $r2, $r3.
   16759 
   16760     `R02'
   16761           $r0 or $r2, or $r2r0 for 32 bit values.
   16762 
   16763     `R13'
   16764           $r1 or $r3, or $r3r1 for 32 bit values.
   16765 
   16766     `Rdi'
   16767           A register that can hold a 64 bit value.
   16768 
   16769     `Rhl'
   16770           $r0 or $r1 (registers with addressable high/low bytes)
   16771 
   16772     `R23'
   16773           $r2 or $r3
   16774 
   16775     `Raa'
   16776           Address registers
   16777 
   16778     `Raw'
   16779           Address registers when they're 16 bits wide.
   16780 
   16781     `Ral'
   16782           Address registers when they're 24 bits wide.
   16783 
   16784     `Rqi'
   16785           Registers that can hold QI values.
   16786 
   16787     `Rad'
   16788           Registers that can be used with displacements ($a0, $a1, $sb).
   16789 
   16790     `Rsi'
   16791           Registers that can hold 32 bit values.
   16792 
   16793     `Rhi'
   16794           Registers that can hold 16 bit values.
   16795 
   16796     `Rhc'
   16797           Registers chat can hold 16 bit values, including all control
   16798           registers.
   16799 
   16800     `Rra'
   16801           $r0 through R1, plus $a0 and $a1.
   16802 
   16803     `Rfl'
   16804           The flags register.
   16805 
   16806     `Rmm'
   16807           The memory-based pseudo-registers $mem0 through $mem15.
   16808 
   16809     `Rpi'
   16810           Registers that can hold pointers (16 bit registers for r8c,
   16811           m16c; 24 bit registers for m32cm, m32c).
   16812 
   16813     `Rpa'
   16814           Matches multiple registers in a PARALLEL to form a larger
   16815           register.  Used to match function return values.
   16816 
   16817     `Is3'
   16818           -8 ... 7
   16819 
   16820     `IS1'
   16821           -128 ... 127
   16822 
   16823     `IS2'
   16824           -32768 ... 32767
   16825 
   16826     `IU2'
   16827           0 ... 65535
   16828 
   16829     `In4'
   16830           -8 ... -1 or 1 ... 8
   16831 
   16832     `In5'
   16833           -16 ... -1 or 1 ... 16
   16834 
   16835     `In6'
   16836           -32 ... -1 or 1 ... 32
   16837 
   16838     `IM2'
   16839           -65536 ... -1
   16840 
   16841     `Ilb'
   16842           An 8 bit value with exactly one bit set.
   16843 
   16844     `Ilw'
   16845           A 16 bit value with exactly one bit set.
   16846 
   16847     `Sd'
   16848           The common src/dest memory addressing modes.
   16849 
   16850     `Sa'
   16851           Memory addressed using $a0 or $a1.
   16852 
   16853     `Si'
   16854           Memory addressed with immediate addresses.
   16855 
   16856     `Ss'
   16857           Memory addressed using the stack pointer ($sp).
   16858 
   16859     `Sf'
   16860           Memory addressed using the frame base register ($fb).
   16861 
   16862     `Ss'
   16863           Memory addressed using the small base register ($sb).
   16864 
   16865     `S1'
   16866           $r1h
   16867 
   16868 _MIPS--`config/mips/constraints.md'_
   16869 
   16870     `d'
   16871           An address register.  This is equivalent to `r' unless
   16872           generating MIPS16 code.
   16873 
   16874     `f'
   16875           A floating-point register (if available).
   16876 
   16877     `h'
   16878           The `hi' register.
   16879 
   16880     `l'
   16881           The `lo' register.
   16882 
   16883     `x'
   16884           The `hi' and `lo' registers.
   16885 
   16886     `c'
   16887           A register suitable for use in an indirect jump.  This will
   16888           always be `$25' for `-mabicalls'.
   16889 
   16890     `y'
   16891           Equivalent to `r'; retained for backwards compatibility.
   16892 
   16893     `z'
   16894           A floating-point condition code register.
   16895 
   16896     `I'
   16897           A signed 16-bit constant (for arithmetic instructions).
   16898 
   16899     `J'
   16900           Integer zero.
   16901 
   16902     `K'
   16903           An unsigned 16-bit constant (for logic instructions).
   16904 
   16905     `L'
   16906           A signed 32-bit constant in which the lower 16 bits are zero.
   16907           Such constants can be loaded using `lui'.
   16908 
   16909     `M'
   16910           A constant that cannot be loaded using `lui', `addiu' or
   16911           `ori'.
   16912 
   16913     `N'
   16914           A constant in the range -65535 to -1 (inclusive).
   16915 
   16916     `O'
   16917           A signed 15-bit constant.
   16918 
   16919     `P'
   16920           A constant in the range 1 to 65535 (inclusive).
   16921 
   16922     `G'
   16923           Floating-point zero.
   16924 
   16925     `R'
   16926           An address that can be used in a non-macro load or store.
   16927 
   16928 _Motorola 680x0--`config/m68k/constraints.md'_
   16929 
   16930     `a'
   16931           Address register
   16932 
   16933     `d'
   16934           Data register
   16935 
   16936     `f'
   16937           68881 floating-point register, if available
   16938 
   16939     `I'
   16940           Integer in the range 1 to 8
   16941 
   16942     `J'
   16943           16-bit signed number
   16944 
   16945     `K'
   16946           Signed number whose magnitude is greater than 0x80
   16947 
   16948     `L'
   16949           Integer in the range -8 to -1
   16950 
   16951     `M'
   16952           Signed number whose magnitude is greater than 0x100
   16953 
   16954     `N'
   16955           Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
   16956 
   16957     `O'
   16958           16 (for rotate using swap)
   16959 
   16960     `P'
   16961           Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
   16962 
   16963     `R'
   16964           Numbers that mov3q can handle
   16965 
   16966     `G'
   16967           Floating point constant that is not a 68881 constant
   16968 
   16969     `S'
   16970           Operands that satisfy 'm' when -mpcrel is in effect
   16971 
   16972     `T'
   16973           Operands that satisfy 's' when -mpcrel is not in effect
   16974 
   16975     `Q'
   16976           Address register indirect addressing mode
   16977 
   16978     `U'
   16979           Register offset addressing
   16980 
   16981     `W'
   16982           const_call_operand
   16983 
   16984     `Cs'
   16985           symbol_ref or const
   16986 
   16987     `Ci'
   16988           const_int
   16989 
   16990     `C0'
   16991           const_int 0
   16992 
   16993     `Cj'
   16994           Range of signed numbers that don't fit in 16 bits
   16995 
   16996     `Cmvq'
   16997           Integers valid for mvq
   16998 
   16999     `Capsw'
   17000           Integers valid for a moveq followed by a swap
   17001 
   17002     `Cmvz'
   17003           Integers valid for mvz
   17004 
   17005     `Cmvs'
   17006           Integers valid for mvs
   17007 
   17008     `Ap'
   17009           push_operand
   17010 
   17011     `Ac'
   17012           Non-register operands allowed in clr
   17013 
   17014 
   17015 _Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_
   17016 
   17017     `a'
   17018           Register `a'
   17019 
   17020     `b'
   17021           Register `b'
   17022 
   17023     `d'
   17024           Register `d'
   17025 
   17026     `q'
   17027           An 8-bit register
   17028 
   17029     `t'
   17030           Temporary soft register _.tmp
   17031 
   17032     `u'
   17033           A soft register _.d1 to _.d31
   17034 
   17035     `w'
   17036           Stack pointer register
   17037 
   17038     `x'
   17039           Register `x'
   17040 
   17041     `y'
   17042           Register `y'
   17043 
   17044     `z'
   17045           Pseudo register `z' (replaced by `x' or `y' at the end)
   17046 
   17047     `A'
   17048           An address register: x, y or z
   17049 
   17050     `B'
   17051           An address register: x or y
   17052 
   17053     `D'
   17054           Register pair (x:d) to form a 32-bit value
   17055 
   17056     `L'
   17057           Constants in the range -65536 to 65535
   17058 
   17059     `M'
   17060           Constants whose 16-bit low part is zero
   17061 
   17062     `N'
   17063           Constant integer 1 or -1
   17064 
   17065     `O'
   17066           Constant integer 16
   17067 
   17068     `P'
   17069           Constants in the range -8 to 2
   17070 
   17071 
   17072 _SPARC--`config/sparc/sparc.h'_
   17073 
   17074     `f'
   17075           Floating-point register on the SPARC-V8 architecture and
   17076           lower floating-point register on the SPARC-V9 architecture.
   17077 
   17078     `e'
   17079           Floating-point register.  It is equivalent to `f' on the
   17080           SPARC-V8 architecture and contains both lower and upper
   17081           floating-point registers on the SPARC-V9 architecture.
   17082 
   17083     `c'
   17084           Floating-point condition code register.
   17085 
   17086     `d'
   17087           Lower floating-point register.  It is only valid on the
   17088           SPARC-V9 architecture when the Visual Instruction Set is
   17089           available.
   17090 
   17091     `b'
   17092           Floating-point register.  It is only valid on the SPARC-V9
   17093           architecture when the Visual Instruction Set is available.
   17094 
   17095     `h'
   17096           64-bit global or out register for the SPARC-V8+ architecture.
   17097 
   17098     `I'
   17099           Signed 13-bit constant
   17100 
   17101     `J'
   17102           Zero
   17103 
   17104     `K'
   17105           32-bit constant with the low 12 bits clear (a constant that
   17106           can be loaded with the `sethi' instruction)
   17107 
   17108     `L'
   17109           A constant in the range supported by `movcc' instructions
   17110 
   17111     `M'
   17112           A constant in the range supported by `movrcc' instructions
   17113 
   17114     `N'
   17115           Same as `K', except that it verifies that bits that are not
   17116           in the lower 32-bit range are all zero.  Must be used instead
   17117           of `K' for modes wider than `SImode'
   17118 
   17119     `O'
   17120           The constant 4096
   17121 
   17122     `G'
   17123           Floating-point zero
   17124 
   17125     `H'
   17126           Signed 13-bit constant, sign-extended to 32 or 64 bits
   17127 
   17128     `Q'
   17129           Floating-point constant whose integral representation can be
   17130           moved into an integer register using a single sethi
   17131           instruction
   17132 
   17133     `R'
   17134           Floating-point constant whose integral representation can be
   17135           moved into an integer register using a single mov instruction
   17136 
   17137     `S'
   17138           Floating-point constant whose integral representation can be
   17139           moved into an integer register using a high/lo_sum
   17140           instruction sequence
   17141 
   17142     `T'
   17143           Memory address aligned to an 8-byte boundary
   17144 
   17145     `U'
   17146           Even register
   17147 
   17148     `W'
   17149           Memory address for `e' constraint registers
   17150 
   17151     `Y'
   17152           Vector zero
   17153 
   17154 
   17155 _SPU--`config/spu/spu.h'_
   17156 
   17157     `a'
   17158           An immediate which can be loaded with the il/ila/ilh/ilhu
   17159           instructions.  const_int is treated as a 64 bit value.
   17160 
   17161     `c'
   17162           An immediate for and/xor/or instructions.  const_int is
   17163           treated as a 64 bit value.
   17164 
   17165     `d'
   17166           An immediate for the `iohl' instruction.  const_int is
   17167           treated as a 64 bit value.
   17168 
   17169     `f'
   17170           An immediate which can be loaded with `fsmbi'.
   17171 
   17172     `A'
   17173           An immediate which can be loaded with the il/ila/ilh/ilhu
   17174           instructions.  const_int is treated as a 32 bit value.
   17175 
   17176     `B'
   17177           An immediate for most arithmetic instructions.  const_int is
   17178           treated as a 32 bit value.
   17179 
   17180     `C'
   17181           An immediate for and/xor/or instructions.  const_int is
   17182           treated as a 32 bit value.
   17183 
   17184     `D'
   17185           An immediate for the `iohl' instruction.  const_int is
   17186           treated as a 32 bit value.
   17187 
   17188     `I'
   17189           A constant in the range [-64, 63] for shift/rotate
   17190           instructions.
   17191 
   17192     `J'
   17193           An unsigned 7-bit constant for conversion/nop/channel
   17194           instructions.
   17195 
   17196     `K'
   17197           A signed 10-bit constant for most arithmetic instructions.
   17198 
   17199     `M'
   17200           A signed 16 bit immediate for `stop'.
   17201 
   17202     `N'
   17203           An unsigned 16-bit constant for `iohl' and `fsmbi'.
   17204 
   17205     `O'
   17206           An unsigned 7-bit constant whose 3 least significant bits are
   17207           0.
   17208 
   17209     `P'
   17210           An unsigned 3-bit constant for 16-byte rotates and shifts
   17211 
   17212     `R'
   17213           Call operand, reg, for indirect calls
   17214 
   17215     `S'
   17216           Call operand, symbol, for relative calls.
   17217 
   17218     `T'
   17219           Call operand, const_int, for absolute calls.
   17220 
   17221     `U'
   17222           An immediate which can be loaded with the il/ila/ilh/ilhu
   17223           instructions.  const_int is sign extended to 128 bit.
   17224 
   17225     `W'
   17226           An immediate for shift and rotate instructions.  const_int is
   17227           treated as a 32 bit value.
   17228 
   17229     `Y'
   17230           An immediate for and/xor/or instructions.  const_int is sign
   17231           extended as a 128 bit.
   17232 
   17233     `Z'
   17234           An immediate for the `iohl' instruction.  const_int is sign
   17235           extended to 128 bit.
   17236 
   17237 
   17238 _S/390 and zSeries--`config/s390/s390.h'_
   17239 
   17240     `a'
   17241           Address register (general purpose register except r0)
   17242 
   17243     `c'
   17244           Condition code register
   17245 
   17246     `d'
   17247           Data register (arbitrary general purpose register)
   17248 
   17249     `f'
   17250           Floating-point register
   17251 
   17252     `I'
   17253           Unsigned 8-bit constant (0-255)
   17254 
   17255     `J'
   17256           Unsigned 12-bit constant (0-4095)
   17257 
   17258     `K'
   17259           Signed 16-bit constant (-32768-32767)
   17260 
   17261     `L'
   17262           Value appropriate as displacement.
   17263          `(0..4095)'
   17264                for short displacement
   17265 
   17266          `(-524288..524287)'
   17267                for long displacement
   17268 
   17269     `M'
   17270           Constant integer with a value of 0x7fffffff.
   17271 
   17272     `N'
   17273           Multiple letter constraint followed by 4 parameter letters.
   17274          `0..9:'
   17275                number of the part counting from most to least
   17276                significant
   17277 
   17278          `H,Q:'
   17279                mode of the part
   17280 
   17281          `D,S,H:'
   17282                mode of the containing operand
   17283 
   17284          `0,F:'
   17285                value of the other parts (F--all bits set)
   17286           The constraint matches if the specified part of a constant
   17287           has a value different from its other parts.
   17288 
   17289     `Q'
   17290           Memory reference without index register and with short
   17291           displacement.
   17292 
   17293     `R'
   17294           Memory reference with index register and short displacement.
   17295 
   17296     `S'
   17297           Memory reference without index register but with long
   17298           displacement.
   17299 
   17300     `T'
   17301           Memory reference with index register and long displacement.
   17302 
   17303     `U'
   17304           Pointer with short displacement.
   17305 
   17306     `W'
   17307           Pointer with long displacement.
   17308 
   17309     `Y'
   17310           Shift count operand.
   17311 
   17312 
   17313 _Score family--`config/score/score.h'_
   17314 
   17315     `d'
   17316           Registers from r0 to r32.
   17317 
   17318     `e'
   17319           Registers from r0 to r16.
   17320 
   17321     `t'
   17322           r8--r11 or r22--r27 registers.
   17323 
   17324     `h'
   17325           hi register.
   17326 
   17327     `l'
   17328           lo register.
   17329 
   17330     `x'
   17331           hi + lo register.
   17332 
   17333     `q'
   17334           cnt register.
   17335 
   17336     `y'
   17337           lcb register.
   17338 
   17339     `z'
   17340           scb register.
   17341 
   17342     `a'
   17343           cnt + lcb + scb register.
   17344 
   17345     `c'
   17346           cr0--cr15 register.
   17347 
   17348     `b'
   17349           cp1 registers.
   17350 
   17351     `f'
   17352           cp2 registers.
   17353 
   17354     `i'
   17355           cp3 registers.
   17356 
   17357     `j'
   17358           cp1 + cp2 + cp3 registers.
   17359 
   17360     `I'
   17361           High 16-bit constant (32-bit constant with 16 LSBs zero).
   17362 
   17363     `J'
   17364           Unsigned 5 bit integer (in the range 0 to 31).
   17365 
   17366     `K'
   17367           Unsigned 16 bit integer (in the range 0 to 65535).
   17368 
   17369     `L'
   17370           Signed 16 bit integer (in the range -32768 to 32767).
   17371 
   17372     `M'
   17373           Unsigned 14 bit integer (in the range 0 to 16383).
   17374 
   17375     `N'
   17376           Signed 14 bit integer (in the range -8192 to 8191).
   17377 
   17378     `Z'
   17379           Any SYMBOL_REF.
   17380 
   17381 _Xstormy16--`config/stormy16/stormy16.h'_
   17382 
   17383     `a'
   17384           Register r0.
   17385 
   17386     `b'
   17387           Register r1.
   17388 
   17389     `c'
   17390           Register r2.
   17391 
   17392     `d'
   17393           Register r8.
   17394 
   17395     `e'
   17396           Registers r0 through r7.
   17397 
   17398     `t'
   17399           Registers r0 and r1.
   17400 
   17401     `y'
   17402           The carry register.
   17403 
   17404     `z'
   17405           Registers r8 and r9.
   17406 
   17407     `I'
   17408           A constant between 0 and 3 inclusive.
   17409 
   17410     `J'
   17411           A constant that has exactly one bit set.
   17412 
   17413     `K'
   17414           A constant that has exactly one bit clear.
   17415 
   17416     `L'
   17417           A constant between 0 and 255 inclusive.
   17418 
   17419     `M'
   17420           A constant between -255 and 0 inclusive.
   17421 
   17422     `N'
   17423           A constant between -3 and 0 inclusive.
   17424 
   17425     `O'
   17426           A constant between 1 and 4 inclusive.
   17427 
   17428     `P'
   17429           A constant between -4 and -1 inclusive.
   17430 
   17431     `Q'
   17432           A memory reference that is a stack push.
   17433 
   17434     `R'
   17435           A memory reference that is a stack pop.
   17436 
   17437     `S'
   17438           A memory reference that refers to a constant address of known
   17439           value.
   17440 
   17441     `T'
   17442           The register indicated by Rx (not implemented yet).
   17443 
   17444     `U'
   17445           A constant that is not between 2 and 15 inclusive.
   17446 
   17447     `Z'
   17448           The constant 0.
   17449 
   17450 
   17451 _Xtensa--`config/xtensa/constraints.md'_
   17452 
   17453     `a'
   17454           General-purpose 32-bit register
   17455 
   17456     `b'
   17457           One-bit boolean register
   17458 
   17459     `A'
   17460           MAC16 40-bit accumulator register
   17461 
   17462     `I'
   17463           Signed 12-bit integer constant, for use in MOVI instructions
   17464 
   17465     `J'
   17466           Signed 8-bit integer constant, for use in ADDI instructions
   17467 
   17468     `K'
   17469           Integer constant valid for BccI instructions
   17470 
   17471     `L'
   17472           Unsigned constant valid for BccUI instructions
   17473 
   17474 
   17475 
   17476 
   17477 File: gccint.info,  Node: Define Constraints,  Next: C Constraint Interface,  Prev: Machine Constraints,  Up: Constraints
   17478 
   17479 14.8.6 Defining Machine-Specific Constraints
   17480 --------------------------------------------
   17481 
   17482 Machine-specific constraints fall into two categories: register and
   17483 non-register constraints.  Within the latter category, constraints
   17484 which allow subsets of all possible memory or address operands should
   17485 be specially marked, to give `reload' more information.
   17486 
   17487  Machine-specific constraints can be given names of arbitrary length,
   17488 but they must be entirely composed of letters, digits, underscores
   17489 (`_'), and angle brackets (`< >').  Like C identifiers, they must begin
   17490 with a letter or underscore.
   17491 
   17492  In order to avoid ambiguity in operand constraint strings, no
   17493 constraint can have a name that begins with any other constraint's
   17494 name.  For example, if `x' is defined as a constraint name, `xy' may
   17495 not be, and vice versa.  As a consequence of this rule, no constraint
   17496 may begin with one of the generic constraint letters: `E F V X g i m n
   17497 o p r s'.
   17498 
   17499  Register constraints correspond directly to register classes.  *Note
   17500 Register Classes::.  There is thus not much flexibility in their
   17501 definitions.
   17502 
   17503  -- MD Expression: define_register_constraint name regclass docstring
   17504      All three arguments are string constants.  NAME is the name of the
   17505      constraint, as it will appear in `match_operand' expressions.  If
   17506      NAME is a multi-letter constraint its length shall be the same for
   17507      all constraints starting with the same letter.  REGCLASS can be
   17508      either the name of the corresponding register class (*note
   17509      Register Classes::), or a C expression which evaluates to the
   17510      appropriate register class.  If it is an expression, it must have
   17511      no side effects, and it cannot look at the operand.  The usual use
   17512      of expressions is to map some register constraints to `NO_REGS'
   17513      when the register class is not available on a given
   17514      subarchitecture.
   17515 
   17516      DOCSTRING is a sentence documenting the meaning of the constraint.
   17517      Docstrings are explained further below.
   17518 
   17519  Non-register constraints are more like predicates: the constraint
   17520 definition gives a Boolean expression which indicates whether the
   17521 constraint matches.
   17522 
   17523  -- MD Expression: define_constraint name docstring exp
   17524      The NAME and DOCSTRING arguments are the same as for
   17525      `define_register_constraint', but note that the docstring comes
   17526      immediately after the name for these expressions.  EXP is an RTL
   17527      expression, obeying the same rules as the RTL expressions in
   17528      predicate definitions.  *Note Defining Predicates::, for details.
   17529      If it evaluates true, the constraint matches; if it evaluates
   17530      false, it doesn't. Constraint expressions should indicate which
   17531      RTL codes they might match, just like predicate expressions.
   17532 
   17533      `match_test' C expressions have access to the following variables:
   17534 
   17535     OP
   17536           The RTL object defining the operand.
   17537 
   17538     MODE
   17539           The machine mode of OP.
   17540 
   17541     IVAL
   17542           `INTVAL (OP)', if OP is a `const_int'.
   17543 
   17544     HVAL
   17545           `CONST_DOUBLE_HIGH (OP)', if OP is an integer `const_double'.
   17546 
   17547     LVAL
   17548           `CONST_DOUBLE_LOW (OP)', if OP is an integer `const_double'.
   17549 
   17550     RVAL
   17551           `CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point
   17552           `const_double'.
   17553 
   17554      The *VAL variables should only be used once another piece of the
   17555      expression has verified that OP is the appropriate kind of RTL
   17556      object.
   17557 
   17558  Most non-register constraints should be defined with
   17559 `define_constraint'.  The remaining two definition expressions are only
   17560 appropriate for constraints that should be handled specially by
   17561 `reload' if they fail to match.
   17562 
   17563  -- MD Expression: define_memory_constraint name docstring exp
   17564      Use this expression for constraints that match a subset of all
   17565      memory operands: that is, `reload' can make them match by
   17566      converting the operand to the form `(mem (reg X))', where X is a
   17567      base register (from the register class specified by
   17568      `BASE_REG_CLASS', *note Register Classes::).
   17569 
   17570      For example, on the S/390, some instructions do not accept
   17571      arbitrary memory references, but only those that do not make use
   17572      of an index register.  The constraint letter `Q' is defined to
   17573      represent a memory address of this type.  If `Q' is defined with
   17574      `define_memory_constraint', a `Q' constraint can handle any memory
   17575      operand, because `reload' knows it can simply copy the memory
   17576      address into a base register if required.  This is analogous to
   17577      the way a `o' constraint can handle any memory operand.
   17578 
   17579      The syntax and semantics are otherwise identical to
   17580      `define_constraint'.
   17581 
   17582  -- MD Expression: define_address_constraint name docstring exp
   17583      Use this expression for constraints that match a subset of all
   17584      address operands: that is, `reload' can make the constraint match
   17585      by converting the operand to the form `(reg X)', again with X a
   17586      base register.
   17587 
   17588      Constraints defined with `define_address_constraint' can only be
   17589      used with the `address_operand' predicate, or machine-specific
   17590      predicates that work the same way.  They are treated analogously to
   17591      the generic `p' constraint.
   17592 
   17593      The syntax and semantics are otherwise identical to
   17594      `define_constraint'.
   17595 
   17596  For historical reasons, names beginning with the letters `G H' are
   17597 reserved for constraints that match only `const_double's, and names
   17598 beginning with the letters `I J K L M N O P' are reserved for
   17599 constraints that match only `const_int's.  This may change in the
   17600 future.  For the time being, constraints with these names must be
   17601 written in a stylized form, so that `genpreds' can tell you did it
   17602 correctly:
   17603 
   17604      (define_constraint "[GHIJKLMNOP]..."
   17605        "DOC..."
   17606        (and (match_code "const_int")  ; `const_double' for G/H
   17607             CONDITION...))            ; usually a `match_test'
   17608 
   17609  It is fine to use names beginning with other letters for constraints
   17610 that match `const_double's or `const_int's.
   17611 
   17612  Each docstring in a constraint definition should be one or more
   17613 complete sentences, marked up in Texinfo format.  _They are currently
   17614 unused._ In the future they will be copied into the GCC manual, in
   17615 *Note Machine Constraints::, replacing the hand-maintained tables
   17616 currently found in that section.  Also, in the future the compiler may
   17617 use this to give more helpful diagnostics when poor choice of `asm'
   17618 constraints causes a reload failure.
   17619 
   17620  If you put the pseudo-Texinfo directive `@internal' at the beginning
   17621 of a docstring, then (in the future) it will appear only in the
   17622 internals manual's version of the machine-specific constraint tables.
   17623 Use this for constraints that should not appear in `asm' statements.
   17624 
   17625 
   17626 File: gccint.info,  Node: C Constraint Interface,  Prev: Define Constraints,  Up: Constraints
   17627 
   17628 14.8.7 Testing constraints from C
   17629 ---------------------------------
   17630 
   17631 It is occasionally useful to test a constraint from C code rather than
   17632 implicitly via the constraint string in a `match_operand'.  The
   17633 generated file `tm_p.h' declares a few interfaces for working with
   17634 machine-specific constraints.  None of these interfaces work with the
   17635 generic constraints described in *Note Simple Constraints::.  This may
   17636 change in the future.
   17637 
   17638  *Warning:* `tm_p.h' may declare other functions that operate on
   17639 constraints, besides the ones documented here.  Do not use those
   17640 functions from machine-dependent code.  They exist to implement the old
   17641 constraint interface that machine-independent components of the
   17642 compiler still expect.  They will change or disappear in the future.
   17643 
   17644  Some valid constraint names are not valid C identifiers, so there is a
   17645 mangling scheme for referring to them from C.  Constraint names that do
   17646 not contain angle brackets or underscores are left unchanged.
   17647 Underscores are doubled, each `<' is replaced with `_l', and each `>'
   17648 with `_g'.  Here are some examples:
   17649 
   17650      *Original* *Mangled*
   17651      `x'        `x'
   17652      `P42x'     `P42x'
   17653      `P4_x'     `P4__x'
   17654      `P4>x'     `P4_gx'
   17655      `P4>>'     `P4_g_g'
   17656      `P4_g>'    `P4__g_g'
   17657 
   17658  Throughout this section, the variable C is either a constraint in the
   17659 abstract sense, or a constant from `enum constraint_num'; the variable
   17660 M is a mangled constraint name (usually as part of a larger identifier).
   17661 
   17662  -- Enum: constraint_num
   17663      For each machine-specific constraint, there is a corresponding
   17664      enumeration constant: `CONSTRAINT_' plus the mangled name of the
   17665      constraint.  Functions that take an `enum constraint_num' as an
   17666      argument expect one of these constants.
   17667 
   17668      Machine-independent constraints do not have associated constants.
   17669      This may change in the future.
   17670 
   17671  -- Function: inline bool satisfies_constraint_M (rtx EXP)
   17672      For each machine-specific, non-register constraint M, there is one
   17673      of these functions; it returns `true' if EXP satisfies the
   17674      constraint.  These functions are only visible if `rtl.h' was
   17675      included before `tm_p.h'.
   17676 
   17677  -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num
   17678           C)
   17679      Like the `satisfies_constraint_M' functions, but the constraint to
   17680      test is given as an argument, C.  If C specifies a register
   17681      constraint, this function will always return `false'.
   17682 
   17683  -- Function: enum reg_class regclass_for_constraint (enum
   17684           constraint_num C)
   17685      Returns the register class associated with C.  If C is not a
   17686      register constraint, or those registers are not available for the
   17687      currently selected subtarget, returns `NO_REGS'.
   17688 
   17689  Here is an example use of `satisfies_constraint_M'.  In peephole
   17690 optimizations (*note Peephole Definitions::), operand constraint
   17691 strings are ignored, so if there are relevant constraints, they must be
   17692 tested in the C condition.  In the example, the optimization is applied
   17693 if operand 2 does _not_ satisfy the `K' constraint.  (This is a
   17694 simplified version of a peephole definition from the i386 machine
   17695 description.)
   17696 
   17697      (define_peephole2
   17698        [(match_scratch:SI 3 "r")
   17699         (set (match_operand:SI 0 "register_operand" "")
   17700      	(mult:SI (match_operand:SI 1 "memory_operand" "")
   17701      		 (match_operand:SI 2 "immediate_operand" "")))]
   17702 
   17703        "!satisfies_constraint_K (operands[2])"
   17704 
   17705        [(set (match_dup 3) (match_dup 1))
   17706         (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))]
   17707 
   17708        "")
   17709 
   17710 
   17711 File: gccint.info,  Node: Standard Names,  Next: Pattern Ordering,  Prev: Constraints,  Up: Machine Desc
   17712 
   17713 14.9 Standard Pattern Names For Generation
   17714 ==========================================
   17715 
   17716 Here is a table of the instruction names that are meaningful in the RTL
   17717 generation pass of the compiler.  Giving one of these names to an
   17718 instruction pattern tells the RTL generation pass that it can use the
   17719 pattern to accomplish a certain task.
   17720 
   17721 `movM'
   17722      Here M stands for a two-letter machine mode name, in lowercase.
   17723      This instruction pattern moves data with that machine mode from
   17724      operand 1 to operand 0.  For example, `movsi' moves full-word data.
   17725 
   17726      If operand 0 is a `subreg' with mode M of a register whose own
   17727      mode is wider than M, the effect of this instruction is to store
   17728      the specified value in the part of the register that corresponds
   17729      to mode M.  Bits outside of M, but which are within the same
   17730      target word as the `subreg' are undefined.  Bits which are outside
   17731      the target word are left unchanged.
   17732 
   17733      This class of patterns is special in several ways.  First of all,
   17734      each of these names up to and including full word size _must_ be
   17735      defined, because there is no other way to copy a datum from one
   17736      place to another.  If there are patterns accepting operands in
   17737      larger modes, `movM' must be defined for integer modes of those
   17738      sizes.
   17739 
   17740      Second, these patterns are not used solely in the RTL generation
   17741      pass.  Even the reload pass can generate move insns to copy values
   17742      from stack slots into temporary registers.  When it does so, one
   17743      of the operands is a hard register and the other is an operand
   17744      that can need to be reloaded into a register.
   17745 
   17746      Therefore, when given such a pair of operands, the pattern must
   17747      generate RTL which needs no reloading and needs no temporary
   17748      registers--no registers other than the operands.  For example, if
   17749      you support the pattern with a `define_expand', then in such a
   17750      case the `define_expand' mustn't call `force_reg' or any other such
   17751      function which might generate new pseudo registers.
   17752 
   17753      This requirement exists even for subword modes on a RISC machine
   17754      where fetching those modes from memory normally requires several
   17755      insns and some temporary registers.
   17756 
   17757      During reload a memory reference with an invalid address may be
   17758      passed as an operand.  Such an address will be replaced with a
   17759      valid address later in the reload pass.  In this case, nothing may
   17760      be done with the address except to use it as it stands.  If it is
   17761      copied, it will not be replaced with a valid address.  No attempt
   17762      should be made to make such an address into a valid address and no
   17763      routine (such as `change_address') that will do so may be called.
   17764      Note that `general_operand' will fail when applied to such an
   17765      address.
   17766 
   17767      The global variable `reload_in_progress' (which must be explicitly
   17768      declared if required) can be used to determine whether such special
   17769      handling is required.
   17770 
   17771      The variety of operands that have reloads depends on the rest of
   17772      the machine description, but typically on a RISC machine these can
   17773      only be pseudo registers that did not get hard registers, while on
   17774      other machines explicit memory references will get optional
   17775      reloads.
   17776 
   17777      If a scratch register is required to move an object to or from
   17778      memory, it can be allocated using `gen_reg_rtx' prior to life
   17779      analysis.
   17780 
   17781      If there are cases which need scratch registers during or after
   17782      reload, you must provide an appropriate secondary_reload target
   17783      hook.
   17784 
   17785      The macro `can_create_pseudo_p' can be used to determine if it is
   17786      unsafe to create new pseudo registers.  If this variable is
   17787      nonzero, then it is unsafe to call `gen_reg_rtx' to allocate a new
   17788      pseudo.
   17789 
   17790      The constraints on a `movM' must permit moving any hard register
   17791      to any other hard register provided that `HARD_REGNO_MODE_OK'
   17792      permits mode M in both registers and `REGISTER_MOVE_COST' applied
   17793      to their classes returns a value of 2.
   17794 
   17795      It is obligatory to support floating point `movM' instructions
   17796      into and out of any registers that can hold fixed point values,
   17797      because unions and structures (which have modes `SImode' or
   17798      `DImode') can be in those registers and they may have floating
   17799      point members.
   17800 
   17801      There may also be a need to support fixed point `movM'
   17802      instructions in and out of floating point registers.
   17803      Unfortunately, I have forgotten why this was so, and I don't know
   17804      whether it is still true.  If `HARD_REGNO_MODE_OK' rejects fixed
   17805      point values in floating point registers, then the constraints of
   17806      the fixed point `movM' instructions must be designed to avoid ever
   17807      trying to reload into a floating point register.
   17808 
   17809 `reload_inM'
   17810 `reload_outM'
   17811      These named patterns have been obsoleted by the target hook
   17812      `secondary_reload'.
   17813 
   17814      Like `movM', but used when a scratch register is required to move
   17815      between operand 0 and operand 1.  Operand 2 describes the scratch
   17816      register.  See the discussion of the `SECONDARY_RELOAD_CLASS'
   17817      macro in *note Register Classes::.
   17818 
   17819      There are special restrictions on the form of the `match_operand's
   17820      used in these patterns.  First, only the predicate for the reload
   17821      operand is examined, i.e., `reload_in' examines operand 1, but not
   17822      the predicates for operand 0 or 2.  Second, there may be only one
   17823      alternative in the constraints.  Third, only a single register
   17824      class letter may be used for the constraint; subsequent constraint
   17825      letters are ignored.  As a special exception, an empty constraint
   17826      string matches the `ALL_REGS' register class.  This may relieve
   17827      ports of the burden of defining an `ALL_REGS' constraint letter
   17828      just for these patterns.
   17829 
   17830 `movstrictM'
   17831      Like `movM' except that if operand 0 is a `subreg' with mode M of
   17832      a register whose natural mode is wider, the `movstrictM'
   17833      instruction is guaranteed not to alter any of the register except
   17834      the part which belongs to mode M.
   17835 
   17836 `movmisalignM'
   17837      This variant of a move pattern is designed to load or store a value
   17838      from a memory address that is not naturally aligned for its mode.
   17839      For a store, the memory will be in operand 0; for a load, the
   17840      memory will be in operand 1.  The other operand is guaranteed not
   17841      to be a memory, so that it's easy to tell whether this is a load
   17842      or store.
   17843 
   17844      This pattern is used by the autovectorizer, and when expanding a
   17845      `MISALIGNED_INDIRECT_REF' expression.
   17846 
   17847 `load_multiple'
   17848      Load several consecutive memory locations into consecutive
   17849      registers.  Operand 0 is the first of the consecutive registers,
   17850      operand 1 is the first memory location, and operand 2 is a
   17851      constant: the number of consecutive registers.
   17852 
   17853      Define this only if the target machine really has such an
   17854      instruction; do not define this if the most efficient way of
   17855      loading consecutive registers from memory is to do them one at a
   17856      time.
   17857 
   17858      On some machines, there are restrictions as to which consecutive
   17859      registers can be stored into memory, such as particular starting or
   17860      ending register numbers or only a range of valid counts.  For those
   17861      machines, use a `define_expand' (*note Expander Definitions::) and
   17862      make the pattern fail if the restrictions are not met.
   17863 
   17864      Write the generated insn as a `parallel' with elements being a
   17865      `set' of one register from the appropriate memory location (you may
   17866      also need `use' or `clobber' elements).  Use a `match_parallel'
   17867      (*note RTL Template::) to recognize the insn.  See `rs6000.md' for
   17868      examples of the use of this insn pattern.
   17869 
   17870 `store_multiple'
   17871      Similar to `load_multiple', but store several consecutive registers
   17872      into consecutive memory locations.  Operand 0 is the first of the
   17873      consecutive memory locations, operand 1 is the first register, and
   17874      operand 2 is a constant: the number of consecutive registers.
   17875 
   17876 `vec_setM'
   17877      Set given field in the vector value.  Operand 0 is the vector to
   17878      modify, operand 1 is new value of field and operand 2 specify the
   17879      field index.
   17880 
   17881 `vec_extractM'
   17882      Extract given field from the vector value.  Operand 1 is the
   17883      vector, operand 2 specify field index and operand 0 place to store
   17884      value into.
   17885 
   17886 `vec_extract_evenM'
   17887      Extract even elements from the input vectors (operand 1 and
   17888      operand 2).  The even elements of operand 2 are concatenated to
   17889      the even elements of operand 1 in their original order. The result
   17890      is stored in operand 0.  The output and input vectors should have
   17891      the same modes.
   17892 
   17893 `vec_extract_oddM'
   17894      Extract odd elements from the input vectors (operand 1 and operand
   17895      2).  The odd elements of operand 2 are concatenated to the odd
   17896      elements of operand 1 in their original order. The result is
   17897      stored in operand 0.  The output and input vectors should have the
   17898      same modes.
   17899 
   17900 `vec_interleave_highM'
   17901      Merge high elements of the two input vectors into the output
   17902      vector. The output and input vectors should have the same modes
   17903      (`N' elements). The high `N/2' elements of the first input vector
   17904      are interleaved with the high `N/2' elements of the second input
   17905      vector.
   17906 
   17907 `vec_interleave_lowM'
   17908      Merge low elements of the two input vectors into the output
   17909      vector. The output and input vectors should have the same modes
   17910      (`N' elements). The low `N/2' elements of the first input vector
   17911      are interleaved with the low `N/2' elements of the second input
   17912      vector.
   17913 
   17914 `vec_initM'
   17915      Initialize the vector to given values.  Operand 0 is the vector to
   17916      initialize and operand 1 is parallel containing values for
   17917      individual fields.
   17918 
   17919 `pushM1'
   17920      Output a push instruction.  Operand 0 is value to push.  Used only
   17921      when `PUSH_ROUNDING' is defined.  For historical reason, this
   17922      pattern may be missing and in such case an `mov' expander is used
   17923      instead, with a `MEM' expression forming the push operation.  The
   17924      `mov' expander method is deprecated.
   17925 
   17926 `addM3'
   17927      Add operand 2 and operand 1, storing the result in operand 0.  All
   17928      operands must have mode M.  This can be used even on two-address
   17929      machines, by means of constraints requiring operands 1 and 0 to be
   17930      the same location.
   17931 
   17932 `ssaddM3', `usaddM3'
   17933 
   17934 `subM3', `sssubM3', `ussubM3'
   17935 
   17936 `mulM3', `ssmulM3', `usmulM3'
   17937 `divM3', `ssdivM3'
   17938 `udivM3', `usdivM3'
   17939 `modM3', `umodM3'
   17940 `uminM3', `umaxM3'
   17941 `andM3', `iorM3', `xorM3'
   17942      Similar, for other arithmetic operations.
   17943 
   17944 `sminM3', `smaxM3'
   17945      Signed minimum and maximum operations.  When used with floating
   17946      point, if both operands are zeros, or if either operand is `NaN',
   17947      then it is unspecified which of the two operands is returned as
   17948      the result.
   17949 
   17950 `reduc_smin_M', `reduc_smax_M'
   17951      Find the signed minimum/maximum of the elements of a vector. The
   17952      vector is operand 1, and the scalar result is stored in the least
   17953      significant bits of operand 0 (also a vector). The output and
   17954      input vector should have the same modes.
   17955 
   17956 `reduc_umin_M', `reduc_umax_M'
   17957      Find the unsigned minimum/maximum of the elements of a vector. The
   17958      vector is operand 1, and the scalar result is stored in the least
   17959      significant bits of operand 0 (also a vector). The output and
   17960      input vector should have the same modes.
   17961 
   17962 `reduc_splus_M'
   17963      Compute the sum of the signed elements of a vector. The vector is
   17964      operand 1, and the scalar result is stored in the least
   17965      significant bits of operand 0 (also a vector). The output and
   17966      input vector should have the same modes.
   17967 
   17968 `reduc_uplus_M'
   17969      Compute the sum of the unsigned elements of a vector. The vector
   17970      is operand 1, and the scalar result is stored in the least
   17971      significant bits of operand 0 (also a vector). The output and
   17972      input vector should have the same modes.
   17973 
   17974 `sdot_prodM'
   17975 
   17976 `udot_prodM'
   17977      Compute the sum of the products of two signed/unsigned elements.
   17978      Operand 1 and operand 2 are of the same mode. Their product, which
   17979      is of a wider mode, is computed and added to operand 3. Operand 3
   17980      is of a mode equal or wider than the mode of the product. The
   17981      result is placed in operand 0, which is of the same mode as
   17982      operand 3.
   17983 
   17984 `ssum_widenM3'
   17985 
   17986 `usum_widenM3'
   17987      Operands 0 and 2 are of the same mode, which is wider than the
   17988      mode of operand 1. Add operand 1 to operand 2 and place the
   17989      widened result in operand 0. (This is used express accumulation of
   17990      elements into an accumulator of a wider mode.)
   17991 
   17992 `vec_shl_M', `vec_shr_M'
   17993      Whole vector left/right shift in bits.  Operand 1 is a vector to
   17994      be shifted.  Operand 2 is an integer shift amount in bits.
   17995      Operand 0 is where the resulting shifted vector is stored.  The
   17996      output and input vectors should have the same modes.
   17997 
   17998 `vec_pack_trunc_M'
   17999      Narrow (demote) and merge the elements of two vectors. Operands 1
   18000      and 2 are vectors of the same mode having N integral or floating
   18001      point elements of size S.  Operand 0 is the resulting vector in
   18002      which 2*N elements of size N/2 are concatenated after narrowing
   18003      them down using truncation.
   18004 
   18005 `vec_pack_ssat_M', `vec_pack_usat_M'
   18006      Narrow (demote) and merge the elements of two vectors.  Operands 1
   18007      and 2 are vectors of the same mode having N integral elements of
   18008      size S.  Operand 0 is the resulting vector in which the elements
   18009      of the two input vectors are concatenated after narrowing them
   18010      down using signed/unsigned saturating arithmetic.
   18011 
   18012 `vec_pack_sfix_trunc_M', `vec_pack_ufix_trunc_M'
   18013      Narrow, convert to signed/unsigned integral type and merge the
   18014      elements of two vectors.  Operands 1 and 2 are vectors of the same
   18015      mode having N floating point elements of size S.  Operand 0 is the
   18016      resulting vector in which 2*N elements of size N/2 are
   18017      concatenated.
   18018 
   18019 `vec_unpacks_hi_M', `vec_unpacks_lo_M'
   18020      Extract and widen (promote) the high/low part of a vector of signed
   18021      integral or floating point elements.  The input vector (operand 1)
   18022      has N elements of size S.  Widen (promote) the high/low elements
   18023      of the vector using signed or floating point extension and place
   18024      the resulting N/2 values of size 2*S in the output vector (operand
   18025      0).
   18026 
   18027 `vec_unpacku_hi_M', `vec_unpacku_lo_M'
   18028      Extract and widen (promote) the high/low part of a vector of
   18029      unsigned integral elements.  The input vector (operand 1) has N
   18030      elements of size S.  Widen (promote) the high/low elements of the
   18031      vector using zero extension and place the resulting N/2 values of
   18032      size 2*S in the output vector (operand 0).
   18033 
   18034 `vec_unpacks_float_hi_M', `vec_unpacks_float_lo_M'
   18035 `vec_unpacku_float_hi_M', `vec_unpacku_float_lo_M'
   18036      Extract, convert to floating point type and widen the high/low
   18037      part of a vector of signed/unsigned integral elements.  The input
   18038      vector (operand 1) has N elements of size S.  Convert the high/low
   18039      elements of the vector using floating point conversion and place
   18040      the resulting N/2 values of size 2*S in the output vector (operand
   18041      0).
   18042 
   18043 `vec_widen_umult_hi_M', `vec_widen_umult_lo_M'
   18044 `vec_widen_smult_hi_M', `vec_widen_smult_lo_M'
   18045      Signed/Unsigned widening multiplication.  The two inputs (operands
   18046      1 and 2) are vectors with N signed/unsigned elements of size S.
   18047      Multiply the high/low elements of the two vectors, and put the N/2
   18048      products of size 2*S in the output vector (operand 0).
   18049 
   18050 `mulhisi3'
   18051      Multiply operands 1 and 2, which have mode `HImode', and store a
   18052      `SImode' product in operand 0.
   18053 
   18054 `mulqihi3', `mulsidi3'
   18055      Similar widening-multiplication instructions of other widths.
   18056 
   18057 `umulqihi3', `umulhisi3', `umulsidi3'
   18058      Similar widening-multiplication instructions that do unsigned
   18059      multiplication.
   18060 
   18061 `usmulqihi3', `usmulhisi3', `usmulsidi3'
   18062      Similar widening-multiplication instructions that interpret the
   18063      first operand as unsigned and the second operand as signed, then
   18064      do a signed multiplication.
   18065 
   18066 `smulM3_highpart'
   18067      Perform a signed multiplication of operands 1 and 2, which have
   18068      mode M, and store the most significant half of the product in
   18069      operand 0.  The least significant half of the product is discarded.
   18070 
   18071 `umulM3_highpart'
   18072      Similar, but the multiplication is unsigned.
   18073 
   18074 `maddMN4'
   18075      Multiply operands 1 and 2, sign-extend them to mode N, add operand
   18076      3, and store the result in operand 0.  Operands 1 and 2 have mode
   18077      M and operands 0 and 3 have mode N.  Both modes must be integer or
   18078      fixed-point modes and N must be twice the size of M.
   18079 
   18080      In other words, `maddMN4' is like `mulMN3' except that it also
   18081      adds operand 3.
   18082 
   18083      These instructions are not allowed to `FAIL'.
   18084 
   18085 `umaddMN4'
   18086      Like `maddMN4', but zero-extend the multiplication operands
   18087      instead of sign-extending them.
   18088 
   18089 `ssmaddMN4'
   18090      Like `maddMN4', but all involved operations must be
   18091      signed-saturating.
   18092 
   18093 `usmaddMN4'
   18094      Like `umaddMN4', but all involved operations must be
   18095      unsigned-saturating.
   18096 
   18097 `msubMN4'
   18098      Multiply operands 1 and 2, sign-extend them to mode N, subtract the
   18099      result from operand 3, and store the result in operand 0.
   18100      Operands 1 and 2 have mode M and operands 0 and 3 have mode N.
   18101      Both modes must be integer or fixed-point modes and N must be twice
   18102      the size of M.
   18103 
   18104      In other words, `msubMN4' is like `mulMN3' except that it also
   18105      subtracts the result from operand 3.
   18106 
   18107      These instructions are not allowed to `FAIL'.
   18108 
   18109 `umsubMN4'
   18110      Like `msubMN4', but zero-extend the multiplication operands
   18111      instead of sign-extending them.
   18112 
   18113 `ssmsubMN4'
   18114      Like `msubMN4', but all involved operations must be
   18115      signed-saturating.
   18116 
   18117 `usmsubMN4'
   18118      Like `umsubMN4', but all involved operations must be
   18119      unsigned-saturating.
   18120 
   18121 `divmodM4'
   18122      Signed division that produces both a quotient and a remainder.
   18123      Operand 1 is divided by operand 2 to produce a quotient stored in
   18124      operand 0 and a remainder stored in operand 3.
   18125 
   18126      For machines with an instruction that produces both a quotient and
   18127      a remainder, provide a pattern for `divmodM4' but do not provide
   18128      patterns for `divM3' and `modM3'.  This allows optimization in the
   18129      relatively common case when both the quotient and remainder are
   18130      computed.
   18131 
   18132      If an instruction that just produces a quotient or just a remainder
   18133      exists and is more efficient than the instruction that produces
   18134      both, write the output routine of `divmodM4' to call
   18135      `find_reg_note' and look for a `REG_UNUSED' note on the quotient
   18136      or remainder and generate the appropriate instruction.
   18137 
   18138 `udivmodM4'
   18139      Similar, but does unsigned division.
   18140 
   18141 `ashlM3', `ssashlM3', `usashlM3'
   18142      Arithmetic-shift operand 1 left by a number of bits specified by
   18143      operand 2, and store the result in operand 0.  Here M is the mode
   18144      of operand 0 and operand 1; operand 2's mode is specified by the
   18145      instruction pattern, and the compiler will convert the operand to
   18146      that mode before generating the instruction.  The meaning of
   18147      out-of-range shift counts can optionally be specified by
   18148      `TARGET_SHIFT_TRUNCATION_MASK'.  *Note
   18149      TARGET_SHIFT_TRUNCATION_MASK::.
   18150 
   18151 `ashrM3', `lshrM3', `rotlM3', `rotrM3'
   18152      Other shift and rotate instructions, analogous to the `ashlM3'
   18153      instructions.
   18154 
   18155 `negM2', `ssnegM2', `usnegM2'
   18156      Negate operand 1 and store the result in operand 0.
   18157 
   18158 `absM2'
   18159      Store the absolute value of operand 1 into operand 0.
   18160 
   18161 `sqrtM2'
   18162      Store the square root of operand 1 into operand 0.
   18163 
   18164      The `sqrt' built-in function of C always uses the mode which
   18165      corresponds to the C data type `double' and the `sqrtf' built-in
   18166      function uses the mode which corresponds to the C data type
   18167      `float'.
   18168 
   18169 `fmodM3'
   18170      Store the remainder of dividing operand 1 by operand 2 into
   18171      operand 0, rounded towards zero to an integer.
   18172 
   18173      The `fmod' built-in function of C always uses the mode which
   18174      corresponds to the C data type `double' and the `fmodf' built-in
   18175      function uses the mode which corresponds to the C data type
   18176      `float'.
   18177 
   18178 `remainderM3'
   18179      Store the remainder of dividing operand 1 by operand 2 into
   18180      operand 0, rounded to the nearest integer.
   18181 
   18182      The `remainder' built-in function of C always uses the mode which
   18183      corresponds to the C data type `double' and the `remainderf'
   18184      built-in function uses the mode which corresponds to the C data
   18185      type `float'.
   18186 
   18187 `cosM2'
   18188      Store the cosine of operand 1 into operand 0.
   18189 
   18190      The `cos' built-in function of C always uses the mode which
   18191      corresponds to the C data type `double' and the `cosf' built-in
   18192      function uses the mode which corresponds to the C data type
   18193      `float'.
   18194 
   18195 `sinM2'
   18196      Store the sine of operand 1 into operand 0.
   18197 
   18198      The `sin' built-in function of C always uses the mode which
   18199      corresponds to the C data type `double' and the `sinf' built-in
   18200      function uses the mode which corresponds to the C data type
   18201      `float'.
   18202 
   18203 `expM2'
   18204      Store the exponential of operand 1 into operand 0.
   18205 
   18206      The `exp' built-in function of C always uses the mode which
   18207      corresponds to the C data type `double' and the `expf' built-in
   18208      function uses the mode which corresponds to the C data type
   18209      `float'.
   18210 
   18211 `logM2'
   18212      Store the natural logarithm of operand 1 into operand 0.
   18213 
   18214      The `log' built-in function of C always uses the mode which
   18215      corresponds to the C data type `double' and the `logf' built-in
   18216      function uses the mode which corresponds to the C data type
   18217      `float'.
   18218 
   18219 `powM3'
   18220      Store the value of operand 1 raised to the exponent operand 2 into
   18221      operand 0.
   18222 
   18223      The `pow' built-in function of C always uses the mode which
   18224      corresponds to the C data type `double' and the `powf' built-in
   18225      function uses the mode which corresponds to the C data type
   18226      `float'.
   18227 
   18228 `atan2M3'
   18229      Store the arc tangent (inverse tangent) of operand 1 divided by
   18230      operand 2 into operand 0, using the signs of both arguments to
   18231      determine the quadrant of the result.
   18232 
   18233      The `atan2' built-in function of C always uses the mode which
   18234      corresponds to the C data type `double' and the `atan2f' built-in
   18235      function uses the mode which corresponds to the C data type
   18236      `float'.
   18237 
   18238 `floorM2'
   18239      Store the largest integral value not greater than argument.
   18240 
   18241      The `floor' built-in function of C always uses the mode which
   18242      corresponds to the C data type `double' and the `floorf' built-in
   18243      function uses the mode which corresponds to the C data type
   18244      `float'.
   18245 
   18246 `btruncM2'
   18247      Store the argument rounded to integer towards zero.
   18248 
   18249      The `trunc' built-in function of C always uses the mode which
   18250      corresponds to the C data type `double' and the `truncf' built-in
   18251      function uses the mode which corresponds to the C data type
   18252      `float'.
   18253 
   18254 `roundM2'
   18255      Store the argument rounded to integer away from zero.
   18256 
   18257      The `round' built-in function of C always uses the mode which
   18258      corresponds to the C data type `double' and the `roundf' built-in
   18259      function uses the mode which corresponds to the C data type
   18260      `float'.
   18261 
   18262 `ceilM2'
   18263      Store the argument rounded to integer away from zero.
   18264 
   18265      The `ceil' built-in function of C always uses the mode which
   18266      corresponds to the C data type `double' and the `ceilf' built-in
   18267      function uses the mode which corresponds to the C data type
   18268      `float'.
   18269 
   18270 `nearbyintM2'
   18271      Store the argument rounded according to the default rounding mode
   18272 
   18273      The `nearbyint' built-in function of C always uses the mode which
   18274      corresponds to the C data type `double' and the `nearbyintf'
   18275      built-in function uses the mode which corresponds to the C data
   18276      type `float'.
   18277 
   18278 `rintM2'
   18279      Store the argument rounded according to the default rounding mode
   18280      and raise the inexact exception when the result differs in value
   18281      from the argument
   18282 
   18283      The `rint' built-in function of C always uses the mode which
   18284      corresponds to the C data type `double' and the `rintf' built-in
   18285      function uses the mode which corresponds to the C data type
   18286      `float'.
   18287 
   18288 `lrintMN2'
   18289      Convert operand 1 (valid for floating point mode M) to fixed point
   18290      mode N as a signed number according to the current rounding mode
   18291      and store in operand 0 (which has mode N).
   18292 
   18293 `lroundM2'
   18294      Convert operand 1 (valid for floating point mode M) to fixed point
   18295      mode N as a signed number rounding to nearest and away from zero
   18296      and store in operand 0 (which has mode N).
   18297 
   18298 `lfloorM2'
   18299      Convert operand 1 (valid for floating point mode M) to fixed point
   18300      mode N as a signed number rounding down and store in operand 0
   18301      (which has mode N).
   18302 
   18303 `lceilM2'
   18304      Convert operand 1 (valid for floating point mode M) to fixed point
   18305      mode N as a signed number rounding up and store in operand 0
   18306      (which has mode N).
   18307 
   18308 `copysignM3'
   18309      Store a value with the magnitude of operand 1 and the sign of
   18310      operand 2 into operand 0.
   18311 
   18312      The `copysign' built-in function of C always uses the mode which
   18313      corresponds to the C data type `double' and the `copysignf'
   18314      built-in function uses the mode which corresponds to the C data
   18315      type `float'.
   18316 
   18317 `ffsM2'
   18318      Store into operand 0 one plus the index of the least significant
   18319      1-bit of operand 1.  If operand 1 is zero, store zero.  M is the
   18320      mode of operand 0; operand 1's mode is specified by the instruction
   18321      pattern, and the compiler will convert the operand to that mode
   18322      before generating the instruction.
   18323 
   18324      The `ffs' built-in function of C always uses the mode which
   18325      corresponds to the C data type `int'.
   18326 
   18327 `clzM2'
   18328      Store into operand 0 the number of leading 0-bits in X, starting
   18329      at the most significant bit position.  If X is 0, the
   18330      `CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
   18331      result is undefined or has a useful value.  M is the mode of
   18332      operand 0; operand 1's mode is specified by the instruction
   18333      pattern, and the compiler will convert the operand to that mode
   18334      before generating the instruction.
   18335 
   18336 `ctzM2'
   18337      Store into operand 0 the number of trailing 0-bits in X, starting
   18338      at the least significant bit position.  If X is 0, the
   18339      `CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
   18340      result is undefined or has a useful value.  M is the mode of
   18341      operand 0; operand 1's mode is specified by the instruction
   18342      pattern, and the compiler will convert the operand to that mode
   18343      before generating the instruction.
   18344 
   18345 `popcountM2'
   18346      Store into operand 0 the number of 1-bits in X.  M is the mode of
   18347      operand 0; operand 1's mode is specified by the instruction
   18348      pattern, and the compiler will convert the operand to that mode
   18349      before generating the instruction.
   18350 
   18351 `parityM2'
   18352      Store into operand 0 the parity of X, i.e. the number of 1-bits in
   18353      X modulo 2.  M is the mode of operand 0; operand 1's mode is
   18354      specified by the instruction pattern, and the compiler will convert
   18355      the operand to that mode before generating the instruction.
   18356 
   18357 `one_cmplM2'
   18358      Store the bitwise-complement of operand 1 into operand 0.
   18359 
   18360 `cmpM'
   18361      Compare operand 0 and operand 1, and set the condition codes.  The
   18362      RTL pattern should look like this:
   18363 
   18364           (set (cc0) (compare (match_operand:M 0 ...)
   18365                               (match_operand:M 1 ...)))
   18366 
   18367 `tstM'
   18368      Compare operand 0 against zero, and set the condition codes.  The
   18369      RTL pattern should look like this:
   18370 
   18371           (set (cc0) (match_operand:M 0 ...))
   18372 
   18373      `tstM' patterns should not be defined for machines that do not use
   18374      `(cc0)'.  Doing so would confuse the optimizer since it would no
   18375      longer be clear which `set' operations were comparisons.  The
   18376      `cmpM' patterns should be used instead.
   18377 
   18378 `movmemM'
   18379      Block move instruction.  The destination and source blocks of
   18380      memory are the first two operands, and both are `mem:BLK's with an
   18381      address in mode `Pmode'.
   18382 
   18383      The number of bytes to move is the third operand, in mode M.
   18384      Usually, you specify `word_mode' for M.  However, if you can
   18385      generate better code knowing the range of valid lengths is smaller
   18386      than those representable in a full word, you should provide a
   18387      pattern with a mode corresponding to the range of values you can
   18388      handle efficiently (e.g., `QImode' for values in the range 0-127;
   18389      note we avoid numbers that appear negative) and also a pattern
   18390      with `word_mode'.
   18391 
   18392      The fourth operand is the known shared alignment of the source and
   18393      destination, in the form of a `const_int' rtx.  Thus, if the
   18394      compiler knows that both source and destination are word-aligned,
   18395      it may provide the value 4 for this operand.
   18396 
   18397      Optional operands 5 and 6 specify expected alignment and size of
   18398      block respectively.  The expected alignment differs from alignment
   18399      in operand 4 in a way that the blocks are not required to be
   18400      aligned according to it in all cases. Expected size, when unknown,
   18401      is set to `(const_int -1)'.
   18402 
   18403      Descriptions of multiple `movmemM' patterns can only be beneficial
   18404      if the patterns for smaller modes have fewer restrictions on their
   18405      first, second and fourth operands.  Note that the mode M in
   18406      `movmemM' does not impose any restriction on the mode of
   18407      individually moved data units in the block.
   18408 
   18409      These patterns need not give special consideration to the
   18410      possibility that the source and destination strings might overlap.
   18411 
   18412 `movstr'
   18413      String copy instruction, with `stpcpy' semantics.  Operand 0 is an
   18414      output operand in mode `Pmode'.  The addresses of the destination
   18415      and source strings are operands 1 and 2, and both are `mem:BLK's
   18416      with addresses in mode `Pmode'.  The execution of the expansion of
   18417      this pattern should store in operand 0 the address in which the
   18418      `NUL' terminator was stored in the destination string.
   18419 
   18420 `setmemM'
   18421      Block set instruction.  The destination string is the first
   18422      operand, given as a `mem:BLK' whose address is in mode `Pmode'.
   18423      The number of bytes to set is the second operand, in mode M.  The
   18424      value to initialize the memory with is the third operand. Targets
   18425      that only support the clearing of memory should reject any value
   18426      that is not the constant 0.  See `movmemM' for a discussion of the
   18427      choice of mode.
   18428 
   18429      The fourth operand is the known alignment of the destination, in
   18430      the form of a `const_int' rtx.  Thus, if the compiler knows that
   18431      the destination is word-aligned, it may provide the value 4 for
   18432      this operand.
   18433 
   18434      Optional operands 5 and 6 specify expected alignment and size of
   18435      block respectively.  The expected alignment differs from alignment
   18436      in operand 4 in a way that the blocks are not required to be
   18437      aligned according to it in all cases. Expected size, when unknown,
   18438      is set to `(const_int -1)'.
   18439 
   18440      The use for multiple `setmemM' is as for `movmemM'.
   18441 
   18442 `cmpstrnM'
   18443      String compare instruction, with five operands.  Operand 0 is the
   18444      output; it has mode M.  The remaining four operands are like the
   18445      operands of `movmemM'.  The two memory blocks specified are
   18446      compared byte by byte in lexicographic order starting at the
   18447      beginning of each string.  The instruction is not allowed to
   18448      prefetch more than one byte at a time since either string may end
   18449      in the first byte and reading past that may access an invalid page
   18450      or segment and cause a fault.  The effect of the instruction is to
   18451      store a value in operand 0 whose sign indicates the result of the
   18452      comparison.
   18453 
   18454 `cmpstrM'
   18455      String compare instruction, without known maximum length.  Operand
   18456      0 is the output; it has mode M.  The second and third operand are
   18457      the blocks of memory to be compared; both are `mem:BLK' with an
   18458      address in mode `Pmode'.
   18459 
   18460      The fourth operand is the known shared alignment of the source and
   18461      destination, in the form of a `const_int' rtx.  Thus, if the
   18462      compiler knows that both source and destination are word-aligned,
   18463      it may provide the value 4 for this operand.
   18464 
   18465      The two memory blocks specified are compared byte by byte in
   18466      lexicographic order starting at the beginning of each string.  The
   18467      instruction is not allowed to prefetch more than one byte at a
   18468      time since either string may end in the first byte and reading
   18469      past that may access an invalid page or segment and cause a fault.
   18470      The effect of the instruction is to store a value in operand 0
   18471      whose sign indicates the result of the comparison.
   18472 
   18473 `cmpmemM'
   18474      Block compare instruction, with five operands like the operands of
   18475      `cmpstrM'.  The two memory blocks specified are compared byte by
   18476      byte in lexicographic order starting at the beginning of each
   18477      block.  Unlike `cmpstrM' the instruction can prefetch any bytes in
   18478      the two memory blocks.  The effect of the instruction is to store
   18479      a value in operand 0 whose sign indicates the result of the
   18480      comparison.
   18481 
   18482 `strlenM'
   18483      Compute the length of a string, with three operands.  Operand 0 is
   18484      the result (of mode M), operand 1 is a `mem' referring to the
   18485      first character of the string, operand 2 is the character to
   18486      search for (normally zero), and operand 3 is a constant describing
   18487      the known alignment of the beginning of the string.
   18488 
   18489 `floatMN2'
   18490      Convert signed integer operand 1 (valid for fixed point mode M) to
   18491      floating point mode N and store in operand 0 (which has mode N).
   18492 
   18493 `floatunsMN2'
   18494      Convert unsigned integer operand 1 (valid for fixed point mode M)
   18495      to floating point mode N and store in operand 0 (which has mode N).
   18496 
   18497 `fixMN2'
   18498      Convert operand 1 (valid for floating point mode M) to fixed point
   18499      mode N as a signed number and store in operand 0 (which has mode
   18500      N).  This instruction's result is defined only when the value of
   18501      operand 1 is an integer.
   18502 
   18503      If the machine description defines this pattern, it also needs to
   18504      define the `ftrunc' pattern.
   18505 
   18506 `fixunsMN2'
   18507      Convert operand 1 (valid for floating point mode M) to fixed point
   18508      mode N as an unsigned number and store in operand 0 (which has
   18509      mode N).  This instruction's result is defined only when the value
   18510      of operand 1 is an integer.
   18511 
   18512 `ftruncM2'
   18513      Convert operand 1 (valid for floating point mode M) to an integer
   18514      value, still represented in floating point mode M, and store it in
   18515      operand 0 (valid for floating point mode M).
   18516 
   18517 `fix_truncMN2'
   18518      Like `fixMN2' but works for any floating point value of mode M by
   18519      converting the value to an integer.
   18520 
   18521 `fixuns_truncMN2'
   18522      Like `fixunsMN2' but works for any floating point value of mode M
   18523      by converting the value to an integer.
   18524 
   18525 `truncMN2'
   18526      Truncate operand 1 (valid for mode M) to mode N and store in
   18527      operand 0 (which has mode N).  Both modes must be fixed point or
   18528      both floating point.
   18529 
   18530 `extendMN2'
   18531      Sign-extend operand 1 (valid for mode M) to mode N and store in
   18532      operand 0 (which has mode N).  Both modes must be fixed point or
   18533      both floating point.
   18534 
   18535 `zero_extendMN2'
   18536      Zero-extend operand 1 (valid for mode M) to mode N and store in
   18537      operand 0 (which has mode N).  Both modes must be fixed point.
   18538 
   18539 `fractMN2'
   18540      Convert operand 1 of mode M to mode N and store in operand 0
   18541      (which has mode N).  Mode M and mode N could be fixed-point to
   18542      fixed-point, signed integer to fixed-point, fixed-point to signed
   18543      integer, floating-point to fixed-point, or fixed-point to
   18544      floating-point.  When overflows or underflows happen, the results
   18545      are undefined.
   18546 
   18547 `satfractMN2'
   18548      Convert operand 1 of mode M to mode N and store in operand 0
   18549      (which has mode N).  Mode M and mode N could be fixed-point to
   18550      fixed-point, signed integer to fixed-point, or floating-point to
   18551      fixed-point.  When overflows or underflows happen, the instruction
   18552      saturates the results to the maximum or the minimum.
   18553 
   18554 `fractunsMN2'
   18555      Convert operand 1 of mode M to mode N and store in operand 0
   18556      (which has mode N).  Mode M and mode N could be unsigned integer
   18557      to fixed-point, or fixed-point to unsigned integer.  When
   18558      overflows or underflows happen, the results are undefined.
   18559 
   18560 `satfractunsMN2'
   18561      Convert unsigned integer operand 1 of mode M to fixed-point mode N
   18562      and store in operand 0 (which has mode N).  When overflows or
   18563      underflows happen, the instruction saturates the results to the
   18564      maximum or the minimum.
   18565 
   18566 `extv'
   18567      Extract a bit-field from operand 1 (a register or memory operand),
   18568      where operand 2 specifies the width in bits and operand 3 the
   18569      starting bit, and store it in operand 0.  Operand 0 must have mode
   18570      `word_mode'.  Operand 1 may have mode `byte_mode' or `word_mode';
   18571      often `word_mode' is allowed only for registers.  Operands 2 and 3
   18572      must be valid for `word_mode'.
   18573 
   18574      The RTL generation pass generates this instruction only with
   18575      constants for operands 2 and 3 and the constant is never zero for
   18576      operand 2.
   18577 
   18578      The bit-field value is sign-extended to a full word integer before
   18579      it is stored in operand 0.
   18580 
   18581 `extzv'
   18582      Like `extv' except that the bit-field value is zero-extended.
   18583 
   18584 `insv'
   18585      Store operand 3 (which must be valid for `word_mode') into a
   18586      bit-field in operand 0, where operand 1 specifies the width in
   18587      bits and operand 2 the starting bit.  Operand 0 may have mode
   18588      `byte_mode' or `word_mode'; often `word_mode' is allowed only for
   18589      registers.  Operands 1 and 2 must be valid for `word_mode'.
   18590 
   18591      The RTL generation pass generates this instruction only with
   18592      constants for operands 1 and 2 and the constant is never zero for
   18593      operand 1.
   18594 
   18595 `movMODEcc'
   18596      Conditionally move operand 2 or operand 3 into operand 0 according
   18597      to the comparison in operand 1.  If the comparison is true,
   18598      operand 2 is moved into operand 0, otherwise operand 3 is moved.
   18599 
   18600      The mode of the operands being compared need not be the same as
   18601      the operands being moved.  Some machines, sparc64 for example,
   18602      have instructions that conditionally move an integer value based
   18603      on the floating point condition codes and vice versa.
   18604 
   18605      If the machine does not have conditional move instructions, do not
   18606      define these patterns.
   18607 
   18608 `addMODEcc'
   18609      Similar to `movMODEcc' but for conditional addition.  Conditionally
   18610      move operand 2 or (operands 2 + operand 3) into operand 0
   18611      according to the comparison in operand 1.  If the comparison is
   18612      true, operand 2 is moved into operand 0, otherwise (operand 2 +
   18613      operand 3) is moved.
   18614 
   18615 `sCOND'
   18616      Store zero or nonzero in the operand according to the condition
   18617      codes.  Value stored is nonzero iff the condition COND is true.
   18618      COND is the name of a comparison operation expression code, such
   18619      as `eq', `lt' or `leu'.
   18620 
   18621      You specify the mode that the operand must have when you write the
   18622      `match_operand' expression.  The compiler automatically sees which
   18623      mode you have used and supplies an operand of that mode.
   18624 
   18625      The value stored for a true condition must have 1 as its low bit,
   18626      or else must be negative.  Otherwise the instruction is not
   18627      suitable and you should omit it from the machine description.  You
   18628      describe to the compiler exactly which value is stored by defining
   18629      the macro `STORE_FLAG_VALUE' (*note Misc::).  If a description
   18630      cannot be found that can be used for all the `sCOND' patterns, you
   18631      should omit those operations from the machine description.
   18632 
   18633      These operations may fail, but should do so only in relatively
   18634      uncommon cases; if they would fail for common cases involving
   18635      integer comparisons, it is best to omit these patterns.
   18636 
   18637      If these operations are omitted, the compiler will usually
   18638      generate code that copies the constant one to the target and
   18639      branches around an assignment of zero to the target.  If this code
   18640      is more efficient than the potential instructions used for the
   18641      `sCOND' pattern followed by those required to convert the result
   18642      into a 1 or a zero in `SImode', you should omit the `sCOND'
   18643      operations from the machine description.
   18644 
   18645 `bCOND'
   18646      Conditional branch instruction.  Operand 0 is a `label_ref' that
   18647      refers to the label to jump to.  Jump if the condition codes meet
   18648      condition COND.
   18649 
   18650      Some machines do not follow the model assumed here where a
   18651      comparison instruction is followed by a conditional branch
   18652      instruction.  In that case, the `cmpM' (and `tstM') patterns should
   18653      simply store the operands away and generate all the required insns
   18654      in a `define_expand' (*note Expander Definitions::) for the
   18655      conditional branch operations.  All calls to expand `bCOND'
   18656      patterns are immediately preceded by calls to expand either a
   18657      `cmpM' pattern or a `tstM' pattern.
   18658 
   18659      Machines that use a pseudo register for the condition code value,
   18660      or where the mode used for the comparison depends on the condition
   18661      being tested, should also use the above mechanism.  *Note Jump
   18662      Patterns::.
   18663 
   18664      The above discussion also applies to the `movMODEcc' and `sCOND'
   18665      patterns.
   18666 
   18667 `cbranchMODE4'
   18668      Conditional branch instruction combined with a compare instruction.
   18669      Operand 0 is a comparison operator.  Operand 1 and operand 2 are
   18670      the first and second operands of the comparison, respectively.
   18671      Operand 3 is a `label_ref' that refers to the label to jump to.
   18672 
   18673 `jump'
   18674      A jump inside a function; an unconditional branch.  Operand 0 is
   18675      the `label_ref' of the label to jump to.  This pattern name is
   18676      mandatory on all machines.
   18677 
   18678 `call'
   18679      Subroutine call instruction returning no value.  Operand 0 is the
   18680      function to call; operand 1 is the number of bytes of arguments
   18681      pushed as a `const_int'; operand 2 is the number of registers used
   18682      as operands.
   18683 
   18684      On most machines, operand 2 is not actually stored into the RTL
   18685      pattern.  It is supplied for the sake of some RISC machines which
   18686      need to put this information into the assembler code; they can put
   18687      it in the RTL instead of operand 1.
   18688 
   18689      Operand 0 should be a `mem' RTX whose address is the address of the
   18690      function.  Note, however, that this address can be a `symbol_ref'
   18691      expression even if it would not be a legitimate memory address on
   18692      the target machine.  If it is also not a valid argument for a call
   18693      instruction, the pattern for this operation should be a
   18694      `define_expand' (*note Expander Definitions::) that places the
   18695      address into a register and uses that register in the call
   18696      instruction.
   18697 
   18698 `call_value'
   18699      Subroutine call instruction returning a value.  Operand 0 is the
   18700      hard register in which the value is returned.  There are three more
   18701      operands, the same as the three operands of the `call' instruction
   18702      (but with numbers increased by one).
   18703 
   18704      Subroutines that return `BLKmode' objects use the `call' insn.
   18705 
   18706 `call_pop', `call_value_pop'
   18707      Similar to `call' and `call_value', except used if defined and if
   18708      `RETURN_POPS_ARGS' is nonzero.  They should emit a `parallel' that
   18709      contains both the function call and a `set' to indicate the
   18710      adjustment made to the frame pointer.
   18711 
   18712      For machines where `RETURN_POPS_ARGS' can be nonzero, the use of
   18713      these patterns increases the number of functions for which the
   18714      frame pointer can be eliminated, if desired.
   18715 
   18716 `untyped_call'
   18717      Subroutine call instruction returning a value of any type.
   18718      Operand 0 is the function to call; operand 1 is a memory location
   18719      where the result of calling the function is to be stored; operand
   18720      2 is a `parallel' expression where each element is a `set'
   18721      expression that indicates the saving of a function return value
   18722      into the result block.
   18723 
   18724      This instruction pattern should be defined to support
   18725      `__builtin_apply' on machines where special instructions are needed
   18726      to call a subroutine with arbitrary arguments or to save the value
   18727      returned.  This instruction pattern is required on machines that
   18728      have multiple registers that can hold a return value (i.e.
   18729      `FUNCTION_VALUE_REGNO_P' is true for more than one register).
   18730 
   18731 `return'
   18732      Subroutine return instruction.  This instruction pattern name
   18733      should be defined only if a single instruction can do all the work
   18734      of returning from a function.
   18735 
   18736      Like the `movM' patterns, this pattern is also used after the RTL
   18737      generation phase.  In this case it is to support machines where
   18738      multiple instructions are usually needed to return from a
   18739      function, but some class of functions only requires one
   18740      instruction to implement a return.  Normally, the applicable
   18741      functions are those which do not need to save any registers or
   18742      allocate stack space.
   18743 
   18744      For such machines, the condition specified in this pattern should
   18745      only be true when `reload_completed' is nonzero and the function's
   18746      epilogue would only be a single instruction.  For machines with
   18747      register windows, the routine `leaf_function_p' may be used to
   18748      determine if a register window push is required.
   18749 
   18750      Machines that have conditional return instructions should define
   18751      patterns such as
   18752 
   18753           (define_insn ""
   18754             [(set (pc)
   18755                   (if_then_else (match_operator
   18756                                    0 "comparison_operator"
   18757                                    [(cc0) (const_int 0)])
   18758                                 (return)
   18759                                 (pc)))]
   18760             "CONDITION"
   18761             "...")
   18762 
   18763      where CONDITION would normally be the same condition specified on
   18764      the named `return' pattern.
   18765 
   18766 `untyped_return'
   18767      Untyped subroutine return instruction.  This instruction pattern
   18768      should be defined to support `__builtin_return' on machines where
   18769      special instructions are needed to return a value of any type.
   18770 
   18771      Operand 0 is a memory location where the result of calling a
   18772      function with `__builtin_apply' is stored; operand 1 is a
   18773      `parallel' expression where each element is a `set' expression
   18774      that indicates the restoring of a function return value from the
   18775      result block.
   18776 
   18777 `nop'
   18778      No-op instruction.  This instruction pattern name should always be
   18779      defined to output a no-op in assembler code.  `(const_int 0)' will
   18780      do as an RTL pattern.
   18781 
   18782 `indirect_jump'
   18783      An instruction to jump to an address which is operand zero.  This
   18784      pattern name is mandatory on all machines.
   18785 
   18786 `casesi'
   18787      Instruction to jump through a dispatch table, including bounds
   18788      checking.  This instruction takes five operands:
   18789 
   18790        1. The index to dispatch on, which has mode `SImode'.
   18791 
   18792        2. The lower bound for indices in the table, an integer constant.
   18793 
   18794        3. The total range of indices in the table--the largest index
   18795           minus the smallest one (both inclusive).
   18796 
   18797        4. A label that precedes the table itself.
   18798 
   18799        5. A label to jump to if the index has a value outside the
   18800           bounds.
   18801 
   18802      The table is a `addr_vec' or `addr_diff_vec' inside of a
   18803      `jump_insn'.  The number of elements in the table is one plus the
   18804      difference between the upper bound and the lower bound.
   18805 
   18806 `tablejump'
   18807      Instruction to jump to a variable address.  This is a low-level
   18808      capability which can be used to implement a dispatch table when
   18809      there is no `casesi' pattern.
   18810 
   18811      This pattern requires two operands: the address or offset, and a
   18812      label which should immediately precede the jump table.  If the
   18813      macro `CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then
   18814      the first operand is an offset which counts from the address of
   18815      the table; otherwise, it is an absolute address to jump to.  In
   18816      either case, the first operand has mode `Pmode'.
   18817 
   18818      The `tablejump' insn is always the last insn before the jump table
   18819      it uses.  Its assembler code normally has no need to use the
   18820      second operand, but you should incorporate it in the RTL pattern so
   18821      that the jump optimizer will not delete the table as unreachable
   18822      code.
   18823 
   18824 `decrement_and_branch_until_zero'
   18825      Conditional branch instruction that decrements a register and
   18826      jumps if the register is nonzero.  Operand 0 is the register to
   18827      decrement and test; operand 1 is the label to jump to if the
   18828      register is nonzero.  *Note Looping Patterns::.
   18829 
   18830      This optional instruction pattern is only used by the combiner,
   18831      typically for loops reversed by the loop optimizer when strength
   18832      reduction is enabled.
   18833 
   18834 `doloop_end'
   18835      Conditional branch instruction that decrements a register and
   18836      jumps if the register is nonzero.  This instruction takes five
   18837      operands: Operand 0 is the register to decrement and test; operand
   18838      1 is the number of loop iterations as a `const_int' or
   18839      `const0_rtx' if this cannot be determined until run-time; operand
   18840      2 is the actual or estimated maximum number of iterations as a
   18841      `const_int'; operand 3 is the number of enclosed loops as a
   18842      `const_int' (an innermost loop has a value of 1); operand 4 is the
   18843      label to jump to if the register is nonzero.  *Note Looping
   18844      Patterns::.
   18845 
   18846      This optional instruction pattern should be defined for machines
   18847      with low-overhead looping instructions as the loop optimizer will
   18848      try to modify suitable loops to utilize it.  If nested
   18849      low-overhead looping is not supported, use a `define_expand'
   18850      (*note Expander Definitions::) and make the pattern fail if
   18851      operand 3 is not `const1_rtx'.  Similarly, if the actual or
   18852      estimated maximum number of iterations is too large for this
   18853      instruction, make it fail.
   18854 
   18855 `doloop_begin'
   18856      Companion instruction to `doloop_end' required for machines that
   18857      need to perform some initialization, such as loading special
   18858      registers used by a low-overhead looping instruction.  If
   18859      initialization insns do not always need to be emitted, use a
   18860      `define_expand' (*note Expander Definitions::) and make it fail.
   18861 
   18862 `canonicalize_funcptr_for_compare'
   18863      Canonicalize the function pointer in operand 1 and store the result
   18864      into operand 0.
   18865 
   18866      Operand 0 is always a `reg' and has mode `Pmode'; operand 1 may be
   18867      a `reg', `mem', `symbol_ref', `const_int', etc and also has mode
   18868      `Pmode'.
   18869 
   18870      Canonicalization of a function pointer usually involves computing
   18871      the address of the function which would be called if the function
   18872      pointer were used in an indirect call.
   18873 
   18874      Only define this pattern if function pointers on the target machine
   18875      can have different values but still call the same function when
   18876      used in an indirect call.
   18877 
   18878 `save_stack_block'
   18879 `save_stack_function'
   18880 `save_stack_nonlocal'
   18881 `restore_stack_block'
   18882 `restore_stack_function'
   18883 `restore_stack_nonlocal'
   18884      Most machines save and restore the stack pointer by copying it to
   18885      or from an object of mode `Pmode'.  Do not define these patterns on
   18886      such machines.
   18887 
   18888      Some machines require special handling for stack pointer saves and
   18889      restores.  On those machines, define the patterns corresponding to
   18890      the non-standard cases by using a `define_expand' (*note Expander
   18891      Definitions::) that produces the required insns.  The three types
   18892      of saves and restores are:
   18893 
   18894        1. `save_stack_block' saves the stack pointer at the start of a
   18895           block that allocates a variable-sized object, and
   18896           `restore_stack_block' restores the stack pointer when the
   18897           block is exited.
   18898 
   18899        2. `save_stack_function' and `restore_stack_function' do a
   18900           similar job for the outermost block of a function and are
   18901           used when the function allocates variable-sized objects or
   18902           calls `alloca'.  Only the epilogue uses the restored stack
   18903           pointer, allowing a simpler save or restore sequence on some
   18904           machines.
   18905 
   18906        3. `save_stack_nonlocal' is used in functions that contain labels
   18907           branched to by nested functions.  It saves the stack pointer
   18908           in such a way that the inner function can use
   18909           `restore_stack_nonlocal' to restore the stack pointer.  The
   18910           compiler generates code to restore the frame and argument
   18911           pointer registers, but some machines require saving and
   18912           restoring additional data such as register window information
   18913           or stack backchains.  Place insns in these patterns to save
   18914           and restore any such required data.
   18915 
   18916      When saving the stack pointer, operand 0 is the save area and
   18917      operand 1 is the stack pointer.  The mode used to allocate the
   18918      save area defaults to `Pmode' but you can override that choice by
   18919      defining the `STACK_SAVEAREA_MODE' macro (*note Storage Layout::).
   18920      You must specify an integral mode, or `VOIDmode' if no save area
   18921      is needed for a particular type of save (either because no save is
   18922      needed or because a machine-specific save area can be used).
   18923      Operand 0 is the stack pointer and operand 1 is the save area for
   18924      restore operations.  If `save_stack_block' is defined, operand 0
   18925      must not be `VOIDmode' since these saves can be arbitrarily nested.
   18926 
   18927      A save area is a `mem' that is at a constant offset from
   18928      `virtual_stack_vars_rtx' when the stack pointer is saved for use by
   18929      nonlocal gotos and a `reg' in the other two cases.
   18930 
   18931 `allocate_stack'
   18932      Subtract (or add if `STACK_GROWS_DOWNWARD' is undefined) operand 1
   18933      from the stack pointer to create space for dynamically allocated
   18934      data.
   18935 
   18936      Store the resultant pointer to this space into operand 0.  If you
   18937      are allocating space from the main stack, do this by emitting a
   18938      move insn to copy `virtual_stack_dynamic_rtx' to operand 0.  If
   18939      you are allocating the space elsewhere, generate code to copy the
   18940      location of the space to operand 0.  In the latter case, you must
   18941      ensure this space gets freed when the corresponding space on the
   18942      main stack is free.
   18943 
   18944      Do not define this pattern if all that must be done is the
   18945      subtraction.  Some machines require other operations such as stack
   18946      probes or maintaining the back chain.  Define this pattern to emit
   18947      those operations in addition to updating the stack pointer.
   18948 
   18949 `check_stack'
   18950      If stack checking cannot be done on your system by probing the
   18951      stack with a load or store instruction (*note Stack Checking::),
   18952      define this pattern to perform the needed check and signaling an
   18953      error if the stack has overflowed.  The single operand is the
   18954      location in the stack furthest from the current stack pointer that
   18955      you need to validate.  Normally, on machines where this pattern is
   18956      needed, you would obtain the stack limit from a global or
   18957      thread-specific variable or register.
   18958 
   18959 `nonlocal_goto'
   18960      Emit code to generate a non-local goto, e.g., a jump from one
   18961      function to a label in an outer function.  This pattern has four
   18962      arguments, each representing a value to be used in the jump.  The
   18963      first argument is to be loaded into the frame pointer, the second
   18964      is the address to branch to (code to dispatch to the actual label),
   18965      the third is the address of a location where the stack is saved,
   18966      and the last is the address of the label, to be placed in the
   18967      location for the incoming static chain.
   18968 
   18969      On most machines you need not define this pattern, since GCC will
   18970      already generate the correct code, which is to load the frame
   18971      pointer and static chain, restore the stack (using the
   18972      `restore_stack_nonlocal' pattern, if defined), and jump indirectly
   18973      to the dispatcher.  You need only define this pattern if this code
   18974      will not work on your machine.
   18975 
   18976 `nonlocal_goto_receiver'
   18977      This pattern, if defined, contains code needed at the target of a
   18978      nonlocal goto after the code already generated by GCC.  You will
   18979      not normally need to define this pattern.  A typical reason why
   18980      you might need this pattern is if some value, such as a pointer to
   18981      a global table, must be restored when the frame pointer is
   18982      restored.  Note that a nonlocal goto only occurs within a
   18983      unit-of-translation, so a global table pointer that is shared by
   18984      all functions of a given module need not be restored.  There are
   18985      no arguments.
   18986 
   18987 `exception_receiver'
   18988      This pattern, if defined, contains code needed at the site of an
   18989      exception handler that isn't needed at the site of a nonlocal
   18990      goto.  You will not normally need to define this pattern.  A
   18991      typical reason why you might need this pattern is if some value,
   18992      such as a pointer to a global table, must be restored after
   18993      control flow is branched to the handler of an exception.  There
   18994      are no arguments.
   18995 
   18996 `builtin_setjmp_setup'
   18997      This pattern, if defined, contains additional code needed to
   18998      initialize the `jmp_buf'.  You will not normally need to define
   18999      this pattern.  A typical reason why you might need this pattern is
   19000      if some value, such as a pointer to a global table, must be
   19001      restored.  Though it is preferred that the pointer value be
   19002      recalculated if possible (given the address of a label for
   19003      instance).  The single argument is a pointer to the `jmp_buf'.
   19004      Note that the buffer is five words long and that the first three
   19005      are normally used by the generic mechanism.
   19006 
   19007 `builtin_setjmp_receiver'
   19008      This pattern, if defined, contains code needed at the site of an
   19009      built-in setjmp that isn't needed at the site of a nonlocal goto.
   19010      You will not normally need to define this pattern.  A typical
   19011      reason why you might need this pattern is if some value, such as a
   19012      pointer to a global table, must be restored.  It takes one
   19013      argument, which is the label to which builtin_longjmp transfered
   19014      control; this pattern may be emitted at a small offset from that
   19015      label.
   19016 
   19017 `builtin_longjmp'
   19018      This pattern, if defined, performs the entire action of the
   19019      longjmp.  You will not normally need to define this pattern unless
   19020      you also define `builtin_setjmp_setup'.  The single argument is a
   19021      pointer to the `jmp_buf'.
   19022 
   19023 `eh_return'
   19024      This pattern, if defined, affects the way `__builtin_eh_return',
   19025      and thence the call frame exception handling library routines, are
   19026      built.  It is intended to handle non-trivial actions needed along
   19027      the abnormal return path.
   19028 
   19029      The address of the exception handler to which the function should
   19030      return is passed as operand to this pattern.  It will normally
   19031      need to copied by the pattern to some special register or memory
   19032      location.  If the pattern needs to determine the location of the
   19033      target call frame in order to do so, it may use
   19034      `EH_RETURN_STACKADJ_RTX', if defined; it will have already been
   19035      assigned.
   19036 
   19037      If this pattern is not defined, the default action will be to
   19038      simply copy the return address to `EH_RETURN_HANDLER_RTX'.  Either
   19039      that macro or this pattern needs to be defined if call frame
   19040      exception handling is to be used.
   19041 
   19042 `prologue'
   19043      This pattern, if defined, emits RTL for entry to a function.  The
   19044      function entry is responsible for setting up the stack frame,
   19045      initializing the frame pointer register, saving callee saved
   19046      registers, etc.
   19047 
   19048      Using a prologue pattern is generally preferred over defining
   19049      `TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the
   19050      prologue.
   19051 
   19052      The `prologue' pattern is particularly useful for targets which
   19053      perform instruction scheduling.
   19054 
   19055 `epilogue'
   19056      This pattern emits RTL for exit from a function.  The function
   19057      exit is responsible for deallocating the stack frame, restoring
   19058      callee saved registers and emitting the return instruction.
   19059 
   19060      Using an epilogue pattern is generally preferred over defining
   19061      `TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the
   19062      epilogue.
   19063 
   19064      The `epilogue' pattern is particularly useful for targets which
   19065      perform instruction scheduling or which have delay slots for their
   19066      return instruction.
   19067 
   19068 `sibcall_epilogue'
   19069      This pattern, if defined, emits RTL for exit from a function
   19070      without the final branch back to the calling function.  This
   19071      pattern will be emitted before any sibling call (aka tail call)
   19072      sites.
   19073 
   19074      The `sibcall_epilogue' pattern must not clobber any arguments used
   19075      for parameter passing or any stack slots for arguments passed to
   19076      the current function.
   19077 
   19078 `trap'
   19079      This pattern, if defined, signals an error, typically by causing
   19080      some kind of signal to be raised.  Among other places, it is used
   19081      by the Java front end to signal `invalid array index' exceptions.
   19082 
   19083 `conditional_trap'
   19084      Conditional trap instruction.  Operand 0 is a piece of RTL which
   19085      performs a comparison.  Operand 1 is the trap code, an integer.
   19086 
   19087      A typical `conditional_trap' pattern looks like
   19088 
   19089           (define_insn "conditional_trap"
   19090             [(trap_if (match_operator 0 "trap_operator"
   19091                        [(cc0) (const_int 0)])
   19092                       (match_operand 1 "const_int_operand" "i"))]
   19093             ""
   19094             "...")
   19095 
   19096 `prefetch'
   19097      This pattern, if defined, emits code for a non-faulting data
   19098      prefetch instruction.  Operand 0 is the address of the memory to
   19099      prefetch.  Operand 1 is a constant 1 if the prefetch is preparing
   19100      for a write to the memory address, or a constant 0 otherwise.
   19101      Operand 2 is the expected degree of temporal locality of the data
   19102      and is a value between 0 and 3, inclusive; 0 means that the data
   19103      has no temporal locality, so it need not be left in the cache
   19104      after the access; 3 means that the data has a high degree of
   19105      temporal locality and should be left in all levels of cache
   19106      possible;  1 and 2 mean, respectively, a low or moderate degree of
   19107      temporal locality.
   19108 
   19109      Targets that do not support write prefetches or locality hints can
   19110      ignore the values of operands 1 and 2.
   19111 
   19112 `blockage'
   19113      This pattern defines a pseudo insn that prevents the instruction
   19114      scheduler from moving instructions across the boundary defined by
   19115      the blockage insn.  Normally an UNSPEC_VOLATILE pattern.
   19116 
   19117 `memory_barrier'
   19118      If the target memory model is not fully synchronous, then this
   19119      pattern should be defined to an instruction that orders both loads
   19120      and stores before the instruction with respect to loads and stores
   19121      after the instruction.  This pattern has no operands.
   19122 
   19123 `sync_compare_and_swapMODE'
   19124      This pattern, if defined, emits code for an atomic compare-and-swap
   19125      operation.  Operand 1 is the memory on which the atomic operation
   19126      is performed.  Operand 2 is the "old" value to be compared against
   19127      the current contents of the memory location.  Operand 3 is the
   19128      "new" value to store in the memory if the compare succeeds.
   19129      Operand 0 is the result of the operation; it should contain the
   19130      contents of the memory before the operation.  If the compare
   19131      succeeds, this should obviously be a copy of operand 2.
   19132 
   19133      This pattern must show that both operand 0 and operand 1 are
   19134      modified.
   19135 
   19136      This pattern must issue any memory barrier instructions such that
   19137      all memory operations before the atomic operation occur before the
   19138      atomic operation and all memory operations after the atomic
   19139      operation occur after the atomic operation.
   19140 
   19141 `sync_compare_and_swap_ccMODE'
   19142      This pattern is just like `sync_compare_and_swapMODE', except it
   19143      should act as if compare part of the compare-and-swap were issued
   19144      via `cmpM'.  This comparison will only be used with `EQ' and `NE'
   19145      branches and `setcc' operations.
   19146 
   19147      Some targets do expose the success or failure of the
   19148      compare-and-swap operation via the status flags.  Ideally we
   19149      wouldn't need a separate named pattern in order to take advantage
   19150      of this, but the combine pass does not handle patterns with
   19151      multiple sets, which is required by definition for
   19152      `sync_compare_and_swapMODE'.
   19153 
   19154 `sync_addMODE', `sync_subMODE'
   19155 `sync_iorMODE', `sync_andMODE'
   19156 `sync_xorMODE', `sync_nandMODE'
   19157      These patterns emit code for an atomic operation on memory.
   19158      Operand 0 is the memory on which the atomic operation is performed.
   19159      Operand 1 is the second operand to the binary operator.
   19160 
   19161      The "nand" operation is `~op0 & op1'.
   19162 
   19163      This pattern must issue any memory barrier instructions such that
   19164      all memory operations before the atomic operation occur before the
   19165      atomic operation and all memory operations after the atomic
   19166      operation occur after the atomic operation.
   19167 
   19168      If these patterns are not defined, the operation will be
   19169      constructed from a compare-and-swap operation, if defined.
   19170 
   19171 `sync_old_addMODE', `sync_old_subMODE'
   19172 `sync_old_iorMODE', `sync_old_andMODE'
   19173 `sync_old_xorMODE', `sync_old_nandMODE'
   19174      These patterns are emit code for an atomic operation on memory,
   19175      and return the value that the memory contained before the
   19176      operation.  Operand 0 is the result value, operand 1 is the memory
   19177      on which the atomic operation is performed, and operand 2 is the
   19178      second operand to the binary operator.
   19179 
   19180      This pattern must issue any memory barrier instructions such that
   19181      all memory operations before the atomic operation occur before the
   19182      atomic operation and all memory operations after the atomic
   19183      operation occur after the atomic operation.
   19184 
   19185      If these patterns are not defined, the operation will be
   19186      constructed from a compare-and-swap operation, if defined.
   19187 
   19188 `sync_new_addMODE', `sync_new_subMODE'
   19189 `sync_new_iorMODE', `sync_new_andMODE'
   19190 `sync_new_xorMODE', `sync_new_nandMODE'
   19191      These patterns are like their `sync_old_OP' counterparts, except
   19192      that they return the value that exists in the memory location
   19193      after the operation, rather than before the operation.
   19194 
   19195 `sync_lock_test_and_setMODE'
   19196      This pattern takes two forms, based on the capabilities of the
   19197      target.  In either case, operand 0 is the result of the operand,
   19198      operand 1 is the memory on which the atomic operation is
   19199      performed, and operand 2 is the value to set in the lock.
   19200 
   19201      In the ideal case, this operation is an atomic exchange operation,
   19202      in which the previous value in memory operand is copied into the
   19203      result operand, and the value operand is stored in the memory
   19204      operand.
   19205 
   19206      For less capable targets, any value operand that is not the
   19207      constant 1 should be rejected with `FAIL'.  In this case the
   19208      target may use an atomic test-and-set bit operation.  The result
   19209      operand should contain 1 if the bit was previously set and 0 if
   19210      the bit was previously clear.  The true contents of the memory
   19211      operand are implementation defined.
   19212 
   19213      This pattern must issue any memory barrier instructions such that
   19214      the pattern as a whole acts as an acquire barrier, that is all
   19215      memory operations after the pattern do not occur until the lock is
   19216      acquired.
   19217 
   19218      If this pattern is not defined, the operation will be constructed
   19219      from a compare-and-swap operation, if defined.
   19220 
   19221 `sync_lock_releaseMODE'
   19222      This pattern, if defined, releases a lock set by
   19223      `sync_lock_test_and_setMODE'.  Operand 0 is the memory that
   19224      contains the lock; operand 1 is the value to store in the lock.
   19225 
   19226      If the target doesn't implement full semantics for
   19227      `sync_lock_test_and_setMODE', any value operand which is not the
   19228      constant 0 should be rejected with `FAIL', and the true contents
   19229      of the memory operand are implementation defined.
   19230 
   19231      This pattern must issue any memory barrier instructions such that
   19232      the pattern as a whole acts as a release barrier, that is the lock
   19233      is released only after all previous memory operations have
   19234      completed.
   19235 
   19236      If this pattern is not defined, then a `memory_barrier' pattern
   19237      will be emitted, followed by a store of the value to the memory
   19238      operand.
   19239 
   19240 `stack_protect_set'
   19241      This pattern, if defined, moves a `Pmode' value from the memory in
   19242      operand 1 to the memory in operand 0 without leaving the value in
   19243      a register afterward.  This is to avoid leaking the value some
   19244      place that an attacker might use to rewrite the stack guard slot
   19245      after having clobbered it.
   19246 
   19247      If this pattern is not defined, then a plain move pattern is
   19248      generated.
   19249 
   19250 `stack_protect_test'
   19251      This pattern, if defined, compares a `Pmode' value from the memory
   19252      in operand 1 with the memory in operand 0 without leaving the
   19253      value in a register afterward and branches to operand 2 if the
   19254      values weren't equal.
   19255 
   19256      If this pattern is not defined, then a plain compare pattern and
   19257      conditional branch pattern is used.
   19258 
   19259 `clear_cache'
   19260      This pattern, if defined, flushes the instruction cache for a
   19261      region of memory.  The region is bounded to by the Pmode pointers
   19262      in operand 0 inclusive and operand 1 exclusive.
   19263 
   19264      If this pattern is not defined, a call to the library function
   19265      `__clear_cache' is used.
   19266 
   19267 
   19268 
   19269 File: gccint.info,  Node: Pattern Ordering,  Next: Dependent Patterns,  Prev: Standard Names,  Up: Machine Desc
   19270 
   19271 14.10 When the Order of Patterns Matters
   19272 ========================================
   19273 
   19274 Sometimes an insn can match more than one instruction pattern.  Then the
   19275 pattern that appears first in the machine description is the one used.
   19276 Therefore, more specific patterns (patterns that will match fewer
   19277 things) and faster instructions (those that will produce better code
   19278 when they do match) should usually go first in the description.
   19279 
   19280  In some cases the effect of ordering the patterns can be used to hide
   19281 a pattern when it is not valid.  For example, the 68000 has an
   19282 instruction for converting a fullword to floating point and another for
   19283 converting a byte to floating point.  An instruction converting an
   19284 integer to floating point could match either one.  We put the pattern
   19285 to convert the fullword first to make sure that one will be used rather
   19286 than the other.  (Otherwise a large integer might be generated as a
   19287 single-byte immediate quantity, which would not work.)  Instead of
   19288 using this pattern ordering it would be possible to make the pattern
   19289 for convert-a-byte smart enough to deal properly with any constant
   19290 value.
   19291 
   19292 
   19293 File: gccint.info,  Node: Dependent Patterns,  Next: Jump Patterns,  Prev: Pattern Ordering,  Up: Machine Desc
   19294 
   19295 14.11 Interdependence of Patterns
   19296 =================================
   19297 
   19298 Every machine description must have a named pattern for each of the
   19299 conditional branch names `bCOND'.  The recognition template must always
   19300 have the form
   19301 
   19302      (set (pc)
   19303           (if_then_else (COND (cc0) (const_int 0))
   19304                         (label_ref (match_operand 0 "" ""))
   19305                         (pc)))
   19306 
   19307 In addition, every machine description must have an anonymous pattern
   19308 for each of the possible reverse-conditional branches.  Their templates
   19309 look like
   19310 
   19311      (set (pc)
   19312           (if_then_else (COND (cc0) (const_int 0))
   19313                         (pc)
   19314                         (label_ref (match_operand 0 "" ""))))
   19315 
   19316 They are necessary because jump optimization can turn direct-conditional
   19317 branches into reverse-conditional branches.
   19318 
   19319  It is often convenient to use the `match_operator' construct to reduce
   19320 the number of patterns that must be specified for branches.  For
   19321 example,
   19322 
   19323      (define_insn ""
   19324        [(set (pc)
   19325              (if_then_else (match_operator 0 "comparison_operator"
   19326                                            [(cc0) (const_int 0)])
   19327                            (pc)
   19328                            (label_ref (match_operand 1 "" ""))))]
   19329        "CONDITION"
   19330        "...")
   19331 
   19332  In some cases machines support instructions identical except for the
   19333 machine mode of one or more operands.  For example, there may be
   19334 "sign-extend halfword" and "sign-extend byte" instructions whose
   19335 patterns are
   19336 
   19337      (set (match_operand:SI 0 ...)
   19338           (extend:SI (match_operand:HI 1 ...)))
   19339 
   19340      (set (match_operand:SI 0 ...)
   19341           (extend:SI (match_operand:QI 1 ...)))
   19342 
   19343 Constant integers do not specify a machine mode, so an instruction to
   19344 extend a constant value could match either pattern.  The pattern it
   19345 actually will match is the one that appears first in the file.  For
   19346 correct results, this must be the one for the widest possible mode
   19347 (`HImode', here).  If the pattern matches the `QImode' instruction, the
   19348 results will be incorrect if the constant value does not actually fit
   19349 that mode.
   19350 
   19351  Such instructions to extend constants are rarely generated because
   19352 they are optimized away, but they do occasionally happen in nonoptimized
   19353 compilations.
   19354 
   19355  If a constraint in a pattern allows a constant, the reload pass may
   19356 replace a register with a constant permitted by the constraint in some
   19357 cases.  Similarly for memory references.  Because of this substitution,
   19358 you should not provide separate patterns for increment and decrement
   19359 instructions.  Instead, they should be generated from the same pattern
   19360 that supports register-register add insns by examining the operands and
   19361 generating the appropriate machine instruction.
   19362 
   19363 
   19364 File: gccint.info,  Node: Jump Patterns,  Next: Looping Patterns,  Prev: Dependent Patterns,  Up: Machine Desc
   19365 
   19366 14.12 Defining Jump Instruction Patterns
   19367 ========================================
   19368 
   19369 For most machines, GCC assumes that the machine has a condition code.
   19370 A comparison insn sets the condition code, recording the results of both
   19371 signed and unsigned comparison of the given operands.  A separate branch
   19372 insn tests the condition code and branches or not according its value.
   19373 The branch insns come in distinct signed and unsigned flavors.  Many
   19374 common machines, such as the VAX, the 68000 and the 32000, work this
   19375 way.
   19376 
   19377  Some machines have distinct signed and unsigned compare instructions,
   19378 and only one set of conditional branch instructions.  The easiest way
   19379 to handle these machines is to treat them just like the others until
   19380 the final stage where assembly code is written.  At this time, when
   19381 outputting code for the compare instruction, peek ahead at the
   19382 following branch using `next_cc0_user (insn)'.  (The variable `insn'
   19383 refers to the insn being output, in the output-writing code in an
   19384 instruction pattern.)  If the RTL says that is an unsigned branch,
   19385 output an unsigned compare; otherwise output a signed compare.  When
   19386 the branch itself is output, you can treat signed and unsigned branches
   19387 identically.
   19388 
   19389  The reason you can do this is that GCC always generates a pair of
   19390 consecutive RTL insns, possibly separated by `note' insns, one to set
   19391 the condition code and one to test it, and keeps the pair inviolate
   19392 until the end.
   19393 
   19394  To go with this technique, you must define the machine-description
   19395 macro `NOTICE_UPDATE_CC' to do `CC_STATUS_INIT'; in other words, no
   19396 compare instruction is superfluous.
   19397 
   19398  Some machines have compare-and-branch instructions and no condition
   19399 code.  A similar technique works for them.  When it is time to "output"
   19400 a compare instruction, record its operands in two static variables.
   19401 When outputting the branch-on-condition-code instruction that follows,
   19402 actually output a compare-and-branch instruction that uses the
   19403 remembered operands.
   19404 
   19405  It also works to define patterns for compare-and-branch instructions.
   19406 In optimizing compilation, the pair of compare and branch instructions
   19407 will be combined according to these patterns.  But this does not happen
   19408 if optimization is not requested.  So you must use one of the solutions
   19409 above in addition to any special patterns you define.
   19410 
   19411  In many RISC machines, most instructions do not affect the condition
   19412 code and there may not even be a separate condition code register.  On
   19413 these machines, the restriction that the definition and use of the
   19414 condition code be adjacent insns is not necessary and can prevent
   19415 important optimizations.  For example, on the IBM RS/6000, there is a
   19416 delay for taken branches unless the condition code register is set three
   19417 instructions earlier than the conditional branch.  The instruction
   19418 scheduler cannot perform this optimization if it is not permitted to
   19419 separate the definition and use of the condition code register.
   19420 
   19421  On these machines, do not use `(cc0)', but instead use a register to
   19422 represent the condition code.  If there is a specific condition code
   19423 register in the machine, use a hard register.  If the condition code or
   19424 comparison result can be placed in any general register, or if there are
   19425 multiple condition registers, use a pseudo register.
   19426 
   19427  On some machines, the type of branch instruction generated may depend
   19428 on the way the condition code was produced; for example, on the 68k and
   19429 SPARC, setting the condition code directly from an add or subtract
   19430 instruction does not clear the overflow bit the way that a test
   19431 instruction does, so a different branch instruction must be used for
   19432 some conditional branches.  For machines that use `(cc0)', the set and
   19433 use of the condition code must be adjacent (separated only by `note'
   19434 insns) allowing flags in `cc_status' to be used.  (*Note Condition
   19435 Code::.)  Also, the comparison and branch insns can be located from
   19436 each other by using the functions `prev_cc0_setter' and `next_cc0_user'.
   19437 
   19438  However, this is not true on machines that do not use `(cc0)'.  On
   19439 those machines, no assumptions can be made about the adjacency of the
   19440 compare and branch insns and the above methods cannot be used.  Instead,
   19441 we use the machine mode of the condition code register to record
   19442 different formats of the condition code register.
   19443 
   19444  Registers used to store the condition code value should have a mode
   19445 that is in class `MODE_CC'.  Normally, it will be `CCmode'.  If
   19446 additional modes are required (as for the add example mentioned above in
   19447 the SPARC), define them in `MACHINE-modes.def' (*note Condition
   19448 Code::).  Also define `SELECT_CC_MODE' to choose a mode given an
   19449 operand of a compare.
   19450 
   19451  If it is known during RTL generation that a different mode will be
   19452 required (for example, if the machine has separate compare instructions
   19453 for signed and unsigned quantities, like most IBM processors), they can
   19454 be specified at that time.
   19455 
   19456  If the cases that require different modes would be made by instruction
   19457 combination, the macro `SELECT_CC_MODE' determines which machine mode
   19458 should be used for the comparison result.  The patterns should be
   19459 written using that mode.  To support the case of the add on the SPARC
   19460 discussed above, we have the pattern
   19461 
   19462      (define_insn ""
   19463        [(set (reg:CC_NOOV 0)
   19464              (compare:CC_NOOV
   19465                (plus:SI (match_operand:SI 0 "register_operand" "%r")
   19466                         (match_operand:SI 1 "arith_operand" "rI"))
   19467                (const_int 0)))]
   19468        ""
   19469        "...")
   19470 
   19471  The `SELECT_CC_MODE' macro on the SPARC returns `CC_NOOVmode' for
   19472 comparisons whose argument is a `plus'.
   19473 
   19474 
   19475 File: gccint.info,  Node: Looping Patterns,  Next: Insn Canonicalizations,  Prev: Jump Patterns,  Up: Machine Desc
   19476 
   19477 14.13 Defining Looping Instruction Patterns
   19478 ===========================================
   19479 
   19480 Some machines have special jump instructions that can be utilized to
   19481 make loops more efficient.  A common example is the 68000 `dbra'
   19482 instruction which performs a decrement of a register and a branch if the
   19483 result was greater than zero.  Other machines, in particular digital
   19484 signal processors (DSPs), have special block repeat instructions to
   19485 provide low-overhead loop support.  For example, the TI TMS320C3x/C4x
   19486 DSPs have a block repeat instruction that loads special registers to
   19487 mark the top and end of a loop and to count the number of loop
   19488 iterations.  This avoids the need for fetching and executing a
   19489 `dbra'-like instruction and avoids pipeline stalls associated with the
   19490 jump.
   19491 
   19492  GCC has three special named patterns to support low overhead looping.
   19493 They are `decrement_and_branch_until_zero', `doloop_begin', and
   19494 `doloop_end'.  The first pattern, `decrement_and_branch_until_zero', is
   19495 not emitted during RTL generation but may be emitted during the
   19496 instruction combination phase.  This requires the assistance of the
   19497 loop optimizer, using information collected during strength reduction,
   19498 to reverse a loop to count down to zero.  Some targets also require the
   19499 loop optimizer to add a `REG_NONNEG' note to indicate that the
   19500 iteration count is always positive.  This is needed if the target
   19501 performs a signed loop termination test.  For example, the 68000 uses a
   19502 pattern similar to the following for its `dbra' instruction:
   19503 
   19504      (define_insn "decrement_and_branch_until_zero"
   19505        [(set (pc)
   19506      	(if_then_else
   19507      	  (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am")
   19508      		       (const_int -1))
   19509      	      (const_int 0))
   19510      	  (label_ref (match_operand 1 "" ""))
   19511      	  (pc)))
   19512         (set (match_dup 0)
   19513      	(plus:SI (match_dup 0)
   19514      		 (const_int -1)))]
   19515        "find_reg_note (insn, REG_NONNEG, 0)"
   19516        "...")
   19517 
   19518  Note that since the insn is both a jump insn and has an output, it must
   19519 deal with its own reloads, hence the `m' constraints.  Also note that
   19520 since this insn is generated by the instruction combination phase
   19521 combining two sequential insns together into an implicit parallel insn,
   19522 the iteration counter needs to be biased by the same amount as the
   19523 decrement operation, in this case -1.  Note that the following similar
   19524 pattern will not be matched by the combiner.
   19525 
   19526      (define_insn "decrement_and_branch_until_zero"
   19527        [(set (pc)
   19528      	(if_then_else
   19529      	  (ge (match_operand:SI 0 "general_operand" "+d*am")
   19530      	      (const_int 1))
   19531      	  (label_ref (match_operand 1 "" ""))
   19532      	  (pc)))
   19533         (set (match_dup 0)
   19534      	(plus:SI (match_dup 0)
   19535      		 (const_int -1)))]
   19536        "find_reg_note (insn, REG_NONNEG, 0)"
   19537        "...")
   19538 
   19539  The other two special looping patterns, `doloop_begin' and
   19540 `doloop_end', are emitted by the loop optimizer for certain
   19541 well-behaved loops with a finite number of loop iterations using
   19542 information collected during strength reduction.
   19543 
   19544  The `doloop_end' pattern describes the actual looping instruction (or
   19545 the implicit looping operation) and the `doloop_begin' pattern is an
   19546 optional companion pattern that can be used for initialization needed
   19547 for some low-overhead looping instructions.
   19548 
   19549  Note that some machines require the actual looping instruction to be
   19550 emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs).  Emitting
   19551 the true RTL for a looping instruction at the top of the loop can cause
   19552 problems with flow analysis.  So instead, a dummy `doloop' insn is
   19553 emitted at the end of the loop.  The machine dependent reorg pass checks
   19554 for the presence of this `doloop' insn and then searches back to the
   19555 top of the loop, where it inserts the true looping insn (provided there
   19556 are no instructions in the loop which would cause problems).  Any
   19557 additional labels can be emitted at this point.  In addition, if the
   19558 desired special iteration counter register was not allocated, this
   19559 machine dependent reorg pass could emit a traditional compare and jump
   19560 instruction pair.
   19561 
   19562  The essential difference between the `decrement_and_branch_until_zero'
   19563 and the `doloop_end' patterns is that the loop optimizer allocates an
   19564 additional pseudo register for the latter as an iteration counter.
   19565 This pseudo register cannot be used within the loop (i.e., general
   19566 induction variables cannot be derived from it), however, in many cases
   19567 the loop induction variable may become redundant and removed by the
   19568 flow pass.
   19569 
   19570 
   19571 File: gccint.info,  Node: Insn Canonicalizations,  Next: Expander Definitions,  Prev: Looping Patterns,  Up: Machine Desc
   19572 
   19573 14.14 Canonicalization of Instructions
   19574 ======================================
   19575 
   19576 There are often cases where multiple RTL expressions could represent an
   19577 operation performed by a single machine instruction.  This situation is
   19578 most commonly encountered with logical, branch, and multiply-accumulate
   19579 instructions.  In such cases, the compiler attempts to convert these
   19580 multiple RTL expressions into a single canonical form to reduce the
   19581 number of insn patterns required.
   19582 
   19583  In addition to algebraic simplifications, following canonicalizations
   19584 are performed:
   19585 
   19586    * For commutative and comparison operators, a constant is always
   19587      made the second operand.  If a machine only supports a constant as
   19588      the second operand, only patterns that match a constant in the
   19589      second operand need be supplied.
   19590 
   19591    * For associative operators, a sequence of operators will always
   19592      chain to the left; for instance, only the left operand of an
   19593      integer `plus' can itself be a `plus'.  `and', `ior', `xor',
   19594      `plus', `mult', `smin', `smax', `umin', and `umax' are associative
   19595      when applied to integers, and sometimes to floating-point.
   19596 
   19597    * For these operators, if only one operand is a `neg', `not',
   19598      `mult', `plus', or `minus' expression, it will be the first
   19599      operand.
   19600 
   19601    * In combinations of `neg', `mult', `plus', and `minus', the `neg'
   19602      operations (if any) will be moved inside the operations as far as
   19603      possible.  For instance, `(neg (mult A B))' is canonicalized as
   19604      `(mult (neg A) B)', but `(plus (mult (neg A) B) C)' is
   19605      canonicalized as `(minus A (mult B C))'.
   19606 
   19607    * For the `compare' operator, a constant is always the second operand
   19608      on machines where `cc0' is used (*note Jump Patterns::).  On other
   19609      machines, there are rare cases where the compiler might want to
   19610      construct a `compare' with a constant as the first operand.
   19611      However, these cases are not common enough for it to be worthwhile
   19612      to provide a pattern matching a constant as the first operand
   19613      unless the machine actually has such an instruction.
   19614 
   19615      An operand of `neg', `not', `mult', `plus', or `minus' is made the
   19616      first operand under the same conditions as above.
   19617 
   19618    * `(ltu (plus A B) B)' is converted to `(ltu (plus A B) A)'.
   19619      Likewise with `geu' instead of `ltu'.
   19620 
   19621    * `(minus X (const_int N))' is converted to `(plus X (const_int
   19622      -N))'.
   19623 
   19624    * Within address computations (i.e., inside `mem'), a left shift is
   19625      converted into the appropriate multiplication by a power of two.
   19626 
   19627    * De Morgan's Law is used to move bitwise negation inside a bitwise
   19628      logical-and or logical-or operation.  If this results in only one
   19629      operand being a `not' expression, it will be the first one.
   19630 
   19631      A machine that has an instruction that performs a bitwise
   19632      logical-and of one operand with the bitwise negation of the other
   19633      should specify the pattern for that instruction as
   19634 
   19635           (define_insn ""
   19636             [(set (match_operand:M 0 ...)
   19637                   (and:M (not:M (match_operand:M 1 ...))
   19638                                (match_operand:M 2 ...)))]
   19639             "..."
   19640             "...")
   19641 
   19642      Similarly, a pattern for a "NAND" instruction should be written
   19643 
   19644           (define_insn ""
   19645             [(set (match_operand:M 0 ...)
   19646                   (ior:M (not:M (match_operand:M 1 ...))
   19647                                (not:M (match_operand:M 2 ...))))]
   19648             "..."
   19649             "...")
   19650 
   19651      In both cases, it is not necessary to include patterns for the many
   19652      logically equivalent RTL expressions.
   19653 
   19654    * The only possible RTL expressions involving both bitwise
   19655      exclusive-or and bitwise negation are `(xor:M X Y)' and `(not:M
   19656      (xor:M X Y))'.
   19657 
   19658    * The sum of three items, one of which is a constant, will only
   19659      appear in the form
   19660 
   19661           (plus:M (plus:M X Y) CONSTANT)
   19662 
   19663    * On machines that do not use `cc0', `(compare X (const_int 0))'
   19664      will be converted to X.
   19665 
   19666    * Equality comparisons of a group of bits (usually a single bit)
   19667      with zero will be written using `zero_extract' rather than the
   19668      equivalent `and' or `sign_extract' operations.
   19669 
   19670 
   19671  Further canonicalization rules are defined in the function
   19672 `commutative_operand_precedence' in `gcc/rtlanal.c'.
   19673 
   19674 
   19675 File: gccint.info,  Node: Expander Definitions,  Next: Insn Splitting,  Prev: Insn Canonicalizations,  Up: Machine Desc
   19676 
   19677 14.15 Defining RTL Sequences for Code Generation
   19678 ================================================
   19679 
   19680 On some target machines, some standard pattern names for RTL generation
   19681 cannot be handled with single insn, but a sequence of RTL insns can
   19682 represent them.  For these target machines, you can write a
   19683 `define_expand' to specify how to generate the sequence of RTL.
   19684 
   19685  A `define_expand' is an RTL expression that looks almost like a
   19686 `define_insn'; but, unlike the latter, a `define_expand' is used only
   19687 for RTL generation and it can produce more than one RTL insn.
   19688 
   19689  A `define_expand' RTX has four operands:
   19690 
   19691    * The name.  Each `define_expand' must have a name, since the only
   19692      use for it is to refer to it by name.
   19693 
   19694    * The RTL template.  This is a vector of RTL expressions representing
   19695      a sequence of separate instructions.  Unlike `define_insn', there
   19696      is no implicit surrounding `PARALLEL'.
   19697 
   19698    * The condition, a string containing a C expression.  This
   19699      expression is used to express how the availability of this pattern
   19700      depends on subclasses of target machine, selected by command-line
   19701      options when GCC is run.  This is just like the condition of a
   19702      `define_insn' that has a standard name.  Therefore, the condition
   19703      (if present) may not depend on the data in the insn being matched,
   19704      but only the target-machine-type flags.  The compiler needs to
   19705      test these conditions during initialization in order to learn
   19706      exactly which named instructions are available in a particular run.
   19707 
   19708    * The preparation statements, a string containing zero or more C
   19709      statements which are to be executed before RTL code is generated
   19710      from the RTL template.
   19711 
   19712      Usually these statements prepare temporary registers for use as
   19713      internal operands in the RTL template, but they can also generate
   19714      RTL insns directly by calling routines such as `emit_insn', etc.
   19715      Any such insns precede the ones that come from the RTL template.
   19716 
   19717  Every RTL insn emitted by a `define_expand' must match some
   19718 `define_insn' in the machine description.  Otherwise, the compiler will
   19719 crash when trying to generate code for the insn or trying to optimize
   19720 it.
   19721 
   19722  The RTL template, in addition to controlling generation of RTL insns,
   19723 also describes the operands that need to be specified when this pattern
   19724 is used.  In particular, it gives a predicate for each operand.
   19725 
   19726  A true operand, which needs to be specified in order to generate RTL
   19727 from the pattern, should be described with a `match_operand' in its
   19728 first occurrence in the RTL template.  This enters information on the
   19729 operand's predicate into the tables that record such things.  GCC uses
   19730 the information to preload the operand into a register if that is
   19731 required for valid RTL code.  If the operand is referred to more than
   19732 once, subsequent references should use `match_dup'.
   19733 
   19734  The RTL template may also refer to internal "operands" which are
   19735 temporary registers or labels used only within the sequence made by the
   19736 `define_expand'.  Internal operands are substituted into the RTL
   19737 template with `match_dup', never with `match_operand'.  The values of
   19738 the internal operands are not passed in as arguments by the compiler
   19739 when it requests use of this pattern.  Instead, they are computed
   19740 within the pattern, in the preparation statements.  These statements
   19741 compute the values and store them into the appropriate elements of
   19742 `operands' so that `match_dup' can find them.
   19743 
   19744  There are two special macros defined for use in the preparation
   19745 statements: `DONE' and `FAIL'.  Use them with a following semicolon, as
   19746 a statement.
   19747 
   19748 `DONE'
   19749      Use the `DONE' macro to end RTL generation for the pattern.  The
   19750      only RTL insns resulting from the pattern on this occasion will be
   19751      those already emitted by explicit calls to `emit_insn' within the
   19752      preparation statements; the RTL template will not be generated.
   19753 
   19754 `FAIL'
   19755      Make the pattern fail on this occasion.  When a pattern fails, it
   19756      means that the pattern was not truly available.  The calling
   19757      routines in the compiler will try other strategies for code
   19758      generation using other patterns.
   19759 
   19760      Failure is currently supported only for binary (addition,
   19761      multiplication, shifting, etc.) and bit-field (`extv', `extzv',
   19762      and `insv') operations.
   19763 
   19764  If the preparation falls through (invokes neither `DONE' nor `FAIL'),
   19765 then the `define_expand' acts like a `define_insn' in that the RTL
   19766 template is used to generate the insn.
   19767 
   19768  The RTL template is not used for matching, only for generating the
   19769 initial insn list.  If the preparation statement always invokes `DONE'
   19770 or `FAIL', the RTL template may be reduced to a simple list of
   19771 operands, such as this example:
   19772 
   19773      (define_expand "addsi3"
   19774        [(match_operand:SI 0 "register_operand" "")
   19775         (match_operand:SI 1 "register_operand" "")
   19776         (match_operand:SI 2 "register_operand" "")]
   19777        ""
   19778        "
   19779      {
   19780        handle_add (operands[0], operands[1], operands[2]);
   19781        DONE;
   19782      }")
   19783 
   19784  Here is an example, the definition of left-shift for the SPUR chip:
   19785 
   19786      (define_expand "ashlsi3"
   19787        [(set (match_operand:SI 0 "register_operand" "")
   19788              (ashift:SI
   19789                (match_operand:SI 1 "register_operand" "")
   19790                (match_operand:SI 2 "nonmemory_operand" "")))]
   19791        ""
   19792        "
   19793 
   19794      {
   19795        if (GET_CODE (operands[2]) != CONST_INT
   19796            || (unsigned) INTVAL (operands[2]) > 3)
   19797          FAIL;
   19798      }")
   19799 
   19800 This example uses `define_expand' so that it can generate an RTL insn
   19801 for shifting when the shift-count is in the supported range of 0 to 3
   19802 but fail in other cases where machine insns aren't available.  When it
   19803 fails, the compiler tries another strategy using different patterns
   19804 (such as, a library call).
   19805 
   19806  If the compiler were able to handle nontrivial condition-strings in
   19807 patterns with names, then it would be possible to use a `define_insn'
   19808 in that case.  Here is another case (zero-extension on the 68000) which
   19809 makes more use of the power of `define_expand':
   19810 
   19811      (define_expand "zero_extendhisi2"
   19812        [(set (match_operand:SI 0 "general_operand" "")
   19813              (const_int 0))
   19814         (set (strict_low_part
   19815                (subreg:HI
   19816                  (match_dup 0)
   19817                  0))
   19818              (match_operand:HI 1 "general_operand" ""))]
   19819        ""
   19820        "operands[1] = make_safe_from (operands[1], operands[0]);")
   19821 
   19822 Here two RTL insns are generated, one to clear the entire output operand
   19823 and the other to copy the input operand into its low half.  This
   19824 sequence is incorrect if the input operand refers to [the old value of]
   19825 the output operand, so the preparation statement makes sure this isn't
   19826 so.  The function `make_safe_from' copies the `operands[1]' into a
   19827 temporary register if it refers to `operands[0]'.  It does this by
   19828 emitting another RTL insn.
   19829 
   19830  Finally, a third example shows the use of an internal operand.
   19831 Zero-extension on the SPUR chip is done by `and'-ing the result against
   19832 a halfword mask.  But this mask cannot be represented by a `const_int'
   19833 because the constant value is too large to be legitimate on this
   19834 machine.  So it must be copied into a register with `force_reg' and
   19835 then the register used in the `and'.
   19836 
   19837      (define_expand "zero_extendhisi2"
   19838        [(set (match_operand:SI 0 "register_operand" "")
   19839              (and:SI (subreg:SI
   19840                        (match_operand:HI 1 "register_operand" "")
   19841                        0)
   19842                      (match_dup 2)))]
   19843        ""
   19844        "operands[2]
   19845           = force_reg (SImode, GEN_INT (65535)); ")
   19846 
   19847  _Note:_ If the `define_expand' is used to serve a standard binary or
   19848 unary arithmetic operation or a bit-field operation, then the last insn
   19849 it generates must not be a `code_label', `barrier' or `note'.  It must
   19850 be an `insn', `jump_insn' or `call_insn'.  If you don't need a real insn
   19851 at the end, emit an insn to copy the result of the operation into
   19852 itself.  Such an insn will generate no code, but it can avoid problems
   19853 in the compiler.
   19854 
   19855 
   19856 File: gccint.info,  Node: Insn Splitting,  Next: Including Patterns,  Prev: Expander Definitions,  Up: Machine Desc
   19857 
   19858 14.16 Defining How to Split Instructions
   19859 ========================================
   19860 
   19861 There are two cases where you should specify how to split a pattern
   19862 into multiple insns.  On machines that have instructions requiring
   19863 delay slots (*note Delay Slots::) or that have instructions whose
   19864 output is not available for multiple cycles (*note Processor pipeline
   19865 description::), the compiler phases that optimize these cases need to
   19866 be able to move insns into one-instruction delay slots.  However, some
   19867 insns may generate more than one machine instruction.  These insns
   19868 cannot be placed into a delay slot.
   19869 
   19870  Often you can rewrite the single insn as a list of individual insns,
   19871 each corresponding to one machine instruction.  The disadvantage of
   19872 doing so is that it will cause the compilation to be slower and require
   19873 more space.  If the resulting insns are too complex, it may also
   19874 suppress some optimizations.  The compiler splits the insn if there is a
   19875 reason to believe that it might improve instruction or delay slot
   19876 scheduling.
   19877 
   19878  The insn combiner phase also splits putative insns.  If three insns are
   19879 merged into one insn with a complex expression that cannot be matched by
   19880 some `define_insn' pattern, the combiner phase attempts to split the
   19881 complex pattern into two insns that are recognized.  Usually it can
   19882 break the complex pattern into two patterns by splitting out some
   19883 subexpression.  However, in some other cases, such as performing an
   19884 addition of a large constant in two insns on a RISC machine, the way to
   19885 split the addition into two insns is machine-dependent.
   19886 
   19887  The `define_split' definition tells the compiler how to split a
   19888 complex insn into several simpler insns.  It looks like this:
   19889 
   19890      (define_split
   19891        [INSN-PATTERN]
   19892        "CONDITION"
   19893        [NEW-INSN-PATTERN-1
   19894         NEW-INSN-PATTERN-2
   19895         ...]
   19896        "PREPARATION-STATEMENTS")
   19897 
   19898  INSN-PATTERN is a pattern that needs to be split and CONDITION is the
   19899 final condition to be tested, as in a `define_insn'.  When an insn
   19900 matching INSN-PATTERN and satisfying CONDITION is found, it is replaced
   19901 in the insn list with the insns given by NEW-INSN-PATTERN-1,
   19902 NEW-INSN-PATTERN-2, etc.
   19903 
   19904  The PREPARATION-STATEMENTS are similar to those statements that are
   19905 specified for `define_expand' (*note Expander Definitions::) and are
   19906 executed before the new RTL is generated to prepare for the generated
   19907 code or emit some insns whose pattern is not fixed.  Unlike those in
   19908 `define_expand', however, these statements must not generate any new
   19909 pseudo-registers.  Once reload has completed, they also must not
   19910 allocate any space in the stack frame.
   19911 
   19912  Patterns are matched against INSN-PATTERN in two different
   19913 circumstances.  If an insn needs to be split for delay slot scheduling
   19914 or insn scheduling, the insn is already known to be valid, which means
   19915 that it must have been matched by some `define_insn' and, if
   19916 `reload_completed' is nonzero, is known to satisfy the constraints of
   19917 that `define_insn'.  In that case, the new insn patterns must also be
   19918 insns that are matched by some `define_insn' and, if `reload_completed'
   19919 is nonzero, must also satisfy the constraints of those definitions.
   19920 
   19921  As an example of this usage of `define_split', consider the following
   19922 example from `a29k.md', which splits a `sign_extend' from `HImode' to
   19923 `SImode' into a pair of shift insns:
   19924 
   19925      (define_split
   19926        [(set (match_operand:SI 0 "gen_reg_operand" "")
   19927              (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
   19928        ""
   19929        [(set (match_dup 0)
   19930              (ashift:SI (match_dup 1)
   19931                         (const_int 16)))
   19932         (set (match_dup 0)
   19933              (ashiftrt:SI (match_dup 0)
   19934                           (const_int 16)))]
   19935        "
   19936      { operands[1] = gen_lowpart (SImode, operands[1]); }")
   19937 
   19938  When the combiner phase tries to split an insn pattern, it is always
   19939 the case that the pattern is _not_ matched by any `define_insn'.  The
   19940 combiner pass first tries to split a single `set' expression and then
   19941 the same `set' expression inside a `parallel', but followed by a
   19942 `clobber' of a pseudo-reg to use as a scratch register.  In these
   19943 cases, the combiner expects exactly two new insn patterns to be
   19944 generated.  It will verify that these patterns match some `define_insn'
   19945 definitions, so you need not do this test in the `define_split' (of
   19946 course, there is no point in writing a `define_split' that will never
   19947 produce insns that match).
   19948 
   19949  Here is an example of this use of `define_split', taken from
   19950 `rs6000.md':
   19951 
   19952      (define_split
   19953        [(set (match_operand:SI 0 "gen_reg_operand" "")
   19954              (plus:SI (match_operand:SI 1 "gen_reg_operand" "")
   19955                       (match_operand:SI 2 "non_add_cint_operand" "")))]
   19956        ""
   19957        [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
   19958         (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
   19959      "
   19960      {
   19961        int low = INTVAL (operands[2]) & 0xffff;
   19962        int high = (unsigned) INTVAL (operands[2]) >> 16;
   19963 
   19964        if (low & 0x8000)
   19965          high++, low |= 0xffff0000;
   19966 
   19967        operands[3] = GEN_INT (high << 16);
   19968        operands[4] = GEN_INT (low);
   19969      }")
   19970 
   19971  Here the predicate `non_add_cint_operand' matches any `const_int' that
   19972 is _not_ a valid operand of a single add insn.  The add with the
   19973 smaller displacement is written so that it can be substituted into the
   19974 address of a subsequent operation.
   19975 
   19976  An example that uses a scratch register, from the same file, generates
   19977 an equality comparison of a register and a large constant:
   19978 
   19979      (define_split
   19980        [(set (match_operand:CC 0 "cc_reg_operand" "")
   19981              (compare:CC (match_operand:SI 1 "gen_reg_operand" "")
   19982                          (match_operand:SI 2 "non_short_cint_operand" "")))
   19983         (clobber (match_operand:SI 3 "gen_reg_operand" ""))]
   19984        "find_single_use (operands[0], insn, 0)
   19985         && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
   19986             || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
   19987        [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
   19988         (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
   19989        "
   19990      {
   19991        /* Get the constant we are comparing against, C, and see what it
   19992           looks like sign-extended to 16 bits.  Then see what constant
   19993           could be XOR'ed with C to get the sign-extended value.  */
   19994 
   19995        int c = INTVAL (operands[2]);
   19996        int sextc = (c << 16) >> 16;
   19997        int xorv = c ^ sextc;
   19998 
   19999        operands[4] = GEN_INT (xorv);
   20000        operands[5] = GEN_INT (sextc);
   20001      }")
   20002 
   20003  To avoid confusion, don't write a single `define_split' that accepts
   20004 some insns that match some `define_insn' as well as some insns that
   20005 don't.  Instead, write two separate `define_split' definitions, one for
   20006 the insns that are valid and one for the insns that are not valid.
   20007 
   20008  The splitter is allowed to split jump instructions into sequence of
   20009 jumps or create new jumps in while splitting non-jump instructions.  As
   20010 the central flowgraph and branch prediction information needs to be
   20011 updated, several restriction apply.
   20012 
   20013  Splitting of jump instruction into sequence that over by another jump
   20014 instruction is always valid, as compiler expect identical behavior of
   20015 new jump.  When new sequence contains multiple jump instructions or new
   20016 labels, more assistance is needed.  Splitter is required to create only
   20017 unconditional jumps, or simple conditional jump instructions.
   20018 Additionally it must attach a `REG_BR_PROB' note to each conditional
   20019 jump.  A global variable `split_branch_probability' holds the
   20020 probability of the original branch in case it was an simple conditional
   20021 jump, -1 otherwise.  To simplify recomputing of edge frequencies, the
   20022 new sequence is required to have only forward jumps to the newly
   20023 created labels.
   20024 
   20025  For the common case where the pattern of a define_split exactly
   20026 matches the pattern of a define_insn, use `define_insn_and_split'.  It
   20027 looks like this:
   20028 
   20029      (define_insn_and_split
   20030        [INSN-PATTERN]
   20031        "CONDITION"
   20032        "OUTPUT-TEMPLATE"
   20033        "SPLIT-CONDITION"
   20034        [NEW-INSN-PATTERN-1
   20035         NEW-INSN-PATTERN-2
   20036         ...]
   20037        "PREPARATION-STATEMENTS"
   20038        [INSN-ATTRIBUTES])
   20039 
   20040  INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used
   20041 as in `define_insn'.  The NEW-INSN-PATTERN vector and the
   20042 PREPARATION-STATEMENTS are used as in a `define_split'.  The
   20043 SPLIT-CONDITION is also used as in `define_split', with the additional
   20044 behavior that if the condition starts with `&&', the condition used for
   20045 the split will be the constructed as a logical "and" of the split
   20046 condition with the insn condition.  For example, from i386.md:
   20047 
   20048      (define_insn_and_split "zero_extendhisi2_and"
   20049        [(set (match_operand:SI 0 "register_operand" "=r")
   20050           (zero_extend:SI (match_operand:HI 1 "register_operand" "0")))
   20051         (clobber (reg:CC 17))]
   20052        "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size"
   20053        "#"
   20054        "&& reload_completed"
   20055        [(parallel [(set (match_dup 0)
   20056                         (and:SI (match_dup 0) (const_int 65535)))
   20057      	      (clobber (reg:CC 17))])]
   20058        ""
   20059        [(set_attr "type" "alu1")])
   20060 
   20061  In this case, the actual split condition will be
   20062 `TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'.
   20063 
   20064  The `define_insn_and_split' construction provides exactly the same
   20065 functionality as two separate `define_insn' and `define_split'
   20066 patterns.  It exists for compactness, and as a maintenance tool to
   20067 prevent having to ensure the two patterns' templates match.
   20068 
   20069 
   20070 File: gccint.info,  Node: Including Patterns,  Next: Peephole Definitions,  Prev: Insn Splitting,  Up: Machine Desc
   20071 
   20072 14.17 Including Patterns in Machine Descriptions.
   20073 =================================================
   20074 
   20075 The `include' pattern tells the compiler tools where to look for
   20076 patterns that are in files other than in the file `.md'.  This is used
   20077 only at build time and there is no preprocessing allowed.
   20078 
   20079  It looks like:
   20080 
   20081 
   20082      (include
   20083        PATHNAME)
   20084 
   20085  For example:
   20086 
   20087 
   20088      (include "filestuff")
   20089 
   20090  Where PATHNAME is a string that specifies the location of the file,
   20091 specifies the include file to be in `gcc/config/target/filestuff'.  The
   20092 directory `gcc/config/target' is regarded as the default directory.
   20093 
   20094  Machine descriptions may be split up into smaller more manageable
   20095 subsections and placed into subdirectories.
   20096 
   20097  By specifying:
   20098 
   20099 
   20100      (include "BOGUS/filestuff")
   20101 
   20102  the include file is specified to be in
   20103 `gcc/config/TARGET/BOGUS/filestuff'.
   20104 
   20105  Specifying an absolute path for the include file such as;
   20106 
   20107      (include "/u2/BOGUS/filestuff")
   20108  is permitted but is not encouraged.
   20109 
   20110 14.17.1 RTL Generation Tool Options for Directory Search
   20111 --------------------------------------------------------
   20112 
   20113 The `-IDIR' option specifies directories to search for machine
   20114 descriptions.  For example:
   20115 
   20116 
   20117      genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md
   20118 
   20119  Add the directory DIR to the head of the list of directories to be
   20120 searched for header files.  This can be used to override a system
   20121 machine definition file, substituting your own version, since these
   20122 directories are searched before the default machine description file
   20123 directories.  If you use more than one `-I' option, the directories are
   20124 scanned in left-to-right order; the standard default directory come
   20125 after.
   20126 
   20127 
   20128 File: gccint.info,  Node: Peephole Definitions,  Next: Insn Attributes,  Prev: Including Patterns,  Up: Machine Desc
   20129 
   20130 14.18 Machine-Specific Peephole Optimizers
   20131 ==========================================
   20132 
   20133 In addition to instruction patterns the `md' file may contain
   20134 definitions of machine-specific peephole optimizations.
   20135 
   20136  The combiner does not notice certain peephole optimizations when the
   20137 data flow in the program does not suggest that it should try them.  For
   20138 example, sometimes two consecutive insns related in purpose can be
   20139 combined even though the second one does not appear to use a register
   20140 computed in the first one.  A machine-specific peephole optimizer can
   20141 detect such opportunities.
   20142 
   20143  There are two forms of peephole definitions that may be used.  The
   20144 original `define_peephole' is run at assembly output time to match
   20145 insns and substitute assembly text.  Use of `define_peephole' is
   20146 deprecated.
   20147 
   20148  A newer `define_peephole2' matches insns and substitutes new insns.
   20149 The `peephole2' pass is run after register allocation but before
   20150 scheduling, which may result in much better code for targets that do
   20151 scheduling.
   20152 
   20153 * Menu:
   20154 
   20155 * define_peephole::     RTL to Text Peephole Optimizers
   20156 * define_peephole2::    RTL to RTL Peephole Optimizers
   20157 
   20158 
   20159 File: gccint.info,  Node: define_peephole,  Next: define_peephole2,  Up: Peephole Definitions
   20160 
   20161 14.18.1 RTL to Text Peephole Optimizers
   20162 ---------------------------------------
   20163 
   20164 A definition looks like this:
   20165 
   20166      (define_peephole
   20167        [INSN-PATTERN-1
   20168         INSN-PATTERN-2
   20169         ...]
   20170        "CONDITION"
   20171        "TEMPLATE"
   20172        "OPTIONAL-INSN-ATTRIBUTES")
   20173 
   20174 The last string operand may be omitted if you are not using any
   20175 machine-specific information in this machine description.  If present,
   20176 it must obey the same rules as in a `define_insn'.
   20177 
   20178  In this skeleton, INSN-PATTERN-1 and so on are patterns to match
   20179 consecutive insns.  The optimization applies to a sequence of insns when
   20180 INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 matches the next,
   20181 and so on.
   20182 
   20183  Each of the insns matched by a peephole must also match a
   20184 `define_insn'.  Peepholes are checked only at the last stage just
   20185 before code generation, and only optionally.  Therefore, any insn which
   20186 would match a peephole but no `define_insn' will cause a crash in code
   20187 generation in an unoptimized compilation, or at various optimization
   20188 stages.
   20189 
   20190  The operands of the insns are matched with `match_operands',
   20191 `match_operator', and `match_dup', as usual.  What is not usual is that
   20192 the operand numbers apply to all the insn patterns in the definition.
   20193 So, you can check for identical operands in two insns by using
   20194 `match_operand' in one insn and `match_dup' in the other.
   20195 
   20196  The operand constraints used in `match_operand' patterns do not have
   20197 any direct effect on the applicability of the peephole, but they will
   20198 be validated afterward, so make sure your constraints are general enough
   20199 to apply whenever the peephole matches.  If the peephole matches but
   20200 the constraints are not satisfied, the compiler will crash.
   20201 
   20202  It is safe to omit constraints in all the operands of the peephole; or
   20203 you can write constraints which serve as a double-check on the criteria
   20204 previously tested.
   20205 
   20206  Once a sequence of insns matches the patterns, the CONDITION is
   20207 checked.  This is a C expression which makes the final decision whether
   20208 to perform the optimization (we do so if the expression is nonzero).  If
   20209 CONDITION is omitted (in other words, the string is empty) then the
   20210 optimization is applied to every sequence of insns that matches the
   20211 patterns.
   20212 
   20213  The defined peephole optimizations are applied after register
   20214 allocation is complete.  Therefore, the peephole definition can check
   20215 which operands have ended up in which kinds of registers, just by
   20216 looking at the operands.
   20217 
   20218  The way to refer to the operands in CONDITION is to write
   20219 `operands[I]' for operand number I (as matched by `(match_operand I
   20220 ...)').  Use the variable `insn' to refer to the last of the insns
   20221 being matched; use `prev_active_insn' to find the preceding insns.
   20222 
   20223  When optimizing computations with intermediate results, you can use
   20224 CONDITION to match only when the intermediate results are not used
   20225 elsewhere.  Use the C expression `dead_or_set_p (INSN, OP)', where INSN
   20226 is the insn in which you expect the value to be used for the last time
   20227 (from the value of `insn', together with use of `prev_nonnote_insn'),
   20228 and OP is the intermediate value (from `operands[I]').
   20229 
   20230  Applying the optimization means replacing the sequence of insns with
   20231 one new insn.  The TEMPLATE controls ultimate output of assembler code
   20232 for this combined insn.  It works exactly like the template of a
   20233 `define_insn'.  Operand numbers in this template are the same ones used
   20234 in matching the original sequence of insns.
   20235 
   20236  The result of a defined peephole optimizer does not need to match any
   20237 of the insn patterns in the machine description; it does not even have
   20238 an opportunity to match them.  The peephole optimizer definition itself
   20239 serves as the insn pattern to control how the insn is output.
   20240 
   20241  Defined peephole optimizers are run as assembler code is being output,
   20242 so the insns they produce are never combined or rearranged in any way.
   20243 
   20244  Here is an example, taken from the 68000 machine description:
   20245 
   20246      (define_peephole
   20247        [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
   20248         (set (match_operand:DF 0 "register_operand" "=f")
   20249              (match_operand:DF 1 "register_operand" "ad"))]
   20250        "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
   20251      {
   20252        rtx xoperands[2];
   20253        xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
   20254      #ifdef MOTOROLA
   20255        output_asm_insn ("move.l %1,(sp)", xoperands);
   20256        output_asm_insn ("move.l %1,-(sp)", operands);
   20257        return "fmove.d (sp)+,%0";
   20258      #else
   20259        output_asm_insn ("movel %1,sp@", xoperands);
   20260        output_asm_insn ("movel %1,sp@-", operands);
   20261        return "fmoved sp@+,%0";
   20262      #endif
   20263      })
   20264 
   20265  The effect of this optimization is to change
   20266 
   20267      jbsr _foobar
   20268      addql #4,sp
   20269      movel d1,sp@-
   20270      movel d0,sp@-
   20271      fmoved sp@+,fp0
   20272 
   20273 into
   20274 
   20275      jbsr _foobar
   20276      movel d1,sp@
   20277      movel d0,sp@-
   20278      fmoved sp@+,fp0
   20279 
   20280  INSN-PATTERN-1 and so on look _almost_ like the second operand of
   20281 `define_insn'.  There is one important difference: the second operand
   20282 of `define_insn' consists of one or more RTX's enclosed in square
   20283 brackets.  Usually, there is only one: then the same action can be
   20284 written as an element of a `define_peephole'.  But when there are
   20285 multiple actions in a `define_insn', they are implicitly enclosed in a
   20286 `parallel'.  Then you must explicitly write the `parallel', and the
   20287 square brackets within it, in the `define_peephole'.  Thus, if an insn
   20288 pattern looks like this,
   20289 
   20290      (define_insn "divmodsi4"
   20291        [(set (match_operand:SI 0 "general_operand" "=d")
   20292              (div:SI (match_operand:SI 1 "general_operand" "0")
   20293                      (match_operand:SI 2 "general_operand" "dmsK")))
   20294         (set (match_operand:SI 3 "general_operand" "=d")
   20295              (mod:SI (match_dup 1) (match_dup 2)))]
   20296        "TARGET_68020"
   20297        "divsl%.l %2,%3:%0")
   20298 
   20299 then the way to mention this insn in a peephole is as follows:
   20300 
   20301      (define_peephole
   20302        [...
   20303         (parallel
   20304          [(set (match_operand:SI 0 "general_operand" "=d")
   20305                (div:SI (match_operand:SI 1 "general_operand" "0")
   20306                        (match_operand:SI 2 "general_operand" "dmsK")))
   20307           (set (match_operand:SI 3 "general_operand" "=d")
   20308                (mod:SI (match_dup 1) (match_dup 2)))])
   20309         ...]
   20310        ...)
   20311 
   20312 
   20313 File: gccint.info,  Node: define_peephole2,  Prev: define_peephole,  Up: Peephole Definitions
   20314 
   20315 14.18.2 RTL to RTL Peephole Optimizers
   20316 --------------------------------------
   20317 
   20318 The `define_peephole2' definition tells the compiler how to substitute
   20319 one sequence of instructions for another sequence, what additional
   20320 scratch registers may be needed and what their lifetimes must be.
   20321 
   20322      (define_peephole2
   20323        [INSN-PATTERN-1
   20324         INSN-PATTERN-2
   20325         ...]
   20326        "CONDITION"
   20327        [NEW-INSN-PATTERN-1
   20328         NEW-INSN-PATTERN-2
   20329         ...]
   20330        "PREPARATION-STATEMENTS")
   20331 
   20332  The definition is almost identical to `define_split' (*note Insn
   20333 Splitting::) except that the pattern to match is not a single
   20334 instruction, but a sequence of instructions.
   20335 
   20336  It is possible to request additional scratch registers for use in the
   20337 output template.  If appropriate registers are not free, the pattern
   20338 will simply not match.
   20339 
   20340  Scratch registers are requested with a `match_scratch' pattern at the
   20341 top level of the input pattern.  The allocated register (initially) will
   20342 be dead at the point requested within the original sequence.  If the
   20343 scratch is used at more than a single point, a `match_dup' pattern at
   20344 the top level of the input pattern marks the last position in the input
   20345 sequence at which the register must be available.
   20346 
   20347  Here is an example from the IA-32 machine description:
   20348 
   20349      (define_peephole2
   20350        [(match_scratch:SI 2 "r")
   20351         (parallel [(set (match_operand:SI 0 "register_operand" "")
   20352                         (match_operator:SI 3 "arith_or_logical_operator"
   20353                           [(match_dup 0)
   20354                            (match_operand:SI 1 "memory_operand" "")]))
   20355                    (clobber (reg:CC 17))])]
   20356        "! optimize_size && ! TARGET_READ_MODIFY"
   20357        [(set (match_dup 2) (match_dup 1))
   20358         (parallel [(set (match_dup 0)
   20359                         (match_op_dup 3 [(match_dup 0) (match_dup 2)]))
   20360                    (clobber (reg:CC 17))])]
   20361        "")
   20362 
   20363 This pattern tries to split a load from its use in the hopes that we'll
   20364 be able to schedule around the memory load latency.  It allocates a
   20365 single `SImode' register of class `GENERAL_REGS' (`"r"') that needs to
   20366 be live only at the point just before the arithmetic.
   20367 
   20368  A real example requiring extended scratch lifetimes is harder to come
   20369 by, so here's a silly made-up example:
   20370 
   20371      (define_peephole2
   20372        [(match_scratch:SI 4 "r")
   20373         (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" ""))
   20374         (set (match_operand:SI 2 "" "") (match_dup 1))
   20375         (match_dup 4)
   20376         (set (match_operand:SI 3 "" "") (match_dup 1))]
   20377        "/* determine 1 does not overlap 0 and 2 */"
   20378        [(set (match_dup 4) (match_dup 1))
   20379         (set (match_dup 0) (match_dup 4))
   20380         (set (match_dup 2) (match_dup 4))]
   20381         (set (match_dup 3) (match_dup 4))]
   20382        "")
   20383 
   20384 If we had not added the `(match_dup 4)' in the middle of the input
   20385 sequence, it might have been the case that the register we chose at the
   20386 beginning of the sequence is killed by the first or second `set'.
   20387 
   20388 
   20389 File: gccint.info,  Node: Insn Attributes,  Next: Conditional Execution,  Prev: Peephole Definitions,  Up: Machine Desc
   20390 
   20391 14.19 Instruction Attributes
   20392 ============================
   20393 
   20394 In addition to describing the instruction supported by the target
   20395 machine, the `md' file also defines a group of "attributes" and a set of
   20396 values for each.  Every generated insn is assigned a value for each
   20397 attribute.  One possible attribute would be the effect that the insn
   20398 has on the machine's condition code.  This attribute can then be used
   20399 by `NOTICE_UPDATE_CC' to track the condition codes.
   20400 
   20401 * Menu:
   20402 
   20403 * Defining Attributes:: Specifying attributes and their values.
   20404 * Expressions::         Valid expressions for attribute values.
   20405 * Tagging Insns::       Assigning attribute values to insns.
   20406 * Attr Example::        An example of assigning attributes.
   20407 * Insn Lengths::        Computing the length of insns.
   20408 * Constant Attributes:: Defining attributes that are constant.
   20409 * Delay Slots::         Defining delay slots required for a machine.
   20410 * Processor pipeline description:: Specifying information for insn scheduling.
   20411 
   20412 
   20413 File: gccint.info,  Node: Defining Attributes,  Next: Expressions,  Up: Insn Attributes
   20414 
   20415 14.19.1 Defining Attributes and their Values
   20416 --------------------------------------------
   20417 
   20418 The `define_attr' expression is used to define each attribute required
   20419 by the target machine.  It looks like:
   20420 
   20421      (define_attr NAME LIST-OF-VALUES DEFAULT)
   20422 
   20423  NAME is a string specifying the name of the attribute being defined.
   20424 
   20425  LIST-OF-VALUES is either a string that specifies a comma-separated
   20426 list of values that can be assigned to the attribute, or a null string
   20427 to indicate that the attribute takes numeric values.
   20428 
   20429  DEFAULT is an attribute expression that gives the value of this
   20430 attribute for insns that match patterns whose definition does not
   20431 include an explicit value for this attribute.  *Note Attr Example::,
   20432 for more information on the handling of defaults.  *Note Constant
   20433 Attributes::, for information on attributes that do not depend on any
   20434 particular insn.
   20435 
   20436  For each defined attribute, a number of definitions are written to the
   20437 `insn-attr.h' file.  For cases where an explicit set of values is
   20438 specified for an attribute, the following are defined:
   20439 
   20440    * A `#define' is written for the symbol `HAVE_ATTR_NAME'.
   20441 
   20442    * An enumerated class is defined for `attr_NAME' with elements of
   20443      the form `UPPER-NAME_UPPER-VALUE' where the attribute name and
   20444      value are first converted to uppercase.
   20445 
   20446    * A function `get_attr_NAME' is defined that is passed an insn and
   20447      returns the attribute value for that insn.
   20448 
   20449  For example, if the following is present in the `md' file:
   20450 
   20451      (define_attr "type" "branch,fp,load,store,arith" ...)
   20452 
   20453 the following lines will be written to the file `insn-attr.h'.
   20454 
   20455      #define HAVE_ATTR_type
   20456      enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
   20457                       TYPE_STORE, TYPE_ARITH};
   20458      extern enum attr_type get_attr_type ();
   20459 
   20460  If the attribute takes numeric values, no `enum' type will be defined
   20461 and the function to obtain the attribute's value will return `int'.
   20462 
   20463 
   20464 File: gccint.info,  Node: Expressions,  Next: Tagging Insns,  Prev: Defining Attributes,  Up: Insn Attributes
   20465 
   20466 14.19.2 Attribute Expressions
   20467 -----------------------------
   20468 
   20469 RTL expressions used to define attributes use the codes described above
   20470 plus a few specific to attribute definitions, to be discussed below.
   20471 Attribute value expressions must have one of the following forms:
   20472 
   20473 `(const_int I)'
   20474      The integer I specifies the value of a numeric attribute.  I must
   20475      be non-negative.
   20476 
   20477      The value of a numeric attribute can be specified either with a
   20478      `const_int', or as an integer represented as a string in
   20479      `const_string', `eq_attr' (see below), `attr', `symbol_ref',
   20480      simple arithmetic expressions, and `set_attr' overrides on
   20481      specific instructions (*note Tagging Insns::).
   20482 
   20483 `(const_string VALUE)'
   20484      The string VALUE specifies a constant attribute value.  If VALUE
   20485      is specified as `"*"', it means that the default value of the
   20486      attribute is to be used for the insn containing this expression.
   20487      `"*"' obviously cannot be used in the DEFAULT expression of a
   20488      `define_attr'.
   20489 
   20490      If the attribute whose value is being specified is numeric, VALUE
   20491      must be a string containing a non-negative integer (normally
   20492      `const_int' would be used in this case).  Otherwise, it must
   20493      contain one of the valid values for the attribute.
   20494 
   20495 `(if_then_else TEST TRUE-VALUE FALSE-VALUE)'
   20496      TEST specifies an attribute test, whose format is defined below.
   20497      The value of this expression is TRUE-VALUE if TEST is true,
   20498      otherwise it is FALSE-VALUE.
   20499 
   20500 `(cond [TEST1 VALUE1 ...] DEFAULT)'
   20501      The first operand of this expression is a vector containing an even
   20502      number of expressions and consisting of pairs of TEST and VALUE
   20503      expressions.  The value of the `cond' expression is that of the
   20504      VALUE corresponding to the first true TEST expression.  If none of
   20505      the TEST expressions are true, the value of the `cond' expression
   20506      is that of the DEFAULT expression.
   20507 
   20508  TEST expressions can have one of the following forms:
   20509 
   20510 `(const_int I)'
   20511      This test is true if I is nonzero and false otherwise.
   20512 
   20513 `(not TEST)'
   20514 `(ior TEST1 TEST2)'
   20515 `(and TEST1 TEST2)'
   20516      These tests are true if the indicated logical function is true.
   20517 
   20518 `(match_operand:M N PRED CONSTRAINTS)'
   20519      This test is true if operand N of the insn whose attribute value
   20520      is being determined has mode M (this part of the test is ignored
   20521      if M is `VOIDmode') and the function specified by the string PRED
   20522      returns a nonzero value when passed operand N and mode M (this
   20523      part of the test is ignored if PRED is the null string).
   20524 
   20525      The CONSTRAINTS operand is ignored and should be the null string.
   20526 
   20527 `(le ARITH1 ARITH2)'
   20528 `(leu ARITH1 ARITH2)'
   20529 `(lt ARITH1 ARITH2)'
   20530 `(ltu ARITH1 ARITH2)'
   20531 `(gt ARITH1 ARITH2)'
   20532 `(gtu ARITH1 ARITH2)'
   20533 `(ge ARITH1 ARITH2)'
   20534 `(geu ARITH1 ARITH2)'
   20535 `(ne ARITH1 ARITH2)'
   20536 `(eq ARITH1 ARITH2)'
   20537      These tests are true if the indicated comparison of the two
   20538      arithmetic expressions is true.  Arithmetic expressions are formed
   20539      with `plus', `minus', `mult', `div', `mod', `abs', `neg', `and',
   20540      `ior', `xor', `not', `ashift', `lshiftrt', and `ashiftrt'
   20541      expressions.
   20542 
   20543      `const_int' and `symbol_ref' are always valid terms (*note Insn
   20544      Lengths::,for additional forms).  `symbol_ref' is a string
   20545      denoting a C expression that yields an `int' when evaluated by the
   20546      `get_attr_...' routine.  It should normally be a global variable.
   20547 
   20548 `(eq_attr NAME VALUE)'
   20549      NAME is a string specifying the name of an attribute.
   20550 
   20551      VALUE is a string that is either a valid value for attribute NAME,
   20552      a comma-separated list of values, or `!' followed by a value or
   20553      list.  If VALUE does not begin with a `!', this test is true if
   20554      the value of the NAME attribute of the current insn is in the list
   20555      specified by VALUE.  If VALUE begins with a `!', this test is true
   20556      if the attribute's value is _not_ in the specified list.
   20557 
   20558      For example,
   20559 
   20560           (eq_attr "type" "load,store")
   20561 
   20562      is equivalent to
   20563 
   20564           (ior (eq_attr "type" "load") (eq_attr "type" "store"))
   20565 
   20566      If NAME specifies an attribute of `alternative', it refers to the
   20567      value of the compiler variable `which_alternative' (*note Output
   20568      Statement::) and the values must be small integers.  For example,
   20569 
   20570           (eq_attr "alternative" "2,3")
   20571 
   20572      is equivalent to
   20573 
   20574           (ior (eq (symbol_ref "which_alternative") (const_int 2))
   20575                (eq (symbol_ref "which_alternative") (const_int 3)))
   20576 
   20577      Note that, for most attributes, an `eq_attr' test is simplified in
   20578      cases where the value of the attribute being tested is known for
   20579      all insns matching a particular pattern.  This is by far the most
   20580      common case.
   20581 
   20582 `(attr_flag NAME)'
   20583      The value of an `attr_flag' expression is true if the flag
   20584      specified by NAME is true for the `insn' currently being scheduled.
   20585 
   20586      NAME is a string specifying one of a fixed set of flags to test.
   20587      Test the flags `forward' and `backward' to determine the direction
   20588      of a conditional branch.  Test the flags `very_likely', `likely',
   20589      `very_unlikely', and `unlikely' to determine if a conditional
   20590      branch is expected to be taken.
   20591 
   20592      If the `very_likely' flag is true, then the `likely' flag is also
   20593      true.  Likewise for the `very_unlikely' and `unlikely' flags.
   20594 
   20595      This example describes a conditional branch delay slot which can
   20596      be nullified for forward branches that are taken (annul-true) or
   20597      for backward branches which are not taken (annul-false).
   20598 
   20599           (define_delay (eq_attr "type" "cbranch")
   20600             [(eq_attr "in_branch_delay" "true")
   20601              (and (eq_attr "in_branch_delay" "true")
   20602                   (attr_flag "forward"))
   20603              (and (eq_attr "in_branch_delay" "true")
   20604                   (attr_flag "backward"))])
   20605 
   20606      The `forward' and `backward' flags are false if the current `insn'
   20607      being scheduled is not a conditional branch.
   20608 
   20609      The `very_likely' and `likely' flags are true if the `insn' being
   20610      scheduled is not a conditional branch.  The `very_unlikely' and
   20611      `unlikely' flags are false if the `insn' being scheduled is not a
   20612      conditional branch.
   20613 
   20614      `attr_flag' is only used during delay slot scheduling and has no
   20615      meaning to other passes of the compiler.
   20616 
   20617 `(attr NAME)'
   20618      The value of another attribute is returned.  This is most useful
   20619      for numeric attributes, as `eq_attr' and `attr_flag' produce more
   20620      efficient code for non-numeric attributes.
   20621 
   20622 
   20623 File: gccint.info,  Node: Tagging Insns,  Next: Attr Example,  Prev: Expressions,  Up: Insn Attributes
   20624 
   20625 14.19.3 Assigning Attribute Values to Insns
   20626 -------------------------------------------
   20627 
   20628 The value assigned to an attribute of an insn is primarily determined by
   20629 which pattern is matched by that insn (or which `define_peephole'
   20630 generated it).  Every `define_insn' and `define_peephole' can have an
   20631 optional last argument to specify the values of attributes for matching
   20632 insns.  The value of any attribute not specified in a particular insn
   20633 is set to the default value for that attribute, as specified in its
   20634 `define_attr'.  Extensive use of default values for attributes permits
   20635 the specification of the values for only one or two attributes in the
   20636 definition of most insn patterns, as seen in the example in the next
   20637 section.
   20638 
   20639  The optional last argument of `define_insn' and `define_peephole' is a
   20640 vector of expressions, each of which defines the value for a single
   20641 attribute.  The most general way of assigning an attribute's value is
   20642 to use a `set' expression whose first operand is an `attr' expression
   20643 giving the name of the attribute being set.  The second operand of the
   20644 `set' is an attribute expression (*note Expressions::) giving the value
   20645 of the attribute.
   20646 
   20647  When the attribute value depends on the `alternative' attribute (i.e.,
   20648 which is the applicable alternative in the constraint of the insn), the
   20649 `set_attr_alternative' expression can be used.  It allows the
   20650 specification of a vector of attribute expressions, one for each
   20651 alternative.
   20652 
   20653  When the generality of arbitrary attribute expressions is not required,
   20654 the simpler `set_attr' expression can be used, which allows specifying
   20655 a string giving either a single attribute value or a list of attribute
   20656 values, one for each alternative.
   20657 
   20658  The form of each of the above specifications is shown below.  In each
   20659 case, NAME is a string specifying the attribute to be set.
   20660 
   20661 `(set_attr NAME VALUE-STRING)'
   20662      VALUE-STRING is either a string giving the desired attribute value,
   20663      or a string containing a comma-separated list giving the values for
   20664      succeeding alternatives.  The number of elements must match the
   20665      number of alternatives in the constraint of the insn pattern.
   20666 
   20667      Note that it may be useful to specify `*' for some alternative, in
   20668      which case the attribute will assume its default value for insns
   20669      matching that alternative.
   20670 
   20671 `(set_attr_alternative NAME [VALUE1 VALUE2 ...])'
   20672      Depending on the alternative of the insn, the value will be one of
   20673      the specified values.  This is a shorthand for using a `cond' with
   20674      tests on the `alternative' attribute.
   20675 
   20676 `(set (attr NAME) VALUE)'
   20677      The first operand of this `set' must be the special RTL expression
   20678      `attr', whose sole operand is a string giving the name of the
   20679      attribute being set.  VALUE is the value of the attribute.
   20680 
   20681  The following shows three different ways of representing the same
   20682 attribute value specification:
   20683 
   20684      (set_attr "type" "load,store,arith")
   20685 
   20686      (set_attr_alternative "type"
   20687                            [(const_string "load") (const_string "store")
   20688                             (const_string "arith")])
   20689 
   20690      (set (attr "type")
   20691           (cond [(eq_attr "alternative" "1") (const_string "load")
   20692                  (eq_attr "alternative" "2") (const_string "store")]
   20693                 (const_string "arith")))
   20694 
   20695  The `define_asm_attributes' expression provides a mechanism to specify
   20696 the attributes assigned to insns produced from an `asm' statement.  It
   20697 has the form:
   20698 
   20699      (define_asm_attributes [ATTR-SETS])
   20700 
   20701 where ATTR-SETS is specified the same as for both the `define_insn' and
   20702 the `define_peephole' expressions.
   20703 
   20704  These values will typically be the "worst case" attribute values.  For
   20705 example, they might indicate that the condition code will be clobbered.
   20706 
   20707  A specification for a `length' attribute is handled specially.  The
   20708 way to compute the length of an `asm' insn is to multiply the length
   20709 specified in the expression `define_asm_attributes' by the number of
   20710 machine instructions specified in the `asm' statement, determined by
   20711 counting the number of semicolons and newlines in the string.
   20712 Therefore, the value of the `length' attribute specified in a
   20713 `define_asm_attributes' should be the maximum possible length of a
   20714 single machine instruction.
   20715 
   20716 
   20717 File: gccint.info,  Node: Attr Example,  Next: Insn Lengths,  Prev: Tagging Insns,  Up: Insn Attributes
   20718 
   20719 14.19.4 Example of Attribute Specifications
   20720 -------------------------------------------
   20721 
   20722 The judicious use of defaulting is important in the efficient use of
   20723 insn attributes.  Typically, insns are divided into "types" and an
   20724 attribute, customarily called `type', is used to represent this value.
   20725 This attribute is normally used only to define the default value for
   20726 other attributes.  An example will clarify this usage.
   20727 
   20728  Assume we have a RISC machine with a condition code and in which only
   20729 full-word operations are performed in registers.  Let us assume that we
   20730 can divide all insns into loads, stores, (integer) arithmetic
   20731 operations, floating point operations, and branches.
   20732 
   20733  Here we will concern ourselves with determining the effect of an insn
   20734 on the condition code and will limit ourselves to the following possible
   20735 effects:  The condition code can be set unpredictably (clobbered), not
   20736 be changed, be set to agree with the results of the operation, or only
   20737 changed if the item previously set into the condition code has been
   20738 modified.
   20739 
   20740  Here is part of a sample `md' file for such a machine:
   20741 
   20742      (define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
   20743 
   20744      (define_attr "cc" "clobber,unchanged,set,change0"
   20745                   (cond [(eq_attr "type" "load")
   20746                              (const_string "change0")
   20747                          (eq_attr "type" "store,branch")
   20748                              (const_string "unchanged")
   20749                          (eq_attr "type" "arith")
   20750                              (if_then_else (match_operand:SI 0 "" "")
   20751                                            (const_string "set")
   20752                                            (const_string "clobber"))]
   20753                         (const_string "clobber")))
   20754 
   20755      (define_insn ""
   20756        [(set (match_operand:SI 0 "general_operand" "=r,r,m")
   20757              (match_operand:SI 1 "general_operand" "r,m,r"))]
   20758        ""
   20759        "@
   20760         move %0,%1
   20761         load %0,%1
   20762         store %0,%1"
   20763        [(set_attr "type" "arith,load,store")])
   20764 
   20765  Note that we assume in the above example that arithmetic operations
   20766 performed on quantities smaller than a machine word clobber the
   20767 condition code since they will set the condition code to a value
   20768 corresponding to the full-word result.
   20769 
   20770 
   20771 File: gccint.info,  Node: Insn Lengths,  Next: Constant Attributes,  Prev: Attr Example,  Up: Insn Attributes
   20772 
   20773 14.19.5 Computing the Length of an Insn
   20774 ---------------------------------------
   20775 
   20776 For many machines, multiple types of branch instructions are provided,
   20777 each for different length branch displacements.  In most cases, the
   20778 assembler will choose the correct instruction to use.  However, when
   20779 the assembler cannot do so, GCC can when a special attribute, the
   20780 `length' attribute, is defined.  This attribute must be defined to have
   20781 numeric values by specifying a null string in its `define_attr'.
   20782 
   20783  In the case of the `length' attribute, two additional forms of
   20784 arithmetic terms are allowed in test expressions:
   20785 
   20786 `(match_dup N)'
   20787      This refers to the address of operand N of the current insn, which
   20788      must be a `label_ref'.
   20789 
   20790 `(pc)'
   20791      This refers to the address of the _current_ insn.  It might have
   20792      been more consistent with other usage to make this the address of
   20793      the _next_ insn but this would be confusing because the length of
   20794      the current insn is to be computed.
   20795 
   20796  For normal insns, the length will be determined by value of the
   20797 `length' attribute.  In the case of `addr_vec' and `addr_diff_vec' insn
   20798 patterns, the length is computed as the number of vectors multiplied by
   20799 the size of each vector.
   20800 
   20801  Lengths are measured in addressable storage units (bytes).
   20802 
   20803  The following macros can be used to refine the length computation:
   20804 
   20805 `ADJUST_INSN_LENGTH (INSN, LENGTH)'
   20806      If defined, modifies the length assigned to instruction INSN as a
   20807      function of the context in which it is used.  LENGTH is an lvalue
   20808      that contains the initially computed length of the insn and should
   20809      be updated with the correct length of the insn.
   20810 
   20811      This macro will normally not be required.  A case in which it is
   20812      required is the ROMP.  On this machine, the size of an `addr_vec'
   20813      insn must be increased by two to compensate for the fact that
   20814      alignment may be required.
   20815 
   20816  The routine that returns `get_attr_length' (the value of the `length'
   20817 attribute) can be used by the output routine to determine the form of
   20818 the branch instruction to be written, as the example below illustrates.
   20819 
   20820  As an example of the specification of variable-length branches,
   20821 consider the IBM 360.  If we adopt the convention that a register will
   20822 be set to the starting address of a function, we can jump to labels
   20823 within 4k of the start using a four-byte instruction.  Otherwise, we
   20824 need a six-byte sequence to load the address from memory and then
   20825 branch to it.
   20826 
   20827  On such a machine, a pattern for a branch instruction might be
   20828 specified as follows:
   20829 
   20830      (define_insn "jump"
   20831        [(set (pc)
   20832              (label_ref (match_operand 0 "" "")))]
   20833        ""
   20834      {
   20835         return (get_attr_length (insn) == 4
   20836                 ? "b %l0" : "l r15,=a(%l0); br r15");
   20837      }
   20838        [(set (attr "length")
   20839              (if_then_else (lt (match_dup 0) (const_int 4096))
   20840                            (const_int 4)
   20841                            (const_int 6)))])
   20842 
   20843 
   20844 File: gccint.info,  Node: Constant Attributes,  Next: Delay Slots,  Prev: Insn Lengths,  Up: Insn Attributes
   20845 
   20846 14.19.6 Constant Attributes
   20847 ---------------------------
   20848 
   20849 A special form of `define_attr', where the expression for the default
   20850 value is a `const' expression, indicates an attribute that is constant
   20851 for a given run of the compiler.  Constant attributes may be used to
   20852 specify which variety of processor is used.  For example,
   20853 
   20854      (define_attr "cpu" "m88100,m88110,m88000"
   20855       (const
   20856        (cond [(symbol_ref "TARGET_88100") (const_string "m88100")
   20857               (symbol_ref "TARGET_88110") (const_string "m88110")]
   20858              (const_string "m88000"))))
   20859 
   20860      (define_attr "memory" "fast,slow"
   20861       (const
   20862        (if_then_else (symbol_ref "TARGET_FAST_MEM")
   20863                      (const_string "fast")
   20864                      (const_string "slow"))))
   20865 
   20866  The routine generated for constant attributes has no parameters as it
   20867 does not depend on any particular insn.  RTL expressions used to define
   20868 the value of a constant attribute may use the `symbol_ref' form, but
   20869 may not use either the `match_operand' form or `eq_attr' forms
   20870 involving insn attributes.
   20871 
   20872 
   20873 File: gccint.info,  Node: Delay Slots,  Next: Processor pipeline description,  Prev: Constant Attributes,  Up: Insn Attributes
   20874 
   20875 14.19.7 Delay Slot Scheduling
   20876 -----------------------------
   20877 
   20878 The insn attribute mechanism can be used to specify the requirements for
   20879 delay slots, if any, on a target machine.  An instruction is said to
   20880 require a "delay slot" if some instructions that are physically after
   20881 the instruction are executed as if they were located before it.
   20882 Classic examples are branch and call instructions, which often execute
   20883 the following instruction before the branch or call is performed.
   20884 
   20885  On some machines, conditional branch instructions can optionally
   20886 "annul" instructions in the delay slot.  This means that the
   20887 instruction will not be executed for certain branch outcomes.  Both
   20888 instructions that annul if the branch is true and instructions that
   20889 annul if the branch is false are supported.
   20890 
   20891  Delay slot scheduling differs from instruction scheduling in that
   20892 determining whether an instruction needs a delay slot is dependent only
   20893 on the type of instruction being generated, not on data flow between the
   20894 instructions.  See the next section for a discussion of data-dependent
   20895 instruction scheduling.
   20896 
   20897  The requirement of an insn needing one or more delay slots is indicated
   20898 via the `define_delay' expression.  It has the following form:
   20899 
   20900      (define_delay TEST
   20901                    [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1
   20902                     DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2
   20903                     ...])
   20904 
   20905  TEST is an attribute test that indicates whether this `define_delay'
   20906 applies to a particular insn.  If so, the number of required delay
   20907 slots is determined by the length of the vector specified as the second
   20908 argument.  An insn placed in delay slot N must satisfy attribute test
   20909 DELAY-N.  ANNUL-TRUE-N is an attribute test that specifies which insns
   20910 may be annulled if the branch is true.  Similarly, ANNUL-FALSE-N
   20911 specifies which insns in the delay slot may be annulled if the branch
   20912 is false.  If annulling is not supported for that delay slot, `(nil)'
   20913 should be coded.
   20914 
   20915  For example, in the common case where branch and call insns require a
   20916 single delay slot, which may contain any insn other than a branch or
   20917 call, the following would be placed in the `md' file:
   20918 
   20919      (define_delay (eq_attr "type" "branch,call")
   20920                    [(eq_attr "type" "!branch,call") (nil) (nil)])
   20921 
   20922  Multiple `define_delay' expressions may be specified.  In this case,
   20923 each such expression specifies different delay slot requirements and
   20924 there must be no insn for which tests in two `define_delay' expressions
   20925 are both true.
   20926 
   20927  For example, if we have a machine that requires one delay slot for
   20928 branches but two for calls,  no delay slot can contain a branch or call
   20929 insn, and any valid insn in the delay slot for the branch can be
   20930 annulled if the branch is true, we might represent this as follows:
   20931 
   20932      (define_delay (eq_attr "type" "branch")
   20933         [(eq_attr "type" "!branch,call")
   20934          (eq_attr "type" "!branch,call")
   20935          (nil)])
   20936 
   20937      (define_delay (eq_attr "type" "call")
   20938                    [(eq_attr "type" "!branch,call") (nil) (nil)
   20939                     (eq_attr "type" "!branch,call") (nil) (nil)])
   20940 
   20941 
   20942 File: gccint.info,  Node: Processor pipeline description,  Prev: Delay Slots,  Up: Insn Attributes
   20943 
   20944 14.19.8 Specifying processor pipeline description
   20945 -------------------------------------------------
   20946 
   20947 To achieve better performance, most modern processors (super-pipelined,
   20948 superscalar RISC, and VLIW processors) have many "functional units" on
   20949 which several instructions can be executed simultaneously.  An
   20950 instruction starts execution if its issue conditions are satisfied.  If
   20951 not, the instruction is stalled until its conditions are satisfied.
   20952 Such "interlock (pipeline) delay" causes interruption of the fetching
   20953 of successor instructions (or demands nop instructions, e.g. for some
   20954 MIPS processors).
   20955 
   20956  There are two major kinds of interlock delays in modern processors.
   20957 The first one is a data dependence delay determining "instruction
   20958 latency time".  The instruction execution is not started until all
   20959 source data have been evaluated by prior instructions (there are more
   20960 complex cases when the instruction execution starts even when the data
   20961 are not available but will be ready in given time after the instruction
   20962 execution start).  Taking the data dependence delays into account is
   20963 simple.  The data dependence (true, output, and anti-dependence) delay
   20964 between two instructions is given by a constant.  In most cases this
   20965 approach is adequate.  The second kind of interlock delays is a
   20966 reservation delay.  The reservation delay means that two instructions
   20967 under execution will be in need of shared processors resources, i.e.
   20968 buses, internal registers, and/or functional units, which are reserved
   20969 for some time.  Taking this kind of delay into account is complex
   20970 especially for modern RISC processors.
   20971 
   20972  The task of exploiting more processor parallelism is solved by an
   20973 instruction scheduler.  For a better solution to this problem, the
   20974 instruction scheduler has to have an adequate description of the
   20975 processor parallelism (or "pipeline description").  GCC machine
   20976 descriptions describe processor parallelism and functional unit
   20977 reservations for groups of instructions with the aid of "regular
   20978 expressions".
   20979 
   20980  The GCC instruction scheduler uses a "pipeline hazard recognizer" to
   20981 figure out the possibility of the instruction issue by the processor on
   20982 a given simulated processor cycle.  The pipeline hazard recognizer is
   20983 automatically generated from the processor pipeline description.  The
   20984 pipeline hazard recognizer generated from the machine description is
   20985 based on a deterministic finite state automaton (DFA): the instruction
   20986 issue is possible if there is a transition from one automaton state to
   20987 another one.  This algorithm is very fast, and furthermore, its speed
   20988 is not dependent on processor complexity(1).
   20989 
   20990  The rest of this section describes the directives that constitute an
   20991 automaton-based processor pipeline description.  The order of these
   20992 constructions within the machine description file is not important.
   20993 
   20994  The following optional construction describes names of automata
   20995 generated and used for the pipeline hazards recognition.  Sometimes the
   20996 generated finite state automaton used by the pipeline hazard recognizer
   20997 is large.  If we use more than one automaton and bind functional units
   20998 to the automata, the total size of the automata is usually less than
   20999 the size of the single automaton.  If there is no one such
   21000 construction, only one finite state automaton is generated.
   21001 
   21002      (define_automaton AUTOMATA-NAMES)
   21003 
   21004  AUTOMATA-NAMES is a string giving names of the automata.  The names
   21005 are separated by commas.  All the automata should have unique names.
   21006 The automaton name is used in the constructions `define_cpu_unit' and
   21007 `define_query_cpu_unit'.
   21008 
   21009  Each processor functional unit used in the description of instruction
   21010 reservations should be described by the following construction.
   21011 
   21012      (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
   21013 
   21014  UNIT-NAMES is a string giving the names of the functional units
   21015 separated by commas.  Don't use name `nothing', it is reserved for
   21016 other goals.
   21017 
   21018  AUTOMATON-NAME is a string giving the name of the automaton with which
   21019 the unit is bound.  The automaton should be described in construction
   21020 `define_automaton'.  You should give "automaton-name", if there is a
   21021 defined automaton.
   21022 
   21023  The assignment of units to automata are constrained by the uses of the
   21024 units in insn reservations.  The most important constraint is: if a
   21025 unit reservation is present on a particular cycle of an alternative for
   21026 an insn reservation, then some unit from the same automaton must be
   21027 present on the same cycle for the other alternatives of the insn
   21028 reservation.  The rest of the constraints are mentioned in the
   21029 description of the subsequent constructions.
   21030 
   21031  The following construction describes CPU functional units analogously
   21032 to `define_cpu_unit'.  The reservation of such units can be queried for
   21033 an automaton state.  The instruction scheduler never queries
   21034 reservation of functional units for given automaton state.  So as a
   21035 rule, you don't need this construction.  This construction could be
   21036 used for future code generation goals (e.g. to generate VLIW insn
   21037 templates).
   21038 
   21039      (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
   21040 
   21041  UNIT-NAMES is a string giving names of the functional units separated
   21042 by commas.
   21043 
   21044  AUTOMATON-NAME is a string giving the name of the automaton with which
   21045 the unit is bound.
   21046 
   21047  The following construction is the major one to describe pipeline
   21048 characteristics of an instruction.
   21049 
   21050      (define_insn_reservation INSN-NAME DEFAULT_LATENCY
   21051                               CONDITION REGEXP)
   21052 
   21053  DEFAULT_LATENCY is a number giving latency time of the instruction.
   21054 There is an important difference between the old description and the
   21055 automaton based pipeline description.  The latency time is used for all
   21056 dependencies when we use the old description.  In the automaton based
   21057 pipeline description, the given latency time is only used for true
   21058 dependencies.  The cost of anti-dependencies is always zero and the
   21059 cost of output dependencies is the difference between latency times of
   21060 the producing and consuming insns (if the difference is negative, the
   21061 cost is considered to be zero).  You can always change the default
   21062 costs for any description by using the target hook
   21063 `TARGET_SCHED_ADJUST_COST' (*note Scheduling::).
   21064 
   21065  INSN-NAME is a string giving the internal name of the insn.  The
   21066 internal names are used in constructions `define_bypass' and in the
   21067 automaton description file generated for debugging.  The internal name
   21068 has nothing in common with the names in `define_insn'.  It is a good
   21069 practice to use insn classes described in the processor manual.
   21070 
   21071  CONDITION defines what RTL insns are described by this construction.
   21072 You should remember that you will be in trouble if CONDITION for two or
   21073 more different `define_insn_reservation' constructions is TRUE for an
   21074 insn.  In this case what reservation will be used for the insn is not
   21075 defined.  Such cases are not checked during generation of the pipeline
   21076 hazards recognizer because in general recognizing that two conditions
   21077 may have the same value is quite difficult (especially if the conditions
   21078 contain `symbol_ref').  It is also not checked during the pipeline
   21079 hazard recognizer work because it would slow down the recognizer
   21080 considerably.
   21081 
   21082  REGEXP is a string describing the reservation of the cpu's functional
   21083 units by the instruction.  The reservations are described by a regular
   21084 expression according to the following syntax:
   21085 
   21086             regexp = regexp "," oneof
   21087                    | oneof
   21088 
   21089             oneof = oneof "|" allof
   21090                   | allof
   21091 
   21092             allof = allof "+" repeat
   21093                   | repeat
   21094 
   21095             repeat = element "*" number
   21096                    | element
   21097 
   21098             element = cpu_function_unit_name
   21099                     | reservation_name
   21100                     | result_name
   21101                     | "nothing"
   21102                     | "(" regexp ")"
   21103 
   21104    * `,' is used for describing the start of the next cycle in the
   21105      reservation.
   21106 
   21107    * `|' is used for describing a reservation described by the first
   21108      regular expression *or* a reservation described by the second
   21109      regular expression *or* etc.
   21110 
   21111    * `+' is used for describing a reservation described by the first
   21112      regular expression *and* a reservation described by the second
   21113      regular expression *and* etc.
   21114 
   21115    * `*' is used for convenience and simply means a sequence in which
   21116      the regular expression are repeated NUMBER times with cycle
   21117      advancing (see `,').
   21118 
   21119    * `cpu_function_unit_name' denotes reservation of the named
   21120      functional unit.
   21121 
   21122    * `reservation_name' -- see description of construction
   21123      `define_reservation'.
   21124 
   21125    * `nothing' denotes no unit reservations.
   21126 
   21127  Sometimes unit reservations for different insns contain common parts.
   21128 In such case, you can simplify the pipeline description by describing
   21129 the common part by the following construction
   21130 
   21131      (define_reservation RESERVATION-NAME REGEXP)
   21132 
   21133  RESERVATION-NAME is a string giving name of REGEXP.  Functional unit
   21134 names and reservation names are in the same name space.  So the
   21135 reservation names should be different from the functional unit names
   21136 and can not be the reserved name `nothing'.
   21137 
   21138  The following construction is used to describe exceptions in the
   21139 latency time for given instruction pair.  This is so called bypasses.
   21140 
   21141      (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES
   21142                     [GUARD])
   21143 
   21144  NUMBER defines when the result generated by the instructions given in
   21145 string OUT_INSN_NAMES will be ready for the instructions given in
   21146 string IN_INSN_NAMES.  The instructions in the string are separated by
   21147 commas.
   21148 
   21149  GUARD is an optional string giving the name of a C function which
   21150 defines an additional guard for the bypass.  The function will get the
   21151 two insns as parameters.  If the function returns zero the bypass will
   21152 be ignored for this case.  The additional guard is necessary to
   21153 recognize complicated bypasses, e.g. when the consumer is only an
   21154 address of insn `store' (not a stored value).
   21155 
   21156  The following five constructions are usually used to describe VLIW
   21157 processors, or more precisely, to describe a placement of small
   21158 instructions into VLIW instruction slots.  They can be used for RISC
   21159 processors, too.
   21160 
   21161      (exclusion_set UNIT-NAMES UNIT-NAMES)
   21162      (presence_set UNIT-NAMES PATTERNS)
   21163      (final_presence_set UNIT-NAMES PATTERNS)
   21164      (absence_set UNIT-NAMES PATTERNS)
   21165      (final_absence_set UNIT-NAMES PATTERNS)
   21166 
   21167  UNIT-NAMES is a string giving names of functional units separated by
   21168 commas.
   21169 
   21170  PATTERNS is a string giving patterns of functional units separated by
   21171 comma.  Currently pattern is one unit or units separated by
   21172 white-spaces.
   21173 
   21174  The first construction (`exclusion_set') means that each functional
   21175 unit in the first string can not be reserved simultaneously with a unit
   21176 whose name is in the second string and vice versa.  For example, the
   21177 construction is useful for describing processors (e.g. some SPARC
   21178 processors) with a fully pipelined floating point functional unit which
   21179 can execute simultaneously only single floating point insns or only
   21180 double floating point insns.
   21181 
   21182  The second construction (`presence_set') means that each functional
   21183 unit in the first string can not be reserved unless at least one of
   21184 pattern of units whose names are in the second string is reserved.
   21185 This is an asymmetric relation.  For example, it is useful for
   21186 description that VLIW `slot1' is reserved after `slot0' reservation.
   21187 We could describe it by the following construction
   21188 
   21189      (presence_set "slot1" "slot0")
   21190 
   21191  Or `slot1' is reserved only after `slot0' and unit `b0' reservation.
   21192 In this case we could write
   21193 
   21194      (presence_set "slot1" "slot0 b0")
   21195 
   21196  The third construction (`final_presence_set') is analogous to
   21197 `presence_set'.  The difference between them is when checking is done.
   21198 When an instruction is issued in given automaton state reflecting all
   21199 current and planned unit reservations, the automaton state is changed.
   21200 The first state is a source state, the second one is a result state.
   21201 Checking for `presence_set' is done on the source state reservation,
   21202 checking for `final_presence_set' is done on the result reservation.
   21203 This construction is useful to describe a reservation which is actually
   21204 two subsequent reservations.  For example, if we use
   21205 
   21206      (presence_set "slot1" "slot0")
   21207 
   21208  the following insn will be never issued (because `slot1' requires
   21209 `slot0' which is absent in the source state).
   21210 
   21211      (define_reservation "insn_and_nop" "slot0 + slot1")
   21212 
   21213  but it can be issued if we use analogous `final_presence_set'.
   21214 
   21215  The forth construction (`absence_set') means that each functional unit
   21216 in the first string can be reserved only if each pattern of units whose
   21217 names are in the second string is not reserved.  This is an asymmetric
   21218 relation (actually `exclusion_set' is analogous to this one but it is
   21219 symmetric).  For example it might be useful in a VLIW description to
   21220 say that `slot0' cannot be reserved after either `slot1' or `slot2'
   21221 have been reserved.  This can be described as:
   21222 
   21223      (absence_set "slot0" "slot1, slot2")
   21224 
   21225  Or `slot2' can not be reserved if `slot0' and unit `b0' are reserved
   21226 or `slot1' and unit `b1' are reserved.  In this case we could write
   21227 
   21228      (absence_set "slot2" "slot0 b0, slot1 b1")
   21229 
   21230  All functional units mentioned in a set should belong to the same
   21231 automaton.
   21232 
   21233  The last construction (`final_absence_set') is analogous to
   21234 `absence_set' but checking is done on the result (state) reservation.
   21235 See comments for `final_presence_set'.
   21236 
   21237  You can control the generator of the pipeline hazard recognizer with
   21238 the following construction.
   21239 
   21240      (automata_option OPTIONS)
   21241 
   21242  OPTIONS is a string giving options which affect the generated code.
   21243 Currently there are the following options:
   21244 
   21245    * "no-minimization" makes no minimization of the automaton.  This is
   21246      only worth to do when we are debugging the description and need to
   21247      look more accurately at reservations of states.
   21248 
   21249    * "time" means printing time statistics about the generation of
   21250      automata.
   21251 
   21252    * "stats" means printing statistics about the generated automata
   21253      such as the number of DFA states, NDFA states and arcs.
   21254 
   21255    * "v" means a generation of the file describing the result automata.
   21256      The file has suffix `.dfa' and can be used for the description
   21257      verification and debugging.
   21258 
   21259    * "w" means a generation of warning instead of error for
   21260      non-critical errors.
   21261 
   21262    * "ndfa" makes nondeterministic finite state automata.  This affects
   21263      the treatment of operator `|' in the regular expressions.  The
   21264      usual treatment of the operator is to try the first alternative
   21265      and, if the reservation is not possible, the second alternative.
   21266      The nondeterministic treatment means trying all alternatives, some
   21267      of them may be rejected by reservations in the subsequent insns.
   21268 
   21269    * "progress" means output of a progress bar showing how many states
   21270      were generated so far for automaton being processed.  This is
   21271      useful during debugging a DFA description.  If you see too many
   21272      generated states, you could interrupt the generator of the pipeline
   21273      hazard recognizer and try to figure out a reason for generation of
   21274      the huge automaton.
   21275 
   21276  As an example, consider a superscalar RISC machine which can issue
   21277 three insns (two integer insns and one floating point insn) on the
   21278 cycle but can finish only two insns.  To describe this, we define the
   21279 following functional units.
   21280 
   21281      (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline")
   21282      (define_cpu_unit "port0, port1")
   21283 
   21284  All simple integer insns can be executed in any integer pipeline and
   21285 their result is ready in two cycles.  The simple integer insns are
   21286 issued into the first pipeline unless it is reserved, otherwise they
   21287 are issued into the second pipeline.  Integer division and
   21288 multiplication insns can be executed only in the second integer
   21289 pipeline and their results are ready correspondingly in 8 and 4 cycles.
   21290 The integer division is not pipelined, i.e. the subsequent integer
   21291 division insn can not be issued until the current division insn
   21292 finished.  Floating point insns are fully pipelined and their results
   21293 are ready in 3 cycles.  Where the result of a floating point insn is
   21294 used by an integer insn, an additional delay of one cycle is incurred.
   21295 To describe all of this we could specify
   21296 
   21297      (define_cpu_unit "div")
   21298 
   21299      (define_insn_reservation "simple" 2 (eq_attr "type" "int")
   21300                               "(i0_pipeline | i1_pipeline), (port0 | port1)")
   21301 
   21302      (define_insn_reservation "mult" 4 (eq_attr "type" "mult")
   21303                               "i1_pipeline, nothing*2, (port0 | port1)")
   21304 
   21305      (define_insn_reservation "div" 8 (eq_attr "type" "div")
   21306                               "i1_pipeline, div*7, div + (port0 | port1)")
   21307 
   21308      (define_insn_reservation "float" 3 (eq_attr "type" "float")
   21309                               "f_pipeline, nothing, (port0 | port1))
   21310 
   21311      (define_bypass 4 "float" "simple,mult,div")
   21312 
   21313  To simplify the description we could describe the following reservation
   21314 
   21315      (define_reservation "finish" "port0|port1")
   21316 
   21317  and use it in all `define_insn_reservation' as in the following
   21318 construction
   21319 
   21320      (define_insn_reservation "simple" 2 (eq_attr "type" "int")
   21321                               "(i0_pipeline | i1_pipeline), finish")
   21322 
   21323  ---------- Footnotes ----------
   21324 
   21325  (1) However, the size of the automaton depends on   processor
   21326 complexity.  To limit this effect, machine descriptions   can split
   21327 orthogonal parts of the machine description among several   automata:
   21328 but then, since each of these must be stepped independently,   this
   21329 does cause a small decrease in the algorithm's performance.
   21330 
   21331 
   21332 File: gccint.info,  Node: Conditional Execution,  Next: Constant Definitions,  Prev: Insn Attributes,  Up: Machine Desc
   21333 
   21334 14.20 Conditional Execution
   21335 ===========================
   21336 
   21337 A number of architectures provide for some form of conditional
   21338 execution, or predication.  The hallmark of this feature is the ability
   21339 to nullify most of the instructions in the instruction set.  When the
   21340 instruction set is large and not entirely symmetric, it can be quite
   21341 tedious to describe these forms directly in the `.md' file.  An
   21342 alternative is the `define_cond_exec' template.
   21343 
   21344      (define_cond_exec
   21345        [PREDICATE-PATTERN]
   21346        "CONDITION"
   21347        "OUTPUT-TEMPLATE")
   21348 
   21349  PREDICATE-PATTERN is the condition that must be true for the insn to
   21350 be executed at runtime and should match a relational operator.  One can
   21351 use `match_operator' to match several relational operators at once.
   21352 Any `match_operand' operands must have no more than one alternative.
   21353 
   21354  CONDITION is a C expression that must be true for the generated
   21355 pattern to match.
   21356 
   21357  OUTPUT-TEMPLATE is a string similar to the `define_insn' output
   21358 template (*note Output Template::), except that the `*' and `@' special
   21359 cases do not apply.  This is only useful if the assembly text for the
   21360 predicate is a simple prefix to the main insn.  In order to handle the
   21361 general case, there is a global variable `current_insn_predicate' that
   21362 will contain the entire predicate if the current insn is predicated,
   21363 and will otherwise be `NULL'.
   21364 
   21365  When `define_cond_exec' is used, an implicit reference to the
   21366 `predicable' instruction attribute is made.  *Note Insn Attributes::.
   21367 This attribute must be boolean (i.e. have exactly two elements in its
   21368 LIST-OF-VALUES).  Further, it must not be used with complex
   21369 expressions.  That is, the default and all uses in the insns must be a
   21370 simple constant, not dependent on the alternative or anything else.
   21371 
   21372  For each `define_insn' for which the `predicable' attribute is true, a
   21373 new `define_insn' pattern will be generated that matches a predicated
   21374 version of the instruction.  For example,
   21375 
   21376      (define_insn "addsi"
   21377        [(set (match_operand:SI 0 "register_operand" "r")
   21378              (plus:SI (match_operand:SI 1 "register_operand" "r")
   21379                       (match_operand:SI 2 "register_operand" "r")))]
   21380        "TEST1"
   21381        "add %2,%1,%0")
   21382 
   21383      (define_cond_exec
   21384        [(ne (match_operand:CC 0 "register_operand" "c")
   21385             (const_int 0))]
   21386        "TEST2"
   21387        "(%0)")
   21388 
   21389 generates a new pattern
   21390 
   21391      (define_insn ""
   21392        [(cond_exec
   21393           (ne (match_operand:CC 3 "register_operand" "c") (const_int 0))
   21394           (set (match_operand:SI 0 "register_operand" "r")
   21395                (plus:SI (match_operand:SI 1 "register_operand" "r")
   21396                         (match_operand:SI 2 "register_operand" "r"))))]
   21397        "(TEST2) && (TEST1)"
   21398        "(%3) add %2,%1,%0")
   21399 
   21400 
   21401 File: gccint.info,  Node: Constant Definitions,  Next: Iterators,  Prev: Conditional Execution,  Up: Machine Desc
   21402 
   21403 14.21 Constant Definitions
   21404 ==========================
   21405 
   21406 Using literal constants inside instruction patterns reduces legibility
   21407 and can be a maintenance problem.
   21408 
   21409  To overcome this problem, you may use the `define_constants'
   21410 expression.  It contains a vector of name-value pairs.  From that point
   21411 on, wherever any of the names appears in the MD file, it is as if the
   21412 corresponding value had been written instead.  You may use
   21413 `define_constants' multiple times; each appearance adds more constants
   21414 to the table.  It is an error to redefine a constant with a different
   21415 value.
   21416 
   21417  To come back to the a29k load multiple example, instead of
   21418 
   21419      (define_insn ""
   21420        [(match_parallel 0 "load_multiple_operation"
   21421           [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
   21422                 (match_operand:SI 2 "memory_operand" "m"))
   21423            (use (reg:SI 179))
   21424            (clobber (reg:SI 179))])]
   21425        ""
   21426        "loadm 0,0,%1,%2")
   21427 
   21428  You could write:
   21429 
   21430      (define_constants [
   21431          (R_BP 177)
   21432          (R_FC 178)
   21433          (R_CR 179)
   21434          (R_Q  180)
   21435      ])
   21436 
   21437      (define_insn ""
   21438        [(match_parallel 0 "load_multiple_operation"
   21439           [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
   21440                 (match_operand:SI 2 "memory_operand" "m"))
   21441            (use (reg:SI R_CR))
   21442            (clobber (reg:SI R_CR))])]
   21443        ""
   21444        "loadm 0,0,%1,%2")
   21445 
   21446  The constants that are defined with a define_constant are also output
   21447 in the insn-codes.h header file as #defines.
   21448 
   21449 
   21450 File: gccint.info,  Node: Iterators,  Prev: Constant Definitions,  Up: Machine Desc
   21451 
   21452 14.22 Iterators
   21453 ===============
   21454 
   21455 Ports often need to define similar patterns for more than one machine
   21456 mode or for more than one rtx code.  GCC provides some simple iterator
   21457 facilities to make this process easier.
   21458 
   21459 * Menu:
   21460 
   21461 * Mode Iterators::         Generating variations of patterns for different modes.
   21462 * Code Iterators::         Doing the same for codes.
   21463 
   21464 
   21465 File: gccint.info,  Node: Mode Iterators,  Next: Code Iterators,  Up: Iterators
   21466 
   21467 14.22.1 Mode Iterators
   21468 ----------------------
   21469 
   21470 Ports often need to define similar patterns for two or more different
   21471 modes.  For example:
   21472 
   21473    * If a processor has hardware support for both single and double
   21474      floating-point arithmetic, the `SFmode' patterns tend to be very
   21475      similar to the `DFmode' ones.
   21476 
   21477    * If a port uses `SImode' pointers in one configuration and `DImode'
   21478      pointers in another, it will usually have very similar `SImode'
   21479      and `DImode' patterns for manipulating pointers.
   21480 
   21481  Mode iterators allow several patterns to be instantiated from one
   21482 `.md' file template.  They can be used with any type of rtx-based
   21483 construct, such as a `define_insn', `define_split', or
   21484 `define_peephole2'.
   21485 
   21486 * Menu:
   21487 
   21488 * Defining Mode Iterators:: Defining a new mode iterator.
   21489 * Substitutions::	    Combining mode iterators with substitutions
   21490 * Examples::		    Examples
   21491 
   21492 
   21493 File: gccint.info,  Node: Defining Mode Iterators,  Next: Substitutions,  Up: Mode Iterators
   21494 
   21495 14.22.1.1 Defining Mode Iterators
   21496 .................................
   21497 
   21498 The syntax for defining a mode iterator is:
   21499 
   21500      (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")])
   21501 
   21502  This allows subsequent `.md' file constructs to use the mode suffix
   21503 `:NAME'.  Every construct that does so will be expanded N times, once
   21504 with every use of `:NAME' replaced by `:MODE1', once with every use
   21505 replaced by `:MODE2', and so on.  In the expansion for a particular
   21506 MODEI, every C condition will also require that CONDI be true.
   21507 
   21508  For example:
   21509 
   21510      (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
   21511 
   21512  defines a new mode suffix `:P'.  Every construct that uses `:P' will
   21513 be expanded twice, once with every `:P' replaced by `:SI' and once with
   21514 every `:P' replaced by `:DI'.  The `:SI' version will only apply if
   21515 `Pmode == SImode' and the `:DI' version will only apply if `Pmode ==
   21516 DImode'.
   21517 
   21518  As with other `.md' conditions, an empty string is treated as "always
   21519 true".  `(MODE "")' can also be abbreviated to `MODE'.  For example:
   21520 
   21521      (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
   21522 
   21523  means that the `:DI' expansion only applies if `TARGET_64BIT' but that
   21524 the `:SI' expansion has no such constraint.
   21525 
   21526  Iterators are applied in the order they are defined.  This can be
   21527 significant if two iterators are used in a construct that requires
   21528 substitutions.  *Note Substitutions::.
   21529 
   21530 
   21531 File: gccint.info,  Node: Substitutions,  Next: Examples,  Prev: Defining Mode Iterators,  Up: Mode Iterators
   21532 
   21533 14.22.1.2 Substitution in Mode Iterators
   21534 ........................................
   21535 
   21536 If an `.md' file construct uses mode iterators, each version of the
   21537 construct will often need slightly different strings or modes.  For
   21538 example:
   21539 
   21540    * When a `define_expand' defines several `addM3' patterns (*note
   21541      Standard Names::), each expander will need to use the appropriate
   21542      mode name for M.
   21543 
   21544    * When a `define_insn' defines several instruction patterns, each
   21545      instruction will often use a different assembler mnemonic.
   21546 
   21547    * When a `define_insn' requires operands with different modes, using
   21548      an iterator for one of the operand modes usually requires a
   21549      specific mode for the other operand(s).
   21550 
   21551  GCC supports such variations through a system of "mode attributes".
   21552 There are two standard attributes: `mode', which is the name of the
   21553 mode in lower case, and `MODE', which is the same thing in upper case.
   21554 You can define other attributes using:
   21555 
   21556      (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")])
   21557 
   21558  where NAME is the name of the attribute and VALUEI is the value
   21559 associated with MODEI.
   21560 
   21561  When GCC replaces some :ITERATOR with :MODE, it will scan each string
   21562 and mode in the pattern for sequences of the form `<ITERATOR:ATTR>',
   21563 where ATTR is the name of a mode attribute.  If the attribute is
   21564 defined for MODE, the whole `<...>' sequence will be replaced by the
   21565 appropriate attribute value.
   21566 
   21567  For example, suppose an `.md' file has:
   21568 
   21569      (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
   21570      (define_mode_attr load [(SI "lw") (DI "ld")])
   21571 
   21572  If one of the patterns that uses `:P' contains the string
   21573 `"<P:load>\t%0,%1"', the `SI' version of that pattern will use
   21574 `"lw\t%0,%1"' and the `DI' version will use `"ld\t%0,%1"'.
   21575 
   21576  Here is an example of using an attribute for a mode:
   21577 
   21578      (define_mode_iterator LONG [SI DI])
   21579      (define_mode_attr SHORT [(SI "HI") (DI "SI")])
   21580      (define_insn ...
   21581        (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...)
   21582 
   21583  The `ITERATOR:' prefix may be omitted, in which case the substitution
   21584 will be attempted for every iterator expansion.
   21585 
   21586 
   21587 File: gccint.info,  Node: Examples,  Prev: Substitutions,  Up: Mode Iterators
   21588 
   21589 14.22.1.3 Mode Iterator Examples
   21590 ................................
   21591 
   21592 Here is an example from the MIPS port.  It defines the following modes
   21593 and attributes (among others):
   21594 
   21595      (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
   21596      (define_mode_attr d [(SI "") (DI "d")])
   21597 
   21598  and uses the following template to define both `subsi3' and `subdi3':
   21599 
   21600      (define_insn "sub<mode>3"
   21601        [(set (match_operand:GPR 0 "register_operand" "=d")
   21602              (minus:GPR (match_operand:GPR 1 "register_operand" "d")
   21603                         (match_operand:GPR 2 "register_operand" "d")))]
   21604        ""
   21605        "<d>subu\t%0,%1,%2"
   21606        [(set_attr "type" "arith")
   21607         (set_attr "mode" "<MODE>")])
   21608 
   21609  This is exactly equivalent to:
   21610 
   21611      (define_insn "subsi3"
   21612        [(set (match_operand:SI 0 "register_operand" "=d")
   21613              (minus:SI (match_operand:SI 1 "register_operand" "d")
   21614                        (match_operand:SI 2 "register_operand" "d")))]
   21615        ""
   21616        "subu\t%0,%1,%2"
   21617        [(set_attr "type" "arith")
   21618         (set_attr "mode" "SI")])
   21619 
   21620      (define_insn "subdi3"
   21621        [(set (match_operand:DI 0 "register_operand" "=d")
   21622              (minus:DI (match_operand:DI 1 "register_operand" "d")
   21623                        (match_operand:DI 2 "register_operand" "d")))]
   21624        ""
   21625        "dsubu\t%0,%1,%2"
   21626        [(set_attr "type" "arith")
   21627         (set_attr "mode" "DI")])
   21628 
   21629 
   21630 File: gccint.info,  Node: Code Iterators,  Prev: Mode Iterators,  Up: Iterators
   21631 
   21632 14.22.2 Code Iterators
   21633 ----------------------
   21634 
   21635 Code iterators operate in a similar way to mode iterators.  *Note Mode
   21636 Iterators::.
   21637 
   21638  The construct:
   21639 
   21640      (define_code_iterator NAME [(CODE1 "COND1") ... (CODEN "CONDN")])
   21641 
   21642  defines a pseudo rtx code NAME that can be instantiated as CODEI if
   21643 condition CONDI is true.  Each CODEI must have the same rtx format.
   21644 *Note RTL Classes::.
   21645 
   21646  As with mode iterators, each pattern that uses NAME will be expanded N
   21647 times, once with all uses of NAME replaced by CODE1, once with all uses
   21648 replaced by CODE2, and so on.  *Note Defining Mode Iterators::.
   21649 
   21650  It is possible to define attributes for codes as well as for modes.
   21651 There are two standard code attributes: `code', the name of the code in
   21652 lower case, and `CODE', the name of the code in upper case.  Other
   21653 attributes are defined using:
   21654 
   21655      (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")])
   21656 
   21657  Here's an example of code iterators in action, taken from the MIPS
   21658 port:
   21659 
   21660      (define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt
   21661                                      eq ne gt ge lt le gtu geu ltu leu])
   21662 
   21663      (define_expand "b<code>"
   21664        [(set (pc)
   21665              (if_then_else (any_cond:CC (cc0)
   21666                                         (const_int 0))
   21667                            (label_ref (match_operand 0 ""))
   21668                            (pc)))]
   21669        ""
   21670      {
   21671        gen_conditional_branch (operands, <CODE>);
   21672        DONE;
   21673      })
   21674 
   21675  This is equivalent to:
   21676 
   21677      (define_expand "bunordered"
   21678        [(set (pc)
   21679              (if_then_else (unordered:CC (cc0)
   21680                                          (const_int 0))
   21681                            (label_ref (match_operand 0 ""))
   21682                            (pc)))]
   21683        ""
   21684      {
   21685        gen_conditional_branch (operands, UNORDERED);
   21686        DONE;
   21687      })
   21688 
   21689      (define_expand "bordered"
   21690        [(set (pc)
   21691              (if_then_else (ordered:CC (cc0)
   21692                                        (const_int 0))
   21693                            (label_ref (match_operand 0 ""))
   21694                            (pc)))]
   21695        ""
   21696      {
   21697        gen_conditional_branch (operands, ORDERED);
   21698        DONE;
   21699      })
   21700 
   21701      ...
   21702 
   21703 
   21704 File: gccint.info,  Node: Target Macros,  Next: Host Config,  Prev: Machine Desc,  Up: Top
   21705 
   21706 15 Target Description Macros and Functions
   21707 ******************************************
   21708 
   21709 In addition to the file `MACHINE.md', a machine description includes a
   21710 C header file conventionally given the name `MACHINE.h' and a C source
   21711 file named `MACHINE.c'.  The header file defines numerous macros that
   21712 convey the information about the target machine that does not fit into
   21713 the scheme of the `.md' file.  The file `tm.h' should be a link to
   21714 `MACHINE.h'.  The header file `config.h' includes `tm.h' and most
   21715 compiler source files include `config.h'.  The source file defines a
   21716 variable `targetm', which is a structure containing pointers to
   21717 functions and data relating to the target machine.  `MACHINE.c' should
   21718 also contain their definitions, if they are not defined elsewhere in
   21719 GCC, and other functions called through the macros defined in the `.h'
   21720 file.
   21721 
   21722 * Menu:
   21723 
   21724 * Target Structure::    The `targetm' variable.
   21725 * Driver::              Controlling how the driver runs the compilation passes.
   21726 * Run-time Target::     Defining `-m' options like `-m68000' and `-m68020'.
   21727 * Per-Function Data::   Defining data structures for per-function information.
   21728 * Storage Layout::      Defining sizes and alignments of data.
   21729 * Type Layout::         Defining sizes and properties of basic user data types.
   21730 * Registers::           Naming and describing the hardware registers.
   21731 * Register Classes::    Defining the classes of hardware registers.
   21732 * Old Constraints::     The old way to define machine-specific constraints.
   21733 * Stack and Calling::   Defining which way the stack grows and by how much.
   21734 * Varargs::		Defining the varargs macros.
   21735 * Trampolines::         Code set up at run time to enter a nested function.
   21736 * Library Calls::       Controlling how library routines are implicitly called.
   21737 * Addressing Modes::    Defining addressing modes valid for memory operands.
   21738 * Anchored Addresses::  Defining how `-fsection-anchors' should work.
   21739 * Condition Code::      Defining how insns update the condition code.
   21740 * Costs::               Defining relative costs of different operations.
   21741 * Scheduling::          Adjusting the behavior of the instruction scheduler.
   21742 * Sections::            Dividing storage into text, data, and other sections.
   21743 * PIC::			Macros for position independent code.
   21744 * Assembler Format::    Defining how to write insns and pseudo-ops to output.
   21745 * Debugging Info::      Defining the format of debugging output.
   21746 * Floating Point::      Handling floating point for cross-compilers.
   21747 * Mode Switching::      Insertion of mode-switching instructions.
   21748 * Target Attributes::   Defining target-specific uses of `__attribute__'.
   21749 * MIPS Coprocessors::   MIPS coprocessor support and how to customize it.
   21750 * PCH Target::          Validity checking for precompiled headers.
   21751 * C++ ABI::             Controlling C++ ABI changes.
   21752 * Misc::                Everything else.
   21753 
   21754 
   21755 File: gccint.info,  Node: Target Structure,  Next: Driver,  Up: Target Macros
   21756 
   21757 15.1 The Global `targetm' Variable
   21758 ==================================
   21759 
   21760  -- Variable: struct gcc_target targetm
   21761      The target `.c' file must define the global `targetm' variable
   21762      which contains pointers to functions and data relating to the
   21763      target machine.  The variable is declared in `target.h';
   21764      `target-def.h' defines the macro `TARGET_INITIALIZER' which is
   21765      used to initialize the variable, and macros for the default
   21766      initializers for elements of the structure.  The `.c' file should
   21767      override those macros for which the default definition is
   21768      inappropriate.  For example:
   21769           #include "target.h"
   21770           #include "target-def.h"
   21771 
   21772           /* Initialize the GCC target structure.  */
   21773 
   21774           #undef TARGET_COMP_TYPE_ATTRIBUTES
   21775           #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes
   21776 
   21777           struct gcc_target targetm = TARGET_INITIALIZER;
   21778 
   21779 Where a macro should be defined in the `.c' file in this manner to form
   21780 part of the `targetm' structure, it is documented below as a "Target
   21781 Hook" with a prototype.  Many macros will change in future from being
   21782 defined in the `.h' file to being part of the `targetm' structure.
   21783 
   21784 
   21785 File: gccint.info,  Node: Driver,  Next: Run-time Target,  Prev: Target Structure,  Up: Target Macros
   21786 
   21787 15.2 Controlling the Compilation Driver, `gcc'
   21788 ==============================================
   21789 
   21790 You can control the compilation driver.
   21791 
   21792  -- Macro: SWITCH_TAKES_ARG (CHAR)
   21793      A C expression which determines whether the option `-CHAR' takes
   21794      arguments.  The value should be the number of arguments that
   21795      option takes-zero, for many options.
   21796 
   21797      By default, this macro is defined as `DEFAULT_SWITCH_TAKES_ARG',
   21798      which handles the standard options properly.  You need not define
   21799      `SWITCH_TAKES_ARG' unless you wish to add additional options which
   21800      take arguments.  Any redefinition should call
   21801      `DEFAULT_SWITCH_TAKES_ARG' and then check for additional options.
   21802 
   21803  -- Macro: WORD_SWITCH_TAKES_ARG (NAME)
   21804      A C expression which determines whether the option `-NAME' takes
   21805      arguments.  The value should be the number of arguments that
   21806      option takes-zero, for many options.  This macro rather than
   21807      `SWITCH_TAKES_ARG' is used for multi-character option names.
   21808 
   21809      By default, this macro is defined as
   21810      `DEFAULT_WORD_SWITCH_TAKES_ARG', which handles the standard options
   21811      properly.  You need not define `WORD_SWITCH_TAKES_ARG' unless you
   21812      wish to add additional options which take arguments.  Any
   21813      redefinition should call `DEFAULT_WORD_SWITCH_TAKES_ARG' and then
   21814      check for additional options.
   21815 
   21816  -- Macro: SWITCH_CURTAILS_COMPILATION (CHAR)
   21817      A C expression which determines whether the option `-CHAR' stops
   21818      compilation before the generation of an executable.  The value is
   21819      boolean, nonzero if the option does stop an executable from being
   21820      generated, zero otherwise.
   21821 
   21822      By default, this macro is defined as
   21823      `DEFAULT_SWITCH_CURTAILS_COMPILATION', which handles the standard
   21824      options properly.  You need not define
   21825      `SWITCH_CURTAILS_COMPILATION' unless you wish to add additional
   21826      options which affect the generation of an executable.  Any
   21827      redefinition should call `DEFAULT_SWITCH_CURTAILS_COMPILATION' and
   21828      then check for additional options.
   21829 
   21830  -- Macro: SWITCHES_NEED_SPACES
   21831      A string-valued C expression which enumerates the options for which
   21832      the linker needs a space between the option and its argument.
   21833 
   21834      If this macro is not defined, the default value is `""'.
   21835 
   21836  -- Macro: TARGET_OPTION_TRANSLATE_TABLE
   21837      If defined, a list of pairs of strings, the first of which is a
   21838      potential command line target to the `gcc' driver program, and the
   21839      second of which is a space-separated (tabs and other whitespace
   21840      are not supported) list of options with which to replace the first
   21841      option.  The target defining this list is responsible for assuring
   21842      that the results are valid.  Replacement options may not be the
   21843      `--opt' style, they must be the `-opt' style.  It is the intention
   21844      of this macro to provide a mechanism for substitution that affects
   21845      the multilibs chosen, such as one option that enables many
   21846      options, some of which select multilibs.  Example nonsensical
   21847      definition, where `-malt-abi', `-EB', and `-mspoo' cause different
   21848      multilibs to be chosen:
   21849 
   21850           #define TARGET_OPTION_TRANSLATE_TABLE \
   21851           { "-fast",   "-march=fast-foo -malt-abi -I/usr/fast-foo" }, \
   21852           { "-compat", "-EB -malign=4 -mspoo" }
   21853 
   21854  -- Macro: DRIVER_SELF_SPECS
   21855      A list of specs for the driver itself.  It should be a suitable
   21856      initializer for an array of strings, with no surrounding braces.
   21857 
   21858      The driver applies these specs to its own command line between
   21859      loading default `specs' files (but not command-line specified
   21860      ones) and choosing the multilib directory or running any
   21861      subcommands.  It applies them in the order given, so each spec can
   21862      depend on the options added by earlier ones.  It is also possible
   21863      to remove options using `%<OPTION' in the usual way.
   21864 
   21865      This macro can be useful when a port has several interdependent
   21866      target options.  It provides a way of standardizing the command
   21867      line so that the other specs are easier to write.
   21868 
   21869      Do not define this macro if it does not need to do anything.
   21870 
   21871  -- Macro: OPTION_DEFAULT_SPECS
   21872      A list of specs used to support configure-time default options
   21873      (i.e.  `--with' options) in the driver.  It should be a suitable
   21874      initializer for an array of structures, each containing two
   21875      strings, without the outermost pair of surrounding braces.
   21876 
   21877      The first item in the pair is the name of the default.  This must
   21878      match the code in `config.gcc' for the target.  The second item is
   21879      a spec to apply if a default with this name was specified.  The
   21880      string `%(VALUE)' in the spec will be replaced by the value of the
   21881      default everywhere it occurs.
   21882 
   21883      The driver will apply these specs to its own command line between
   21884      loading default `specs' files and processing `DRIVER_SELF_SPECS',
   21885      using the same mechanism as `DRIVER_SELF_SPECS'.
   21886 
   21887      Do not define this macro if it does not need to do anything.
   21888 
   21889  -- Macro: CPP_SPEC
   21890      A C string constant that tells the GCC driver program options to
   21891      pass to CPP.  It can also specify how to translate options you
   21892      give to GCC into options for GCC to pass to the CPP.
   21893 
   21894      Do not define this macro if it does not need to do anything.
   21895 
   21896  -- Macro: CPLUSPLUS_CPP_SPEC
   21897      This macro is just like `CPP_SPEC', but is used for C++, rather
   21898      than C.  If you do not define this macro, then the value of
   21899      `CPP_SPEC' (if any) will be used instead.
   21900 
   21901  -- Macro: CC1_SPEC
   21902      A C string constant that tells the GCC driver program options to
   21903      pass to `cc1', `cc1plus', `f771', and the other language front
   21904      ends.  It can also specify how to translate options you give to
   21905      GCC into options for GCC to pass to front ends.
   21906 
   21907      Do not define this macro if it does not need to do anything.
   21908 
   21909  -- Macro: CC1PLUS_SPEC
   21910      A C string constant that tells the GCC driver program options to
   21911      pass to `cc1plus'.  It can also specify how to translate options
   21912      you give to GCC into options for GCC to pass to the `cc1plus'.
   21913 
   21914      Do not define this macro if it does not need to do anything.  Note
   21915      that everything defined in CC1_SPEC is already passed to `cc1plus'
   21916      so there is no need to duplicate the contents of CC1_SPEC in
   21917      CC1PLUS_SPEC.
   21918 
   21919  -- Macro: ASM_SPEC
   21920      A C string constant that tells the GCC driver program options to
   21921      pass to the assembler.  It can also specify how to translate
   21922      options you give to GCC into options for GCC to pass to the
   21923      assembler.  See the file `sun3.h' for an example of this.
   21924 
   21925      Do not define this macro if it does not need to do anything.
   21926 
   21927  -- Macro: ASM_FINAL_SPEC
   21928      A C string constant that tells the GCC driver program how to run
   21929      any programs which cleanup after the normal assembler.  Normally,
   21930      this is not needed.  See the file `mips.h' for an example of this.
   21931 
   21932      Do not define this macro if it does not need to do anything.
   21933 
   21934  -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT
   21935      Define this macro, with no value, if the driver should give the
   21936      assembler an argument consisting of a single dash, `-', to
   21937      instruct it to read from its standard input (which will be a pipe
   21938      connected to the output of the compiler proper).  This argument is
   21939      given after any `-o' option specifying the name of the output file.
   21940 
   21941      If you do not define this macro, the assembler is assumed to read
   21942      its standard input if given no non-option arguments.  If your
   21943      assembler cannot read standard input at all, use a `%{pipe:%e}'
   21944      construct; see `mips.h' for instance.
   21945 
   21946  -- Macro: LINK_SPEC
   21947      A C string constant that tells the GCC driver program options to
   21948      pass to the linker.  It can also specify how to translate options
   21949      you give to GCC into options for GCC to pass to the linker.
   21950 
   21951      Do not define this macro if it does not need to do anything.
   21952 
   21953  -- Macro: LIB_SPEC
   21954      Another C string constant used much like `LINK_SPEC'.  The
   21955      difference between the two is that `LIB_SPEC' is used at the end
   21956      of the command given to the linker.
   21957 
   21958      If this macro is not defined, a default is provided that loads the
   21959      standard C library from the usual place.  See `gcc.c'.
   21960 
   21961  -- Macro: LIBGCC_SPEC
   21962      Another C string constant that tells the GCC driver program how
   21963      and when to place a reference to `libgcc.a' into the linker
   21964      command line.  This constant is placed both before and after the
   21965      value of `LIB_SPEC'.
   21966 
   21967      If this macro is not defined, the GCC driver provides a default
   21968      that passes the string `-lgcc' to the linker.
   21969 
   21970  -- Macro: REAL_LIBGCC_SPEC
   21971      By default, if `ENABLE_SHARED_LIBGCC' is defined, the
   21972      `LIBGCC_SPEC' is not directly used by the driver program but is
   21973      instead modified to refer to different versions of `libgcc.a'
   21974      depending on the values of the command line flags `-static',
   21975      `-shared', `-static-libgcc', and `-shared-libgcc'.  On targets
   21976      where these modifications are inappropriate, define
   21977      `REAL_LIBGCC_SPEC' instead.  `REAL_LIBGCC_SPEC' tells the driver
   21978      how to place a reference to `libgcc' on the link command line,
   21979      but, unlike `LIBGCC_SPEC', it is used unmodified.
   21980 
   21981  -- Macro: USE_LD_AS_NEEDED
   21982      A macro that controls the modifications to `LIBGCC_SPEC' mentioned
   21983      in `REAL_LIBGCC_SPEC'.  If nonzero, a spec will be generated that
   21984      uses -as-needed and the shared libgcc in place of the static
   21985      exception handler library, when linking without any of `-static',
   21986      `-static-libgcc', or `-shared-libgcc'.
   21987 
   21988  -- Macro: LINK_EH_SPEC
   21989      If defined, this C string constant is added to `LINK_SPEC'.  When
   21990      `USE_LD_AS_NEEDED' is zero or undefined, it also affects the
   21991      modifications to `LIBGCC_SPEC' mentioned in `REAL_LIBGCC_SPEC'.
   21992 
   21993  -- Macro: STARTFILE_SPEC
   21994      Another C string constant used much like `LINK_SPEC'.  The
   21995      difference between the two is that `STARTFILE_SPEC' is used at the
   21996      very beginning of the command given to the linker.
   21997 
   21998      If this macro is not defined, a default is provided that loads the
   21999      standard C startup file from the usual place.  See `gcc.c'.
   22000 
   22001  -- Macro: ENDFILE_SPEC
   22002      Another C string constant used much like `LINK_SPEC'.  The
   22003      difference between the two is that `ENDFILE_SPEC' is used at the
   22004      very end of the command given to the linker.
   22005 
   22006      Do not define this macro if it does not need to do anything.
   22007 
   22008  -- Macro: THREAD_MODEL_SPEC
   22009      GCC `-v' will print the thread model GCC was configured to use.
   22010      However, this doesn't work on platforms that are multilibbed on
   22011      thread models, such as AIX 4.3.  On such platforms, define
   22012      `THREAD_MODEL_SPEC' such that it evaluates to a string without
   22013      blanks that names one of the recognized thread models.  `%*', the
   22014      default value of this macro, will expand to the value of
   22015      `thread_file' set in `config.gcc'.
   22016 
   22017  -- Macro: SYSROOT_SUFFIX_SPEC
   22018      Define this macro to add a suffix to the target sysroot when GCC is
   22019      configured with a sysroot.  This will cause GCC to search for
   22020      usr/lib, et al, within sysroot+suffix.
   22021 
   22022  -- Macro: SYSROOT_HEADERS_SUFFIX_SPEC
   22023      Define this macro to add a headers_suffix to the target sysroot
   22024      when GCC is configured with a sysroot.  This will cause GCC to
   22025      pass the updated sysroot+headers_suffix to CPP, causing it to
   22026      search for usr/include, et al, within sysroot+headers_suffix.
   22027 
   22028  -- Macro: EXTRA_SPECS
   22029      Define this macro to provide additional specifications to put in
   22030      the `specs' file that can be used in various specifications like
   22031      `CC1_SPEC'.
   22032 
   22033      The definition should be an initializer for an array of structures,
   22034      containing a string constant, that defines the specification name,
   22035      and a string constant that provides the specification.
   22036 
   22037      Do not define this macro if it does not need to do anything.
   22038 
   22039      `EXTRA_SPECS' is useful when an architecture contains several
   22040      related targets, which have various `..._SPECS' which are similar
   22041      to each other, and the maintainer would like one central place to
   22042      keep these definitions.
   22043 
   22044      For example, the PowerPC System V.4 targets use `EXTRA_SPECS' to
   22045      define either `_CALL_SYSV' when the System V calling sequence is
   22046      used or `_CALL_AIX' when the older AIX-based calling sequence is
   22047      used.
   22048 
   22049      The `config/rs6000/rs6000.h' target file defines:
   22050 
   22051           #define EXTRA_SPECS \
   22052             { "cpp_sysv_default", CPP_SYSV_DEFAULT },
   22053 
   22054           #define CPP_SYS_DEFAULT ""
   22055 
   22056      The `config/rs6000/sysv.h' target file defines:
   22057           #undef CPP_SPEC
   22058           #define CPP_SPEC \
   22059           "%{posix: -D_POSIX_SOURCE } \
   22060           %{mcall-sysv: -D_CALL_SYSV } \
   22061           %{!mcall-sysv: %(cpp_sysv_default) } \
   22062           %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}"
   22063 
   22064           #undef CPP_SYSV_DEFAULT
   22065           #define CPP_SYSV_DEFAULT "-D_CALL_SYSV"
   22066 
   22067      while the `config/rs6000/eabiaix.h' target file defines
   22068      `CPP_SYSV_DEFAULT' as:
   22069 
   22070           #undef CPP_SYSV_DEFAULT
   22071           #define CPP_SYSV_DEFAULT "-D_CALL_AIX"
   22072 
   22073  -- Macro: LINK_LIBGCC_SPECIAL_1
   22074      Define this macro if the driver program should find the library
   22075      `libgcc.a'.  If you do not define this macro, the driver program
   22076      will pass the argument `-lgcc' to tell the linker to do the search.
   22077 
   22078  -- Macro: LINK_GCC_C_SEQUENCE_SPEC
   22079      The sequence in which libgcc and libc are specified to the linker.
   22080      By default this is `%G %L %G'.
   22081 
   22082  -- Macro: LINK_COMMAND_SPEC
   22083      A C string constant giving the complete command line need to
   22084      execute the linker.  When you do this, you will need to update
   22085      your port each time a change is made to the link command line
   22086      within `gcc.c'.  Therefore, define this macro only if you need to
   22087      completely redefine the command line for invoking the linker and
   22088      there is no other way to accomplish the effect you need.
   22089      Overriding this macro may be avoidable by overriding
   22090      `LINK_GCC_C_SEQUENCE_SPEC' instead.
   22091 
   22092  -- Macro: LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
   22093      A nonzero value causes `collect2' to remove duplicate
   22094      `-LDIRECTORY' search directories from linking commands.  Do not
   22095      give it a nonzero value if removing duplicate search directories
   22096      changes the linker's semantics.
   22097 
   22098  -- Macro: MULTILIB_DEFAULTS
   22099      Define this macro as a C expression for the initializer of an
   22100      array of string to tell the driver program which options are
   22101      defaults for this target and thus do not need to be handled
   22102      specially when using `MULTILIB_OPTIONS'.
   22103 
   22104      Do not define this macro if `MULTILIB_OPTIONS' is not defined in
   22105      the target makefile fragment or if none of the options listed in
   22106      `MULTILIB_OPTIONS' are set by default.  *Note Target Fragment::.
   22107 
   22108  -- Macro: RELATIVE_PREFIX_NOT_LINKDIR
   22109      Define this macro to tell `gcc' that it should only translate a
   22110      `-B' prefix into a `-L' linker option if the prefix indicates an
   22111      absolute file name.
   22112 
   22113  -- Macro: MD_EXEC_PREFIX
   22114      If defined, this macro is an additional prefix to try after
   22115      `STANDARD_EXEC_PREFIX'.  `MD_EXEC_PREFIX' is not searched when the
   22116      `-b' option is used, or the compiler is built as a cross compiler.
   22117      If you define `MD_EXEC_PREFIX', then be sure to add it to the
   22118      list of directories used to find the assembler in `configure.in'.
   22119 
   22120  -- Macro: STANDARD_STARTFILE_PREFIX
   22121      Define this macro as a C string constant if you wish to override
   22122      the standard choice of `libdir' as the default prefix to try when
   22123      searching for startup files such as `crt0.o'.
   22124      `STANDARD_STARTFILE_PREFIX' is not searched when the compiler is
   22125      built as a cross compiler.
   22126 
   22127  -- Macro: STANDARD_STARTFILE_PREFIX_1
   22128      Define this macro as a C string constant if you wish to override
   22129      the standard choice of `/lib' as a prefix to try after the default
   22130      prefix when searching for startup files such as `crt0.o'.
   22131      `STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is
   22132      built as a cross compiler.
   22133 
   22134  -- Macro: STANDARD_STARTFILE_PREFIX_2
   22135      Define this macro as a C string constant if you wish to override
   22136      the standard choice of `/lib' as yet another prefix to try after
   22137      the default prefix when searching for startup files such as
   22138      `crt0.o'.  `STANDARD_STARTFILE_PREFIX_2' is not searched when the
   22139      compiler is built as a cross compiler.
   22140 
   22141  -- Macro: MD_STARTFILE_PREFIX
   22142      If defined, this macro supplies an additional prefix to try after
   22143      the standard prefixes.  `MD_EXEC_PREFIX' is not searched when the
   22144      `-b' option is used, or when the compiler is built as a cross
   22145      compiler.
   22146 
   22147  -- Macro: MD_STARTFILE_PREFIX_1
   22148      If defined, this macro supplies yet another prefix to try after the
   22149      standard prefixes.  It is not searched when the `-b' option is
   22150      used, or when the compiler is built as a cross compiler.
   22151 
   22152  -- Macro: INIT_ENVIRONMENT
   22153      Define this macro as a C string constant if you wish to set
   22154      environment variables for programs called by the driver, such as
   22155      the assembler and loader.  The driver passes the value of this
   22156      macro to `putenv' to initialize the necessary environment
   22157      variables.
   22158 
   22159  -- Macro: LOCAL_INCLUDE_DIR
   22160      Define this macro as a C string constant if you wish to override
   22161      the standard choice of `/usr/local/include' as the default prefix
   22162      to try when searching for local header files.  `LOCAL_INCLUDE_DIR'
   22163      comes before `SYSTEM_INCLUDE_DIR' in the search order.
   22164 
   22165      Cross compilers do not search either `/usr/local/include' or its
   22166      replacement.
   22167 
   22168  -- Macro: MODIFY_TARGET_NAME
   22169      Define this macro if you wish to define command-line switches that
   22170      modify the default target name.
   22171 
   22172      For each switch, you can include a string to be appended to the
   22173      first part of the configuration name or a string to be deleted
   22174      from the configuration name, if present.  The definition should be
   22175      an initializer for an array of structures.  Each array element
   22176      should have three elements: the switch name (a string constant,
   22177      including the initial dash), one of the enumeration codes `ADD' or
   22178      `DELETE' to indicate whether the string should be inserted or
   22179      deleted, and the string to be inserted or deleted (a string
   22180      constant).
   22181 
   22182      For example, on a machine where `64' at the end of the
   22183      configuration name denotes a 64-bit target and you want the `-32'
   22184      and `-64' switches to select between 32- and 64-bit targets, you
   22185      would code
   22186 
   22187           #define MODIFY_TARGET_NAME \
   22188             { { "-32", DELETE, "64"}, \
   22189                {"-64", ADD, "64"}}
   22190 
   22191  -- Macro: SYSTEM_INCLUDE_DIR
   22192      Define this macro as a C string constant if you wish to specify a
   22193      system-specific directory to search for header files before the
   22194      standard directory.  `SYSTEM_INCLUDE_DIR' comes before
   22195      `STANDARD_INCLUDE_DIR' in the search order.
   22196 
   22197      Cross compilers do not use this macro and do not search the
   22198      directory specified.
   22199 
   22200  -- Macro: STANDARD_INCLUDE_DIR
   22201      Define this macro as a C string constant if you wish to override
   22202      the standard choice of `/usr/include' as the default prefix to try
   22203      when searching for header files.
   22204 
   22205      Cross compilers ignore this macro and do not search either
   22206      `/usr/include' or its replacement.
   22207 
   22208  -- Macro: STANDARD_INCLUDE_COMPONENT
   22209      The "component" corresponding to `STANDARD_INCLUDE_DIR'.  See
   22210      `INCLUDE_DEFAULTS', below, for the description of components.  If
   22211      you do not define this macro, no component is used.
   22212 
   22213  -- Macro: INCLUDE_DEFAULTS
   22214      Define this macro if you wish to override the entire default
   22215      search path for include files.  For a native compiler, the default
   22216      search path usually consists of `GCC_INCLUDE_DIR',
   22217      `LOCAL_INCLUDE_DIR', `SYSTEM_INCLUDE_DIR',
   22218      `GPLUSPLUS_INCLUDE_DIR', and `STANDARD_INCLUDE_DIR'.  In addition,
   22219      `GPLUSPLUS_INCLUDE_DIR' and `GCC_INCLUDE_DIR' are defined
   22220      automatically by `Makefile', and specify private search areas for
   22221      GCC.  The directory `GPLUSPLUS_INCLUDE_DIR' is used only for C++
   22222      programs.
   22223 
   22224      The definition should be an initializer for an array of structures.
   22225      Each array element should have four elements: the directory name (a
   22226      string constant), the component name (also a string constant), a
   22227      flag for C++-only directories, and a flag showing that the
   22228      includes in the directory don't need to be wrapped in `extern `C''
   22229      when compiling C++.  Mark the end of the array with a null element.
   22230 
   22231      The component name denotes what GNU package the include file is
   22232      part of, if any, in all uppercase letters.  For example, it might
   22233      be `GCC' or `BINUTILS'.  If the package is part of a
   22234      vendor-supplied operating system, code the component name as `0'.
   22235 
   22236      For example, here is the definition used for VAX/VMS:
   22237 
   22238           #define INCLUDE_DEFAULTS \
   22239           {                                       \
   22240             { "GNU_GXX_INCLUDE:", "G++", 1, 1},   \
   22241             { "GNU_CC_INCLUDE:", "GCC", 0, 0},    \
   22242             { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0},  \
   22243             { ".", 0, 0, 0},                      \
   22244             { 0, 0, 0, 0}                         \
   22245           }
   22246 
   22247  Here is the order of prefixes tried for exec files:
   22248 
   22249   1. Any prefixes specified by the user with `-B'.
   22250 
   22251   2. The environment variable `GCC_EXEC_PREFIX' or, if `GCC_EXEC_PREFIX'
   22252      is not set and the compiler has not been installed in the
   22253      configure-time PREFIX, the location in which the compiler has
   22254      actually been installed.
   22255 
   22256   3. The directories specified by the environment variable
   22257      `COMPILER_PATH'.
   22258 
   22259   4. The macro `STANDARD_EXEC_PREFIX', if the compiler has been
   22260      installed in the configured-time PREFIX.
   22261 
   22262   5. The location `/usr/libexec/gcc/', but only if this is a native
   22263      compiler.
   22264 
   22265   6. The location `/usr/lib/gcc/', but only if this is a native
   22266      compiler.
   22267 
   22268   7. The macro `MD_EXEC_PREFIX', if defined, but only if this is a
   22269      native compiler.
   22270 
   22271  Here is the order of prefixes tried for startfiles:
   22272 
   22273   1. Any prefixes specified by the user with `-B'.
   22274 
   22275   2. The environment variable `GCC_EXEC_PREFIX' or its automatically
   22276      determined value based on the installed toolchain location.
   22277 
   22278   3. The directories specified by the environment variable
   22279      `LIBRARY_PATH' (or port-specific name; native only, cross
   22280      compilers do not use this).
   22281 
   22282   4. The macro `STANDARD_EXEC_PREFIX', but only if the toolchain is
   22283      installed in the configured PREFIX or this is a native compiler.
   22284 
   22285   5. The location `/usr/lib/gcc/', but only if this is a native
   22286      compiler.
   22287 
   22288   6. The macro `MD_EXEC_PREFIX', if defined, but only if this is a
   22289      native compiler.
   22290 
   22291   7. The macro `MD_STARTFILE_PREFIX', if defined, but only if this is a
   22292      native compiler, or we have a target system root.
   22293 
   22294   8. The macro `MD_STARTFILE_PREFIX_1', if defined, but only if this is
   22295      a native compiler, or we have a target system root.
   22296 
   22297   9. The macro `STANDARD_STARTFILE_PREFIX', with any sysroot
   22298      modifications.  If this path is relative it will be prefixed by
   22299      `GCC_EXEC_PREFIX' and the machine suffix or `STANDARD_EXEC_PREFIX'
   22300      and the machine suffix.
   22301 
   22302  10. The macro `STANDARD_STARTFILE_PREFIX_1', but only if this is a
   22303      native compiler, or we have a target system root. The default for
   22304      this macro is `/lib/'.
   22305 
   22306  11. The macro `STANDARD_STARTFILE_PREFIX_2', but only if this is a
   22307      native compiler, or we have a target system root. The default for
   22308      this macro is `/usr/lib/'.
   22309 
   22310 
   22311 File: gccint.info,  Node: Run-time Target,  Next: Per-Function Data,  Prev: Driver,  Up: Target Macros
   22312 
   22313 15.3 Run-time Target Specification
   22314 ==================================
   22315 
   22316 Here are run-time target specifications.
   22317 
   22318  -- Macro: TARGET_CPU_CPP_BUILTINS ()
   22319      This function-like macro expands to a block of code that defines
   22320      built-in preprocessor macros and assertions for the target CPU,
   22321      using the functions `builtin_define', `builtin_define_std' and
   22322      `builtin_assert'.  When the front end calls this macro it provides
   22323      a trailing semicolon, and since it has finished command line
   22324      option processing your code can use those results freely.
   22325 
   22326      `builtin_assert' takes a string in the form you pass to the
   22327      command-line option `-A', such as `cpu=mips', and creates the
   22328      assertion.  `builtin_define' takes a string in the form accepted
   22329      by option `-D' and unconditionally defines the macro.
   22330 
   22331      `builtin_define_std' takes a string representing the name of an
   22332      object-like macro.  If it doesn't lie in the user's namespace,
   22333      `builtin_define_std' defines it unconditionally.  Otherwise, it
   22334      defines a version with two leading underscores, and another version
   22335      with two leading and trailing underscores, and defines the original
   22336      only if an ISO standard was not requested on the command line.  For
   22337      example, passing `unix' defines `__unix', `__unix__' and possibly
   22338      `unix'; passing `_mips' defines `__mips', `__mips__' and possibly
   22339      `_mips', and passing `_ABI64' defines only `_ABI64'.
   22340 
   22341      You can also test for the C dialect being compiled.  The variable
   22342      `c_language' is set to one of `clk_c', `clk_cplusplus' or
   22343      `clk_objective_c'.  Note that if we are preprocessing assembler,
   22344      this variable will be `clk_c' but the function-like macro
   22345      `preprocessing_asm_p()' will return true, so you might want to
   22346      check for that first.  If you need to check for strict ANSI, the
   22347      variable `flag_iso' can be used.  The function-like macro
   22348      `preprocessing_trad_p()' can be used to check for traditional
   22349      preprocessing.
   22350 
   22351  -- Macro: TARGET_OS_CPP_BUILTINS ()
   22352      Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional
   22353      and is used for the target operating system instead.
   22354 
   22355  -- Macro: TARGET_OBJFMT_CPP_BUILTINS ()
   22356      Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional
   22357      and is used for the target object format.  `elfos.h' uses this
   22358      macro to define `__ELF__', so you probably do not need to define
   22359      it yourself.
   22360 
   22361  -- Variable: extern int target_flags
   22362      This variable is declared in `options.h', which is included before
   22363      any target-specific headers.
   22364 
   22365  -- Variable: Target Hook int TARGET_DEFAULT_TARGET_FLAGS
   22366      This variable specifies the initial value of `target_flags'.  Its
   22367      default setting is 0.
   22368 
   22369  -- Target Hook: bool TARGET_HANDLE_OPTION (size_t CODE, const char
   22370           *ARG, int VALUE)
   22371      This hook is called whenever the user specifies one of the
   22372      target-specific options described by the `.opt' definition files
   22373      (*note Options::).  It has the opportunity to do some
   22374      option-specific processing and should return true if the option is
   22375      valid.  The default definition does nothing but return true.
   22376 
   22377      CODE specifies the `OPT_NAME' enumeration value associated with
   22378      the selected option; NAME is just a rendering of the option name
   22379      in which non-alphanumeric characters are replaced by underscores.
   22380      ARG specifies the string argument and is null if no argument was
   22381      given.  If the option is flagged as a `UInteger' (*note Option
   22382      properties::), VALUE is the numeric value of the argument.
   22383      Otherwise VALUE is 1 if the positive form of the option was used
   22384      and 0 if the "no-" form was.
   22385 
   22386  -- Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char
   22387           *ARG, int VALUE)
   22388      This target hook is called whenever the user specifies one of the
   22389      target-specific C language family options described by the `.opt'
   22390      definition files(*note Options::).  It has the opportunity to do
   22391      some option-specific processing and should return true if the
   22392      option is valid.  The default definition does nothing but return
   22393      false.
   22394 
   22395      In general, you should use `TARGET_HANDLE_OPTION' to handle
   22396      options.  However, if processing an option requires routines that
   22397      are only available in the C (and related language) front ends,
   22398      then you should use `TARGET_HANDLE_C_OPTION' instead.
   22399 
   22400  -- Macro: TARGET_VERSION
   22401      This macro is a C statement to print on `stderr' a string
   22402      describing the particular machine description choice.  Every
   22403      machine description should define `TARGET_VERSION'.  For example:
   22404 
   22405           #ifdef MOTOROLA
   22406           #define TARGET_VERSION \
   22407             fprintf (stderr, " (68k, Motorola syntax)");
   22408           #else
   22409           #define TARGET_VERSION \
   22410             fprintf (stderr, " (68k, MIT syntax)");
   22411           #endif
   22412 
   22413  -- Macro: OVERRIDE_OPTIONS
   22414      Sometimes certain combinations of command options do not make
   22415      sense on a particular target machine.  You can define a macro
   22416      `OVERRIDE_OPTIONS' to take account of this.  This macro, if
   22417      defined, is executed once just after all the command options have
   22418      been parsed.
   22419 
   22420      Don't use this macro to turn on various extra optimizations for
   22421      `-O'.  That is what `OPTIMIZATION_OPTIONS' is for.
   22422 
   22423  -- Macro: C_COMMON_OVERRIDE_OPTIONS
   22424      This is similar to `OVERRIDE_OPTIONS' but is only used in the C
   22425      language frontends (C, Objective-C, C++, Objective-C++) and so can
   22426      be used to alter option flag variables which only exist in those
   22427      frontends.
   22428 
   22429  -- Macro: OPTIMIZATION_OPTIONS (LEVEL, SIZE)
   22430      Some machines may desire to change what optimizations are
   22431      performed for various optimization levels.   This macro, if
   22432      defined, is executed once just after the optimization level is
   22433      determined and before the remainder of the command options have
   22434      been parsed.  Values set in this macro are used as the default
   22435      values for the other command line options.
   22436 
   22437      LEVEL is the optimization level specified; 2 if `-O2' is
   22438      specified, 1 if `-O' is specified, and 0 if neither is specified.
   22439 
   22440      SIZE is nonzero if `-Os' is specified and zero otherwise.
   22441 
   22442      You should not use this macro to change options that are not
   22443      machine-specific.  These should uniformly selected by the same
   22444      optimization level on all supported machines.  Use this macro to
   22445      enable machine-specific optimizations.
   22446 
   22447      *Do not examine `write_symbols' in this macro!* The debugging
   22448      options are not supposed to alter the generated code.
   22449 
   22450  -- Target Hook: bool TARGET_HELP (void)
   22451      This hook is called in response to the user invoking
   22452      `--target-help' on the command line.  It gives the target a chance
   22453      to display extra information on the target specific command line
   22454      options found in its `.opt' file.
   22455 
   22456  -- Macro: CAN_DEBUG_WITHOUT_FP
   22457      Define this macro if debugging can be performed even without a
   22458      frame pointer.  If this macro is defined, GCC will turn on the
   22459      `-fomit-frame-pointer' option whenever `-O' is specified.
   22460 
   22461 
   22462 File: gccint.info,  Node: Per-Function Data,  Next: Storage Layout,  Prev: Run-time Target,  Up: Target Macros
   22463 
   22464 15.4 Defining data structures for per-function information.
   22465 ===========================================================
   22466 
   22467 If the target needs to store information on a per-function basis, GCC
   22468 provides a macro and a couple of variables to allow this.  Note, just
   22469 using statics to store the information is a bad idea, since GCC supports
   22470 nested functions, so you can be halfway through encoding one function
   22471 when another one comes along.
   22472 
   22473  GCC defines a data structure called `struct function' which contains
   22474 all of the data specific to an individual function.  This structure
   22475 contains a field called `machine' whose type is `struct
   22476 machine_function *', which can be used by targets to point to their own
   22477 specific data.
   22478 
   22479  If a target needs per-function specific data it should define the type
   22480 `struct machine_function' and also the macro `INIT_EXPANDERS'.  This
   22481 macro should be used to initialize the function pointer
   22482 `init_machine_status'.  This pointer is explained below.
   22483 
   22484  One typical use of per-function, target specific data is to create an
   22485 RTX to hold the register containing the function's return address.  This
   22486 RTX can then be used to implement the `__builtin_return_address'
   22487 function, for level 0.
   22488 
   22489  Note--earlier implementations of GCC used a single data area to hold
   22490 all of the per-function information.  Thus when processing of a nested
   22491 function began the old per-function data had to be pushed onto a stack,
   22492 and when the processing was finished, it had to be popped off the
   22493 stack.  GCC used to provide function pointers called
   22494 `save_machine_status' and `restore_machine_status' to handle the saving
   22495 and restoring of the target specific information.  Since the single
   22496 data area approach is no longer used, these pointers are no longer
   22497 supported.
   22498 
   22499  -- Macro: INIT_EXPANDERS
   22500      Macro called to initialize any target specific information.  This
   22501      macro is called once per function, before generation of any RTL
   22502      has begun.  The intention of this macro is to allow the
   22503      initialization of the function pointer `init_machine_status'.
   22504 
   22505  -- Variable: void (*)(struct function *) init_machine_status
   22506      If this function pointer is non-`NULL' it will be called once per
   22507      function, before function compilation starts, in order to allow the
   22508      target to perform any target specific initialization of the
   22509      `struct function' structure.  It is intended that this would be
   22510      used to initialize the `machine' of that structure.
   22511 
   22512      `struct machine_function' structures are expected to be freed by
   22513      GC.  Generally, any memory that they reference must be allocated
   22514      by using `ggc_alloc', including the structure itself.
   22515 
   22516 
   22517 File: gccint.info,  Node: Storage Layout,  Next: Type Layout,  Prev: Per-Function Data,  Up: Target Macros
   22518 
   22519 15.5 Storage Layout
   22520 ===================
   22521 
   22522 Note that the definitions of the macros in this table which are sizes or
   22523 alignments measured in bits do not need to be constant.  They can be C
   22524 expressions that refer to static variables, such as the `target_flags'.
   22525 *Note Run-time Target::.
   22526 
   22527  -- Macro: BITS_BIG_ENDIAN
   22528      Define this macro to have the value 1 if the most significant bit
   22529      in a byte has the lowest number; otherwise define it to have the
   22530      value zero.  This means that bit-field instructions count from the
   22531      most significant bit.  If the machine has no bit-field
   22532      instructions, then this must still be defined, but it doesn't
   22533      matter which value it is defined to.  This macro need not be a
   22534      constant.
   22535 
   22536      This macro does not affect the way structure fields are packed into
   22537      bytes or words; that is controlled by `BYTES_BIG_ENDIAN'.
   22538 
   22539  -- Macro: BYTES_BIG_ENDIAN
   22540      Define this macro to have the value 1 if the most significant byte
   22541      in a word has the lowest number.  This macro need not be a
   22542      constant.
   22543 
   22544  -- Macro: WORDS_BIG_ENDIAN
   22545      Define this macro to have the value 1 if, in a multiword object,
   22546      the most significant word has the lowest number.  This applies to
   22547      both memory locations and registers; GCC fundamentally assumes
   22548      that the order of words in memory is the same as the order in
   22549      registers.  This macro need not be a constant.
   22550 
   22551  -- Macro: LIBGCC2_WORDS_BIG_ENDIAN
   22552      Define this macro if `WORDS_BIG_ENDIAN' is not constant.  This
   22553      must be a constant value with the same meaning as
   22554      `WORDS_BIG_ENDIAN', which will be used only when compiling
   22555      `libgcc2.c'.  Typically the value will be set based on
   22556      preprocessor defines.
   22557 
   22558  -- Macro: FLOAT_WORDS_BIG_ENDIAN
   22559      Define this macro to have the value 1 if `DFmode', `XFmode' or
   22560      `TFmode' floating point numbers are stored in memory with the word
   22561      containing the sign bit at the lowest address; otherwise define it
   22562      to have the value 0.  This macro need not be a constant.
   22563 
   22564      You need not define this macro if the ordering is the same as for
   22565      multi-word integers.
   22566 
   22567  -- Macro: BITS_PER_UNIT
   22568      Define this macro to be the number of bits in an addressable
   22569      storage unit (byte).  If you do not define this macro the default
   22570      is 8.
   22571 
   22572  -- Macro: BITS_PER_WORD
   22573      Number of bits in a word.  If you do not define this macro, the
   22574      default is `BITS_PER_UNIT * UNITS_PER_WORD'.
   22575 
   22576  -- Macro: MAX_BITS_PER_WORD
   22577      Maximum number of bits in a word.  If this is undefined, the
   22578      default is `BITS_PER_WORD'.  Otherwise, it is the constant value
   22579      that is the largest value that `BITS_PER_WORD' can have at
   22580      run-time.
   22581 
   22582  -- Macro: UNITS_PER_WORD
   22583      Number of storage units in a word; normally the size of a
   22584      general-purpose register, a power of two from 1 or 8.
   22585 
   22586  -- Macro: MIN_UNITS_PER_WORD
   22587      Minimum number of units in a word.  If this is undefined, the
   22588      default is `UNITS_PER_WORD'.  Otherwise, it is the constant value
   22589      that is the smallest value that `UNITS_PER_WORD' can have at
   22590      run-time.
   22591 
   22592  -- Macro: UNITS_PER_SIMD_WORD
   22593      Number of units in the vectors that the vectorizer can produce.
   22594      The default is equal to `UNITS_PER_WORD', because the vectorizer
   22595      can do some transformations even in absence of specialized SIMD
   22596      hardware.
   22597 
   22598  -- Macro: POINTER_SIZE
   22599      Width of a pointer, in bits.  You must specify a value no wider
   22600      than the width of `Pmode'.  If it is not equal to the width of
   22601      `Pmode', you must define `POINTERS_EXTEND_UNSIGNED'.  If you do
   22602      not specify a value the default is `BITS_PER_WORD'.
   22603 
   22604  -- Macro: POINTERS_EXTEND_UNSIGNED
   22605      A C expression that determines how pointers should be extended from
   22606      `ptr_mode' to either `Pmode' or `word_mode'.  It is greater than
   22607      zero if pointers should be zero-extended, zero if they should be
   22608      sign-extended, and negative if some other sort of conversion is
   22609      needed.  In the last case, the extension is done by the target's
   22610      `ptr_extend' instruction.
   22611 
   22612      You need not define this macro if the `ptr_mode', `Pmode' and
   22613      `word_mode' are all the same width.
   22614 
   22615  -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE)
   22616      A macro to update M and UNSIGNEDP when an object whose type is
   22617      TYPE and which has the specified mode and signedness is to be
   22618      stored in a register.  This macro is only called when TYPE is a
   22619      scalar type.
   22620 
   22621      On most RISC machines, which only have operations that operate on
   22622      a full register, define this macro to set M to `word_mode' if M is
   22623      an integer mode narrower than `BITS_PER_WORD'.  In most cases,
   22624      only integer modes should be widened because wider-precision
   22625      floating-point operations are usually more expensive than their
   22626      narrower counterparts.
   22627 
   22628      For most machines, the macro definition does not change UNSIGNEDP.
   22629      However, some machines, have instructions that preferentially
   22630      handle either signed or unsigned quantities of certain modes.  For
   22631      example, on the DEC Alpha, 32-bit loads from memory and 32-bit add
   22632      instructions sign-extend the result to 64 bits.  On such machines,
   22633      set UNSIGNEDP according to which kind of extension is more
   22634      efficient.
   22635 
   22636      Do not define this macro if it would never modify M.
   22637 
   22638  -- Macro: PROMOTE_FUNCTION_MODE
   22639      Like `PROMOTE_MODE', but is applied to outgoing function arguments
   22640      or function return values, as specified by
   22641      `TARGET_PROMOTE_FUNCTION_ARGS' and
   22642      `TARGET_PROMOTE_FUNCTION_RETURN', respectively.
   22643 
   22644      The default is `PROMOTE_MODE'.
   22645 
   22646  -- Target Hook: bool TARGET_PROMOTE_FUNCTION_ARGS (tree FNTYPE)
   22647      This target hook should return `true' if the promotion described by
   22648      `PROMOTE_FUNCTION_MODE' should be done for outgoing function
   22649      arguments.
   22650 
   22651  -- Target Hook: bool TARGET_PROMOTE_FUNCTION_RETURN (tree FNTYPE)
   22652      This target hook should return `true' if the promotion described by
   22653      `PROMOTE_FUNCTION_MODE' should be done for the return value of
   22654      functions.
   22655 
   22656      If this target hook returns `true', `TARGET_FUNCTION_VALUE' must
   22657      perform the same promotions done by `PROMOTE_FUNCTION_MODE'.
   22658 
   22659  -- Macro: PARM_BOUNDARY
   22660      Normal alignment required for function parameters on the stack, in
   22661      bits.  All stack parameters receive at least this much alignment
   22662      regardless of data type.  On most machines, this is the same as the
   22663      size of an integer.
   22664 
   22665  -- Macro: STACK_BOUNDARY
   22666      Define this macro to the minimum alignment enforced by hardware
   22667      for the stack pointer on this machine.  The definition is a C
   22668      expression for the desired alignment (measured in bits).  This
   22669      value is used as a default if `PREFERRED_STACK_BOUNDARY' is not
   22670      defined.  On most machines, this should be the same as
   22671      `PARM_BOUNDARY'.
   22672 
   22673  -- Macro: PREFERRED_STACK_BOUNDARY
   22674      Define this macro if you wish to preserve a certain alignment for
   22675      the stack pointer, greater than what the hardware enforces.  The
   22676      definition is a C expression for the desired alignment (measured
   22677      in bits).  This macro must evaluate to a value equal to or larger
   22678      than `STACK_BOUNDARY'.
   22679 
   22680  -- Macro: FUNCTION_BOUNDARY
   22681      Alignment required for a function entry point, in bits.
   22682 
   22683  -- Macro: BIGGEST_ALIGNMENT
   22684      Biggest alignment that any data type can require on this machine,
   22685      in bits.  Note that this is not the biggest alignment that is
   22686      supported, just the biggest alignment that, when violated, may
   22687      cause a fault.
   22688 
   22689  -- Macro: MINIMUM_ATOMIC_ALIGNMENT
   22690      If defined, the smallest alignment, in bits, that can be given to
   22691      an object that can be referenced in one operation, without
   22692      disturbing any nearby object.  Normally, this is `BITS_PER_UNIT',
   22693      but may be larger on machines that don't have byte or half-word
   22694      store operations.
   22695 
   22696  -- Macro: BIGGEST_FIELD_ALIGNMENT
   22697      Biggest alignment that any structure or union field can require on
   22698      this machine, in bits.  If defined, this overrides
   22699      `BIGGEST_ALIGNMENT' for structure and union fields only, unless
   22700      the field alignment has been set by the `__attribute__ ((aligned
   22701      (N)))' construct.
   22702 
   22703  -- Macro: ADJUST_FIELD_ALIGN (FIELD, COMPUTED)
   22704      An expression for the alignment of a structure field FIELD if the
   22705      alignment computed in the usual way (including applying of
   22706      `BIGGEST_ALIGNMENT' and `BIGGEST_FIELD_ALIGNMENT' to the
   22707      alignment) is COMPUTED.  It overrides alignment only if the field
   22708      alignment has not been set by the `__attribute__ ((aligned (N)))'
   22709      construct.
   22710 
   22711  -- Macro: MAX_OFILE_ALIGNMENT
   22712      Biggest alignment supported by the object file format of this
   22713      machine.  Use this macro to limit the alignment which can be
   22714      specified using the `__attribute__ ((aligned (N)))' construct.  If
   22715      not defined, the default value is `BIGGEST_ALIGNMENT'.
   22716 
   22717      On systems that use ELF, the default (in `config/elfos.h') is the
   22718      largest supported 32-bit ELF section alignment representable on a
   22719      32-bit host e.g. `(((unsigned HOST_WIDEST_INT) 1 << 28) * 8)'.  On
   22720      32-bit ELF the largest supported section alignment in bits is
   22721      `(0x80000000 * 8)', but this is not representable on 32-bit hosts.
   22722 
   22723  -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN)
   22724      If defined, a C expression to compute the alignment for a variable
   22725      in the static store.  TYPE is the data type, and BASIC-ALIGN is
   22726      the alignment that the object would ordinarily have.  The value of
   22727      this macro is used instead of that alignment to align the object.
   22728 
   22729      If this macro is not defined, then BASIC-ALIGN is used.
   22730 
   22731      One use of this macro is to increase alignment of medium-size data
   22732      to make it all fit in fewer cache lines.  Another is to cause
   22733      character arrays to be word-aligned so that `strcpy' calls that
   22734      copy constants to character arrays can be done inline.
   22735 
   22736  -- Macro: CONSTANT_ALIGNMENT (CONSTANT, BASIC-ALIGN)
   22737      If defined, a C expression to compute the alignment given to a
   22738      constant that is being placed in memory.  CONSTANT is the constant
   22739      and BASIC-ALIGN is the alignment that the object would ordinarily
   22740      have.  The value of this macro is used instead of that alignment to
   22741      align the object.
   22742 
   22743      If this macro is not defined, then BASIC-ALIGN is used.
   22744 
   22745      The typical use of this macro is to increase alignment for string
   22746      constants to be word aligned so that `strcpy' calls that copy
   22747      constants can be done inline.
   22748 
   22749  -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN)
   22750      If defined, a C expression to compute the alignment for a variable
   22751      in the local store.  TYPE is the data type, and BASIC-ALIGN is the
   22752      alignment that the object would ordinarily have.  The value of this
   22753      macro is used instead of that alignment to align the object.
   22754 
   22755      If this macro is not defined, then BASIC-ALIGN is used.
   22756 
   22757      One use of this macro is to increase alignment of medium-size data
   22758      to make it all fit in fewer cache lines.
   22759 
   22760  -- Macro: EMPTY_FIELD_BOUNDARY
   22761      Alignment in bits to be given to a structure bit-field that
   22762      follows an empty field such as `int : 0;'.
   22763 
   22764      If `PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro.
   22765 
   22766  -- Macro: STRUCTURE_SIZE_BOUNDARY
   22767      Number of bits which any structure or union's size must be a
   22768      multiple of.  Each structure or union's size is rounded up to a
   22769      multiple of this.
   22770 
   22771      If you do not define this macro, the default is the same as
   22772      `BITS_PER_UNIT'.
   22773 
   22774  -- Macro: STRICT_ALIGNMENT
   22775      Define this macro to be the value 1 if instructions will fail to
   22776      work if given data not on the nominal alignment.  If instructions
   22777      will merely go slower in that case, define this macro as 0.
   22778 
   22779  -- Macro: PCC_BITFIELD_TYPE_MATTERS
   22780      Define this if you wish to imitate the way many other C compilers
   22781      handle alignment of bit-fields and the structures that contain
   22782      them.
   22783 
   22784      The behavior is that the type written for a named bit-field (`int',
   22785      `short', or other integer type) imposes an alignment for the entire
   22786      structure, as if the structure really did contain an ordinary
   22787      field of that type.  In addition, the bit-field is placed within
   22788      the structure so that it would fit within such a field, not
   22789      crossing a boundary for it.
   22790 
   22791      Thus, on most machines, a named bit-field whose type is written as
   22792      `int' would not cross a four-byte boundary, and would force
   22793      four-byte alignment for the whole structure.  (The alignment used
   22794      may not be four bytes; it is controlled by the other alignment
   22795      parameters.)
   22796 
   22797      An unnamed bit-field will not affect the alignment of the
   22798      containing structure.
   22799 
   22800      If the macro is defined, its definition should be a C expression;
   22801      a nonzero value for the expression enables this behavior.
   22802 
   22803      Note that if this macro is not defined, or its value is zero, some
   22804      bit-fields may cross more than one alignment boundary.  The
   22805      compiler can support such references if there are `insv', `extv',
   22806      and `extzv' insns that can directly reference memory.
   22807 
   22808      The other known way of making bit-fields work is to define
   22809      `STRUCTURE_SIZE_BOUNDARY' as large as `BIGGEST_ALIGNMENT'.  Then
   22810      every structure can be accessed with fullwords.
   22811 
   22812      Unless the machine has bit-field instructions or you define
   22813      `STRUCTURE_SIZE_BOUNDARY' that way, you must define
   22814      `PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value.
   22815 
   22816      If your aim is to make GCC use the same conventions for laying out
   22817      bit-fields as are used by another compiler, here is how to
   22818      investigate what the other compiler does.  Compile and run this
   22819      program:
   22820 
   22821           struct foo1
   22822           {
   22823             char x;
   22824             char :0;
   22825             char y;
   22826           };
   22827 
   22828           struct foo2
   22829           {
   22830             char x;
   22831             int :0;
   22832             char y;
   22833           };
   22834 
   22835           main ()
   22836           {
   22837             printf ("Size of foo1 is %d\n",
   22838                     sizeof (struct foo1));
   22839             printf ("Size of foo2 is %d\n",
   22840                     sizeof (struct foo2));
   22841             exit (0);
   22842           }
   22843 
   22844      If this prints 2 and 5, then the compiler's behavior is what you
   22845      would get from `PCC_BITFIELD_TYPE_MATTERS'.
   22846 
   22847  -- Macro: BITFIELD_NBYTES_LIMITED
   22848      Like `PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited
   22849      to aligning a bit-field within the structure.
   22850 
   22851  -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELDS (void)
   22852      When `PCC_BITFIELD_TYPE_MATTERS' is true this hook will determine
   22853      whether unnamed bitfields affect the alignment of the containing
   22854      structure.  The hook should return true if the structure should
   22855      inherit the alignment requirements of an unnamed bitfield's type.
   22856 
   22857  -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELDS (void)
   22858      This target hook should return `true' if accesses to volatile
   22859      bitfields should use the narrowest mode possible.  It should
   22860      return `false' if these accesses should use the bitfield container
   22861      type.
   22862 
   22863      The default is `!TARGET_STRICT_ALIGN'.
   22864 
   22865  -- Macro: MEMBER_TYPE_FORCES_BLK (FIELD, MODE)
   22866      Return 1 if a structure or array containing FIELD should be
   22867      accessed using `BLKMODE'.
   22868 
   22869      If FIELD is the only field in the structure, MODE is its mode,
   22870      otherwise MODE is VOIDmode.  MODE is provided in the case where
   22871      structures of one field would require the structure's mode to
   22872      retain the field's mode.
   22873 
   22874      Normally, this is not needed.
   22875 
   22876  -- Macro: ROUND_TYPE_ALIGN (TYPE, COMPUTED, SPECIFIED)
   22877      Define this macro as an expression for the alignment of a type
   22878      (given by TYPE as a tree node) if the alignment computed in the
   22879      usual way is COMPUTED and the alignment explicitly specified was
   22880      SPECIFIED.
   22881 
   22882      The default is to use SPECIFIED if it is larger; otherwise, use
   22883      the smaller of COMPUTED and `BIGGEST_ALIGNMENT'
   22884 
   22885  -- Macro: MAX_FIXED_MODE_SIZE
   22886      An integer expression for the size in bits of the largest integer
   22887      machine mode that should actually be used.  All integer machine
   22888      modes of this size or smaller can be used for structures and
   22889      unions with the appropriate sizes.  If this macro is undefined,
   22890      `GET_MODE_BITSIZE (DImode)' is assumed.
   22891 
   22892  -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL)
   22893      If defined, an expression of type `enum machine_mode' that
   22894      specifies the mode of the save area operand of a
   22895      `save_stack_LEVEL' named pattern (*note Standard Names::).
   22896      SAVE_LEVEL is one of `SAVE_BLOCK', `SAVE_FUNCTION', or
   22897      `SAVE_NONLOCAL' and selects which of the three named patterns is
   22898      having its mode specified.
   22899 
   22900      You need not define this macro if it always returns `Pmode'.  You
   22901      would most commonly define this macro if the `save_stack_LEVEL'
   22902      patterns need to support both a 32- and a 64-bit mode.
   22903 
   22904  -- Macro: STACK_SIZE_MODE
   22905      If defined, an expression of type `enum machine_mode' that
   22906      specifies the mode of the size increment operand of an
   22907      `allocate_stack' named pattern (*note Standard Names::).
   22908 
   22909      You need not define this macro if it always returns `word_mode'.
   22910      You would most commonly define this macro if the `allocate_stack'
   22911      pattern needs to support both a 32- and a 64-bit mode.
   22912 
   22913  -- Target Hook: enum machine_mode TARGET_LIBGCC_CMP_RETURN_MODE ()
   22914      This target hook should return the mode to be used for the return
   22915      value of compare instructions expanded to libgcc calls.  If not
   22916      defined `word_mode' is returned which is the right choice for a
   22917      majority of targets.
   22918 
   22919  -- Target Hook: enum machine_mode TARGET_LIBGCC_SHIFT_COUNT_MODE ()
   22920      This target hook should return the mode to be used for the shift
   22921      count operand of shift instructions expanded to libgcc calls.  If
   22922      not defined `word_mode' is returned which is the right choice for
   22923      a majority of targets.
   22924 
   22925  -- Macro: TARGET_FLOAT_FORMAT
   22926      A code distinguishing the floating point format of the target
   22927      machine.  There are two defined values:
   22928 
   22929     `IEEE_FLOAT_FORMAT'
   22930           This code indicates IEEE floating point.  It is the default;
   22931           there is no need to define `TARGET_FLOAT_FORMAT' when the
   22932           format is IEEE.
   22933 
   22934     `VAX_FLOAT_FORMAT'
   22935           This code indicates the "F float" (for `float') and "D float"
   22936           or "G float" formats (for `double') used on the VAX and
   22937           PDP-11.
   22938 
   22939      If your target uses a floating point format other than these, you
   22940      must define a new NAME_FLOAT_FORMAT code for it, and add support
   22941      for it to `real.c'.
   22942 
   22943      The ordering of the component words of floating point values
   22944      stored in memory is controlled by `FLOAT_WORDS_BIG_ENDIAN'.
   22945 
   22946  -- Macro: MODE_HAS_NANS (MODE)
   22947      When defined, this macro should be true if MODE has a NaN
   22948      representation.  The compiler assumes that NaNs are not equal to
   22949      anything (including themselves) and that addition, subtraction,
   22950      multiplication and division all return NaNs when one operand is
   22951      NaN.
   22952 
   22953      By default, this macro is true if MODE is a floating-point mode
   22954      and the target floating-point format is IEEE.
   22955 
   22956  -- Macro: MODE_HAS_INFINITIES (MODE)
   22957      This macro should be true if MODE can represent infinity.  At
   22958      present, the compiler uses this macro to decide whether `x - x' is
   22959      always defined.  By default, the macro is true when MODE is a
   22960      floating-point mode and the target format is IEEE.
   22961 
   22962  -- Macro: MODE_HAS_SIGNED_ZEROS (MODE)
   22963      True if MODE distinguishes between positive and negative zero.
   22964      The rules are expected to follow the IEEE standard:
   22965 
   22966         * `x + x' has the same sign as `x'.
   22967 
   22968         * If the sum of two values with opposite sign is zero, the
   22969           result is positive for all rounding modes expect towards
   22970           -infinity, for which it is negative.
   22971 
   22972         * The sign of a product or quotient is negative when exactly one
   22973           of the operands is negative.
   22974 
   22975      The default definition is true if MODE is a floating-point mode
   22976      and the target format is IEEE.
   22977 
   22978  -- Macro: MODE_HAS_SIGN_DEPENDENT_ROUNDING (MODE)
   22979      If defined, this macro should be true for MODE if it has at least
   22980      one rounding mode in which `x' and `-x' can be rounded to numbers
   22981      of different magnitude.  Two such modes are towards -infinity and
   22982      towards +infinity.
   22983 
   22984      The default definition of this macro is true if MODE is a
   22985      floating-point mode and the target format is IEEE.
   22986 
   22987  -- Macro: ROUND_TOWARDS_ZERO
   22988      If defined, this macro should be true if the prevailing rounding
   22989      mode is towards zero.  A true value has the following effects:
   22990 
   22991         * `MODE_HAS_SIGN_DEPENDENT_ROUNDING' will be false for all
   22992           modes.
   22993 
   22994         * `libgcc.a''s floating-point emulator will round towards zero
   22995           rather than towards nearest.
   22996 
   22997         * The compiler's floating-point emulator will round towards
   22998           zero after doing arithmetic, and when converting from the
   22999           internal float format to the target format.
   23000 
   23001      The macro does not affect the parsing of string literals.  When the
   23002      primary rounding mode is towards zero, library functions like
   23003      `strtod' might still round towards nearest, and the compiler's
   23004      parser should behave like the target's `strtod' where possible.
   23005 
   23006      Not defining this macro is equivalent to returning zero.
   23007 
   23008  -- Macro: LARGEST_EXPONENT_IS_NORMAL (SIZE)
   23009      This macro should return true if floats with SIZE bits do not have
   23010      a NaN or infinity representation, but use the largest exponent for
   23011      normal numbers instead.
   23012 
   23013      Defining this macro to true for SIZE causes `MODE_HAS_NANS' and
   23014      `MODE_HAS_INFINITIES' to be false for SIZE-bit modes.  It also
   23015      affects the way `libgcc.a' and `real.c' emulate floating-point
   23016      arithmetic.
   23017 
   23018      The default definition of this macro returns false for all sizes.
   23019 
   23020  -- Target Hook: bool TARGET_VECTOR_OPAQUE_P (tree TYPE)
   23021      This target hook should return `true' a vector is opaque.  That
   23022      is, if no cast is needed when copying a vector value of type TYPE
   23023      into another vector lvalue of the same size.  Vector opaque types
   23024      cannot be initialized.  The default is that there are no such
   23025      types.
   23026 
   23027  -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (tree RECORD_TYPE)
   23028      This target hook returns `true' if bit-fields in the given
   23029      RECORD_TYPE are to be laid out following the rules of Microsoft
   23030      Visual C/C++, namely: (i) a bit-field won't share the same storage
   23031      unit with the previous bit-field if their underlying types have
   23032      different sizes, and the bit-field will be aligned to the highest
   23033      alignment of the underlying types of itself and of the previous
   23034      bit-field; (ii) a zero-sized bit-field will affect the alignment of
   23035      the whole enclosing structure, even if it is unnamed; except that
   23036      (iii) a zero-sized bit-field will be disregarded unless it follows
   23037      another bit-field of nonzero size.  If this hook returns `true',
   23038      other macros that control bit-field layout are ignored.
   23039 
   23040      When a bit-field is inserted into a packed record, the whole size
   23041      of the underlying type is used by one or more same-size adjacent
   23042      bit-fields (that is, if its long:3, 32 bits is used in the record,
   23043      and any additional adjacent long bit-fields are packed into the
   23044      same chunk of 32 bits.  However, if the size changes, a new field
   23045      of that size is allocated).  In an unpacked record, this is the
   23046      same as using alignment, but not equivalent when packing.
   23047 
   23048      If both MS bit-fields and `__attribute__((packed))' are used, the
   23049      latter will take precedence.  If `__attribute__((packed))' is used
   23050      on a single field when MS bit-fields are in use, it will take
   23051      precedence for that field, but the alignment of the rest of the
   23052      structure may affect its placement.
   23053 
   23054  -- Target Hook: bool TARGET_DECIMAL_FLOAT_SUPPORTED_P (void)
   23055      Returns true if the target supports decimal floating point.
   23056 
   23057  -- Target Hook: bool TARGET_FIXED_POINT_SUPPORTED_P (void)
   23058      Returns true if the target supports fixed-point arithmetic.
   23059 
   23060  -- Target Hook: void TARGET_EXPAND_TO_RTL_HOOK (void)
   23061      This hook is called just before expansion into rtl, allowing the
   23062      target to perform additional initializations or analysis before
   23063      the expansion.  For example, the rs6000 port uses it to allocate a
   23064      scratch stack slot for use in copying SDmode values between memory
   23065      and floating point registers whenever the function being expanded
   23066      has any SDmode usage.
   23067 
   23068  -- Target Hook: void TARGET_INSTANTIATE_DECLS (void)
   23069      This hook allows the backend to perform additional instantiations
   23070      on rtl that are not actually in any insns yet, but will be later.
   23071 
   23072  -- Target Hook: const char * TARGET_MANGLE_TYPE (tree TYPE)
   23073      If your target defines any fundamental types, or any types your
   23074      target uses should be mangled differently from the default, define
   23075      this hook to return the appropriate encoding for these types as
   23076      part of a C++ mangled name.  The TYPE argument is the tree
   23077      structure representing the type to be mangled.  The hook may be
   23078      applied to trees which are not target-specific fundamental types;
   23079      it should return `NULL' for all such types, as well as arguments
   23080      it does not recognize.  If the return value is not `NULL', it must
   23081      point to a statically-allocated string constant.
   23082 
   23083      Target-specific fundamental types might be new fundamental types or
   23084      qualified versions of ordinary fundamental types.  Encode new
   23085      fundamental types as `u N NAME', where NAME is the name used for
   23086      the type in source code, and N is the length of NAME in decimal.
   23087      Encode qualified versions of ordinary types as `U N NAME CODE',
   23088      where NAME is the name used for the type qualifier in source code,
   23089      N is the length of NAME as above, and CODE is the code used to
   23090      represent the unqualified version of this type.  (See
   23091      `write_builtin_type' in `cp/mangle.c' for the list of codes.)  In
   23092      both cases the spaces are for clarity; do not include any spaces
   23093      in your string.
   23094 
   23095      This hook is applied to types prior to typedef resolution.  If the
   23096      mangled name for a particular type depends only on that type's
   23097      main variant, you can perform typedef resolution yourself using
   23098      `TYPE_MAIN_VARIANT' before mangling.
   23099 
   23100      The default version of this hook always returns `NULL', which is
   23101      appropriate for a target that does not define any new fundamental
   23102      types.
   23103 
   23104 
   23105 File: gccint.info,  Node: Type Layout,  Next: Registers,  Prev: Storage Layout,  Up: Target Macros
   23106 
   23107 15.6 Layout of Source Language Data Types
   23108 =========================================
   23109 
   23110 These macros define the sizes and other characteristics of the standard
   23111 basic data types used in programs being compiled.  Unlike the macros in
   23112 the previous section, these apply to specific features of C and related
   23113 languages, rather than to fundamental aspects of storage layout.
   23114 
   23115  -- Macro: INT_TYPE_SIZE
   23116      A C expression for the size in bits of the type `int' on the
   23117      target machine.  If you don't define this, the default is one word.
   23118 
   23119  -- Macro: SHORT_TYPE_SIZE
   23120      A C expression for the size in bits of the type `short' on the
   23121      target machine.  If you don't define this, the default is half a
   23122      word.  (If this would be less than one storage unit, it is rounded
   23123      up to one unit.)
   23124 
   23125  -- Macro: LONG_TYPE_SIZE
   23126      A C expression for the size in bits of the type `long' on the
   23127      target machine.  If you don't define this, the default is one word.
   23128 
   23129  -- Macro: ADA_LONG_TYPE_SIZE
   23130      On some machines, the size used for the Ada equivalent of the type
   23131      `long' by a native Ada compiler differs from that used by C.  In
   23132      that situation, define this macro to be a C expression to be used
   23133      for the size of that type.  If you don't define this, the default
   23134      is the value of `LONG_TYPE_SIZE'.
   23135 
   23136  -- Macro: LONG_LONG_TYPE_SIZE
   23137      A C expression for the size in bits of the type `long long' on the
   23138      target machine.  If you don't define this, the default is two
   23139      words.  If you want to support GNU Ada on your machine, the value
   23140      of this macro must be at least 64.
   23141 
   23142  -- Macro: CHAR_TYPE_SIZE
   23143      A C expression for the size in bits of the type `char' on the
   23144      target machine.  If you don't define this, the default is
   23145      `BITS_PER_UNIT'.
   23146 
   23147  -- Macro: BOOL_TYPE_SIZE
   23148      A C expression for the size in bits of the C++ type `bool' and C99
   23149      type `_Bool' on the target machine.  If you don't define this, and
   23150      you probably shouldn't, the default is `CHAR_TYPE_SIZE'.
   23151 
   23152  -- Macro: FLOAT_TYPE_SIZE
   23153      A C expression for the size in bits of the type `float' on the
   23154      target machine.  If you don't define this, the default is one word.
   23155 
   23156  -- Macro: DOUBLE_TYPE_SIZE
   23157      A C expression for the size in bits of the type `double' on the
   23158      target machine.  If you don't define this, the default is two
   23159      words.
   23160 
   23161  -- Macro: LONG_DOUBLE_TYPE_SIZE
   23162      A C expression for the size in bits of the type `long double' on
   23163      the target machine.  If you don't define this, the default is two
   23164      words.
   23165 
   23166  -- Macro: SHORT_FRACT_TYPE_SIZE
   23167      A C expression for the size in bits of the type `short _Fract' on
   23168      the target machine.  If you don't define this, the default is
   23169      `BITS_PER_UNIT'.
   23170 
   23171  -- Macro: FRACT_TYPE_SIZE
   23172      A C expression for the size in bits of the type `_Fract' on the
   23173      target machine.  If you don't define this, the default is
   23174      `BITS_PER_UNIT * 2'.
   23175 
   23176  -- Macro: LONG_FRACT_TYPE_SIZE
   23177      A C expression for the size in bits of the type `long _Fract' on
   23178      the target machine.  If you don't define this, the default is
   23179      `BITS_PER_UNIT * 4'.
   23180 
   23181  -- Macro: LONG_LONG_FRACT_TYPE_SIZE
   23182      A C expression for the size in bits of the type `long long _Fract'
   23183      on the target machine.  If you don't define this, the default is
   23184      `BITS_PER_UNIT * 8'.
   23185 
   23186  -- Macro: SHORT_ACCUM_TYPE_SIZE
   23187      A C expression for the size in bits of the type `short _Accum' on
   23188      the target machine.  If you don't define this, the default is
   23189      `BITS_PER_UNIT * 2'.
   23190 
   23191  -- Macro: ACCUM_TYPE_SIZE
   23192      A C expression for the size in bits of the type `_Accum' on the
   23193      target machine.  If you don't define this, the default is
   23194      `BITS_PER_UNIT * 4'.
   23195 
   23196  -- Macro: LONG_ACCUM_TYPE_SIZE
   23197      A C expression for the size in bits of the type `long _Accum' on
   23198      the target machine.  If you don't define this, the default is
   23199      `BITS_PER_UNIT * 8'.
   23200 
   23201  -- Macro: LONG_LONG_ACCUM_TYPE_SIZE
   23202      A C expression for the size in bits of the type `long long _Accum'
   23203      on the target machine.  If you don't define this, the default is
   23204      `BITS_PER_UNIT * 16'.
   23205 
   23206  -- Macro: LIBGCC2_LONG_DOUBLE_TYPE_SIZE
   23207      Define this macro if `LONG_DOUBLE_TYPE_SIZE' is not constant or if
   23208      you want routines in `libgcc2.a' for a size other than
   23209      `LONG_DOUBLE_TYPE_SIZE'.  If you don't define this, the default is
   23210      `LONG_DOUBLE_TYPE_SIZE'.
   23211 
   23212  -- Macro: LIBGCC2_HAS_DF_MODE
   23213      Define this macro if neither `LIBGCC2_DOUBLE_TYPE_SIZE' nor
   23214      `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is `DFmode' but you want `DFmode'
   23215      routines in `libgcc2.a' anyway.  If you don't define this and
   23216      either `LIBGCC2_DOUBLE_TYPE_SIZE' or
   23217      `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64 then the default is 1,
   23218      otherwise it is 0.
   23219 
   23220  -- Macro: LIBGCC2_HAS_XF_MODE
   23221      Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not
   23222      `XFmode' but you want `XFmode' routines in `libgcc2.a' anyway.  If
   23223      you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 80
   23224      then the default is 1, otherwise it is 0.
   23225 
   23226  -- Macro: LIBGCC2_HAS_TF_MODE
   23227      Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not
   23228      `TFmode' but you want `TFmode' routines in `libgcc2.a' anyway.  If
   23229      you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 128
   23230      then the default is 1, otherwise it is 0.
   23231 
   23232  -- Macro: SF_SIZE
   23233  -- Macro: DF_SIZE
   23234  -- Macro: XF_SIZE
   23235  -- Macro: TF_SIZE
   23236      Define these macros to be the size in bits of the mantissa of
   23237      `SFmode', `DFmode', `XFmode' and `TFmode' values, if the defaults
   23238      in `libgcc2.h' are inappropriate.  By default, `FLT_MANT_DIG' is
   23239      used for `SF_SIZE', `LDBL_MANT_DIG' for `XF_SIZE' and `TF_SIZE',
   23240      and `DBL_MANT_DIG' or `LDBL_MANT_DIG' for `DF_SIZE' according to
   23241      whether `LIBGCC2_DOUBLE_TYPE_SIZE' or
   23242      `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64.
   23243 
   23244  -- Macro: TARGET_FLT_EVAL_METHOD
   23245      A C expression for the value for `FLT_EVAL_METHOD' in `float.h',
   23246      assuming, if applicable, that the floating-point control word is
   23247      in its default state.  If you do not define this macro the value of
   23248      `FLT_EVAL_METHOD' will be zero.
   23249 
   23250  -- Macro: WIDEST_HARDWARE_FP_SIZE
   23251      A C expression for the size in bits of the widest floating-point
   23252      format supported by the hardware.  If you define this macro, you
   23253      must specify a value less than or equal to the value of
   23254      `LONG_DOUBLE_TYPE_SIZE'.  If you do not define this macro, the
   23255      value of `LONG_DOUBLE_TYPE_SIZE' is the default.
   23256 
   23257  -- Macro: DEFAULT_SIGNED_CHAR
   23258      An expression whose value is 1 or 0, according to whether the type
   23259      `char' should be signed or unsigned by default.  The user can
   23260      always override this default with the options `-fsigned-char' and
   23261      `-funsigned-char'.
   23262 
   23263  -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void)
   23264      This target hook should return true if the compiler should give an
   23265      `enum' type only as many bytes as it takes to represent the range
   23266      of possible values of that type.  It should return false if all
   23267      `enum' types should be allocated like `int'.
   23268 
   23269      The default is to return false.
   23270 
   23271  -- Macro: SIZE_TYPE
   23272      A C expression for a string describing the name of the data type
   23273      to use for size values.  The typedef name `size_t' is defined
   23274      using the contents of the string.
   23275 
   23276      The string can contain more than one keyword.  If so, separate
   23277      them with spaces, and write first any length keyword, then
   23278      `unsigned' if appropriate, and finally `int'.  The string must
   23279      exactly match one of the data type names defined in the function
   23280      `init_decl_processing' in the file `c-decl.c'.  You may not omit
   23281      `int' or change the order--that would cause the compiler to crash
   23282      on startup.
   23283 
   23284      If you don't define this macro, the default is `"long unsigned
   23285      int"'.
   23286 
   23287  -- Macro: PTRDIFF_TYPE
   23288      A C expression for a string describing the name of the data type
   23289      to use for the result of subtracting two pointers.  The typedef
   23290      name `ptrdiff_t' is defined using the contents of the string.  See
   23291      `SIZE_TYPE' above for more information.
   23292 
   23293      If you don't define this macro, the default is `"long int"'.
   23294 
   23295  -- Macro: WCHAR_TYPE
   23296      A C expression for a string describing the name of the data type
   23297      to use for wide characters.  The typedef name `wchar_t' is defined
   23298      using the contents of the string.  See `SIZE_TYPE' above for more
   23299      information.
   23300 
   23301      If you don't define this macro, the default is `"int"'.
   23302 
   23303  -- Macro: WCHAR_TYPE_SIZE
   23304      A C expression for the size in bits of the data type for wide
   23305      characters.  This is used in `cpp', which cannot make use of
   23306      `WCHAR_TYPE'.
   23307 
   23308  -- Macro: WINT_TYPE
   23309      A C expression for a string describing the name of the data type to
   23310      use for wide characters passed to `printf' and returned from
   23311      `getwc'.  The typedef name `wint_t' is defined using the contents
   23312      of the string.  See `SIZE_TYPE' above for more information.
   23313 
   23314      If you don't define this macro, the default is `"unsigned int"'.
   23315 
   23316  -- Macro: INTMAX_TYPE
   23317      A C expression for a string describing the name of the data type
   23318      that can represent any value of any standard or extended signed
   23319      integer type.  The typedef name `intmax_t' is defined using the
   23320      contents of the string.  See `SIZE_TYPE' above for more
   23321      information.
   23322 
   23323      If you don't define this macro, the default is the first of
   23324      `"int"', `"long int"', or `"long long int"' that has as much
   23325      precision as `long long int'.
   23326 
   23327  -- Macro: UINTMAX_TYPE
   23328      A C expression for a string describing the name of the data type
   23329      that can represent any value of any standard or extended unsigned
   23330      integer type.  The typedef name `uintmax_t' is defined using the
   23331      contents of the string.  See `SIZE_TYPE' above for more
   23332      information.
   23333 
   23334      If you don't define this macro, the default is the first of
   23335      `"unsigned int"', `"long unsigned int"', or `"long long unsigned
   23336      int"' that has as much precision as `long long unsigned int'.
   23337 
   23338  -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION
   23339      The C++ compiler represents a pointer-to-member-function with a
   23340      struct that looks like:
   23341 
   23342             struct {
   23343               union {
   23344                 void (*fn)();
   23345                 ptrdiff_t vtable_index;
   23346               };
   23347               ptrdiff_t delta;
   23348             };
   23349 
   23350      The C++ compiler must use one bit to indicate whether the function
   23351      that will be called through a pointer-to-member-function is
   23352      virtual.  Normally, we assume that the low-order bit of a function
   23353      pointer must always be zero.  Then, by ensuring that the
   23354      vtable_index is odd, we can distinguish which variant of the union
   23355      is in use.  But, on some platforms function pointers can be odd,
   23356      and so this doesn't work.  In that case, we use the low-order bit
   23357      of the `delta' field, and shift the remainder of the `delta' field
   23358      to the left.
   23359 
   23360      GCC will automatically make the right selection about where to
   23361      store this bit using the `FUNCTION_BOUNDARY' setting for your
   23362      platform.  However, some platforms such as ARM/Thumb have
   23363      `FUNCTION_BOUNDARY' set such that functions always start at even
   23364      addresses, but the lowest bit of pointers to functions indicate
   23365      whether the function at that address is in ARM or Thumb mode.  If
   23366      this is the case of your architecture, you should define this
   23367      macro to `ptrmemfunc_vbit_in_delta'.
   23368 
   23369      In general, you should not have to define this macro.  On
   23370      architectures in which function addresses are always even,
   23371      according to `FUNCTION_BOUNDARY', GCC will automatically define
   23372      this macro to `ptrmemfunc_vbit_in_pfn'.
   23373 
   23374  -- Macro: TARGET_VTABLE_USES_DESCRIPTORS
   23375      Normally, the C++ compiler uses function pointers in vtables.  This
   23376      macro allows the target to change to use "function descriptors"
   23377      instead.  Function descriptors are found on targets for whom a
   23378      function pointer is actually a small data structure.  Normally the
   23379      data structure consists of the actual code address plus a data
   23380      pointer to which the function's data is relative.
   23381 
   23382      If vtables are used, the value of this macro should be the number
   23383      of words that the function descriptor occupies.
   23384 
   23385  -- Macro: TARGET_VTABLE_ENTRY_ALIGN
   23386      By default, the vtable entries are void pointers, the so the
   23387      alignment is the same as pointer alignment.  The value of this
   23388      macro specifies the alignment of the vtable entry in bits.  It
   23389      should be defined only when special alignment is necessary. */
   23390 
   23391  -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE
   23392      There are a few non-descriptor entries in the vtable at offsets
   23393      below zero.  If these entries must be padded (say, to preserve the
   23394      alignment specified by `TARGET_VTABLE_ENTRY_ALIGN'), set this to
   23395      the number of words in each data entry.
   23396 
   23397 
   23398 File: gccint.info,  Node: Registers,  Next: Register Classes,  Prev: Type Layout,  Up: Target Macros
   23399 
   23400 15.7 Register Usage
   23401 ===================
   23402 
   23403 This section explains how to describe what registers the target machine
   23404 has, and how (in general) they can be used.
   23405 
   23406  The description of which registers a specific instruction can use is
   23407 done with register classes; see *Note Register Classes::.  For
   23408 information on using registers to access a stack frame, see *Note Frame
   23409 Registers::.  For passing values in registers, see *Note Register
   23410 Arguments::.  For returning values in registers, see *Note Scalar
   23411 Return::.
   23412 
   23413 * Menu:
   23414 
   23415 * Register Basics::		Number and kinds of registers.
   23416 * Allocation Order::		Order in which registers are allocated.
   23417 * Values in Registers::		What kinds of values each reg can hold.
   23418 * Leaf Functions::		Renumbering registers for leaf functions.
   23419 * Stack Registers::		Handling a register stack such as 80387.
   23420 
   23421 
   23422 File: gccint.info,  Node: Register Basics,  Next: Allocation Order,  Up: Registers
   23423 
   23424 15.7.1 Basic Characteristics of Registers
   23425 -----------------------------------------
   23426 
   23427 Registers have various characteristics.
   23428 
   23429  -- Macro: FIRST_PSEUDO_REGISTER
   23430      Number of hardware registers known to the compiler.  They receive
   23431      numbers 0 through `FIRST_PSEUDO_REGISTER-1'; thus, the first
   23432      pseudo register's number really is assigned the number
   23433      `FIRST_PSEUDO_REGISTER'.
   23434 
   23435  -- Macro: FIXED_REGISTERS
   23436      An initializer that says which registers are used for fixed
   23437      purposes all throughout the compiled code and are therefore not
   23438      available for general allocation.  These would include the stack
   23439      pointer, the frame pointer (except on machines where that can be
   23440      used as a general register when no frame pointer is needed), the
   23441      program counter on machines where that is considered one of the
   23442      addressable registers, and any other numbered register with a
   23443      standard use.
   23444 
   23445      This information is expressed as a sequence of numbers, separated
   23446      by commas and surrounded by braces.  The Nth number is 1 if
   23447      register N is fixed, 0 otherwise.
   23448 
   23449      The table initialized from this macro, and the table initialized by
   23450      the following one, may be overridden at run time either
   23451      automatically, by the actions of the macro
   23452      `CONDITIONAL_REGISTER_USAGE', or by the user with the command
   23453      options `-ffixed-REG', `-fcall-used-REG' and `-fcall-saved-REG'.
   23454 
   23455  -- Macro: CALL_USED_REGISTERS
   23456      Like `FIXED_REGISTERS' but has 1 for each register that is
   23457      clobbered (in general) by function calls as well as for fixed
   23458      registers.  This macro therefore identifies the registers that are
   23459      not available for general allocation of values that must live
   23460      across function calls.
   23461 
   23462      If a register has 0 in `CALL_USED_REGISTERS', the compiler
   23463      automatically saves it on function entry and restores it on
   23464      function exit, if the register is used within the function.
   23465 
   23466  -- Macro: CALL_REALLY_USED_REGISTERS
   23467      Like `CALL_USED_REGISTERS' except this macro doesn't require that
   23468      the entire set of `FIXED_REGISTERS' be included.
   23469      (`CALL_USED_REGISTERS' must be a superset of `FIXED_REGISTERS').
   23470      This macro is optional.  If not specified, it defaults to the value
   23471      of `CALL_USED_REGISTERS'.
   23472 
   23473  -- Macro: HARD_REGNO_CALL_PART_CLOBBERED (REGNO, MODE)
   23474      A C expression that is nonzero if it is not permissible to store a
   23475      value of mode MODE in hard register number REGNO across a call
   23476      without some part of it being clobbered.  For most machines this
   23477      macro need not be defined.  It is only required for machines that
   23478      do not preserve the entire contents of a register across a call.
   23479 
   23480  -- Macro: CONDITIONAL_REGISTER_USAGE
   23481      Zero or more C statements that may conditionally modify five
   23482      variables `fixed_regs', `call_used_regs', `global_regs',
   23483      `reg_names', and `reg_class_contents', to take into account any
   23484      dependence of these register sets on target flags.  The first three
   23485      of these are of type `char []' (interpreted as Boolean vectors).
   23486      `global_regs' is a `const char *[]', and `reg_class_contents' is a
   23487      `HARD_REG_SET'.  Before the macro is called, `fixed_regs',
   23488      `call_used_regs', `reg_class_contents', and `reg_names' have been
   23489      initialized from `FIXED_REGISTERS', `CALL_USED_REGISTERS',
   23490      `REG_CLASS_CONTENTS', and `REGISTER_NAMES', respectively.
   23491      `global_regs' has been cleared, and any `-ffixed-REG',
   23492      `-fcall-used-REG' and `-fcall-saved-REG' command options have been
   23493      applied.
   23494 
   23495      You need not define this macro if it has no work to do.
   23496 
   23497      If the usage of an entire class of registers depends on the target
   23498      flags, you may indicate this to GCC by using this macro to modify
   23499      `fixed_regs' and `call_used_regs' to 1 for each of the registers
   23500      in the classes which should not be used by GCC.  Also define the
   23501      macro `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' to
   23502      return `NO_REGS' if it is called with a letter for a class that
   23503      shouldn't be used.
   23504 
   23505      (However, if this class is not included in `GENERAL_REGS' and all
   23506      of the insn patterns whose constraints permit this class are
   23507      controlled by target switches, then GCC will automatically avoid
   23508      using these registers when the target switches are opposed to
   23509      them.)
   23510 
   23511  -- Macro: INCOMING_REGNO (OUT)
   23512      Define this macro if the target machine has register windows.
   23513      This C expression returns the register number as seen by the
   23514      called function corresponding to the register number OUT as seen
   23515      by the calling function.  Return OUT if register number OUT is not
   23516      an outbound register.
   23517 
   23518  -- Macro: OUTGOING_REGNO (IN)
   23519      Define this macro if the target machine has register windows.
   23520      This C expression returns the register number as seen by the
   23521      calling function corresponding to the register number IN as seen
   23522      by the called function.  Return IN if register number IN is not an
   23523      inbound register.
   23524 
   23525  -- Macro: LOCAL_REGNO (REGNO)
   23526      Define this macro if the target machine has register windows.
   23527      This C expression returns true if the register is call-saved but
   23528      is in the register window.  Unlike most call-saved registers, such
   23529      registers need not be explicitly restored on function exit or
   23530      during non-local gotos.
   23531 
   23532  -- Macro: PC_REGNUM
   23533      If the program counter has a register number, define this as that
   23534      register number.  Otherwise, do not define it.
   23535 
   23536 
   23537 File: gccint.info,  Node: Allocation Order,  Next: Values in Registers,  Prev: Register Basics,  Up: Registers
   23538 
   23539 15.7.2 Order of Allocation of Registers
   23540 ---------------------------------------
   23541 
   23542 Registers are allocated in order.
   23543 
   23544  -- Macro: REG_ALLOC_ORDER
   23545      If defined, an initializer for a vector of integers, containing the
   23546      numbers of hard registers in the order in which GCC should prefer
   23547      to use them (from most preferred to least).
   23548 
   23549      If this macro is not defined, registers are used lowest numbered
   23550      first (all else being equal).
   23551 
   23552      One use of this macro is on machines where the highest numbered
   23553      registers must always be saved and the save-multiple-registers
   23554      instruction supports only sequences of consecutive registers.  On
   23555      such machines, define `REG_ALLOC_ORDER' to be an initializer that
   23556      lists the highest numbered allocable register first.
   23557 
   23558  -- Macro: ORDER_REGS_FOR_LOCAL_ALLOC
   23559      A C statement (sans semicolon) to choose the order in which to
   23560      allocate hard registers for pseudo-registers local to a basic
   23561      block.
   23562 
   23563      Store the desired register order in the array `reg_alloc_order'.
   23564      Element 0 should be the register to allocate first; element 1, the
   23565      next register; and so on.
   23566 
   23567      The macro body should not assume anything about the contents of
   23568      `reg_alloc_order' before execution of the macro.
   23569 
   23570      On most machines, it is not necessary to define this macro.
   23571 
   23572 
   23573 File: gccint.info,  Node: Values in Registers,  Next: Leaf Functions,  Prev: Allocation Order,  Up: Registers
   23574 
   23575 15.7.3 How Values Fit in Registers
   23576 ----------------------------------
   23577 
   23578 This section discusses the macros that describe which kinds of values
   23579 (specifically, which machine modes) each register can hold, and how many
   23580 consecutive registers are needed for a given mode.
   23581 
   23582  -- Macro: HARD_REGNO_NREGS (REGNO, MODE)
   23583      A C expression for the number of consecutive hard registers,
   23584      starting at register number REGNO, required to hold a value of mode
   23585      MODE.  This macro must never return zero, even if a register
   23586      cannot hold the requested mode - indicate that with
   23587      HARD_REGNO_MODE_OK and/or CANNOT_CHANGE_MODE_CLASS instead.
   23588 
   23589      On a machine where all registers are exactly one word, a suitable
   23590      definition of this macro is
   23591 
   23592           #define HARD_REGNO_NREGS(REGNO, MODE)            \
   23593              ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1)  \
   23594               / UNITS_PER_WORD)
   23595 
   23596  -- Macro: HARD_REGNO_NREGS_HAS_PADDING (REGNO, MODE)
   23597      A C expression that is nonzero if a value of mode MODE, stored in
   23598      memory, ends with padding that causes it to take up more space than
   23599      in registers starting at register number REGNO (as determined by
   23600      multiplying GCC's notion of the size of the register when
   23601      containing this mode by the number of registers returned by
   23602      `HARD_REGNO_NREGS').  By default this is zero.
   23603 
   23604      For example, if a floating-point value is stored in three 32-bit
   23605      registers but takes up 128 bits in memory, then this would be
   23606      nonzero.
   23607 
   23608      This macros only needs to be defined if there are cases where
   23609      `subreg_get_info' would otherwise wrongly determine that a
   23610      `subreg' can be represented by an offset to the register number,
   23611      when in fact such a `subreg' would contain some of the padding not
   23612      stored in registers and so not be representable.
   23613 
   23614  -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE)
   23615      For values of REGNO and MODE for which
   23616      `HARD_REGNO_NREGS_HAS_PADDING' returns nonzero, a C expression
   23617      returning the greater number of registers required to hold the
   23618      value including any padding.  In the example above, the value
   23619      would be four.
   23620 
   23621  -- Macro: REGMODE_NATURAL_SIZE (MODE)
   23622      Define this macro if the natural size of registers that hold values
   23623      of mode MODE is not the word size.  It is a C expression that
   23624      should give the natural size in bytes for the specified mode.  It
   23625      is used by the register allocator to try to optimize its results.
   23626      This happens for example on SPARC 64-bit where the natural size of
   23627      floating-point registers is still 32-bit.
   23628 
   23629  -- Macro: HARD_REGNO_MODE_OK (REGNO, MODE)
   23630      A C expression that is nonzero if it is permissible to store a
   23631      value of mode MODE in hard register number REGNO (or in several
   23632      registers starting with that one).  For a machine where all
   23633      registers are equivalent, a suitable definition is
   23634 
   23635           #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
   23636 
   23637      You need not include code to check for the numbers of fixed
   23638      registers, because the allocation mechanism considers them to be
   23639      always occupied.
   23640 
   23641      On some machines, double-precision values must be kept in even/odd
   23642      register pairs.  You can implement that by defining this macro to
   23643      reject odd register numbers for such modes.
   23644 
   23645      The minimum requirement for a mode to be OK in a register is that
   23646      the `movMODE' instruction pattern support moves between the
   23647      register and other hard register in the same class and that moving
   23648      a value into the register and back out not alter it.
   23649 
   23650      Since the same instruction used to move `word_mode' will work for
   23651      all narrower integer modes, it is not necessary on any machine for
   23652      `HARD_REGNO_MODE_OK' to distinguish between these modes, provided
   23653      you define patterns `movhi', etc., to take advantage of this.  This
   23654      is useful because of the interaction between `HARD_REGNO_MODE_OK'
   23655      and `MODES_TIEABLE_P'; it is very desirable for all integer modes
   23656      to be tieable.
   23657 
   23658      Many machines have special registers for floating point arithmetic.
   23659      Often people assume that floating point machine modes are allowed
   23660      only in floating point registers.  This is not true.  Any
   23661      registers that can hold integers can safely _hold_ a floating
   23662      point machine mode, whether or not floating arithmetic can be done
   23663      on it in those registers.  Integer move instructions can be used
   23664      to move the values.
   23665 
   23666      On some machines, though, the converse is true: fixed-point machine
   23667      modes may not go in floating registers.  This is true if the
   23668      floating registers normalize any value stored in them, because
   23669      storing a non-floating value there would garble it.  In this case,
   23670      `HARD_REGNO_MODE_OK' should reject fixed-point machine modes in
   23671      floating registers.  But if the floating registers do not
   23672      automatically normalize, if you can store any bit pattern in one
   23673      and retrieve it unchanged without a trap, then any machine mode
   23674      may go in a floating register, so you can define this macro to say
   23675      so.
   23676 
   23677      The primary significance of special floating registers is rather
   23678      that they are the registers acceptable in floating point arithmetic
   23679      instructions.  However, this is of no concern to
   23680      `HARD_REGNO_MODE_OK'.  You handle it by writing the proper
   23681      constraints for those instructions.
   23682 
   23683      On some machines, the floating registers are especially slow to
   23684      access, so that it is better to store a value in a stack frame
   23685      than in such a register if floating point arithmetic is not being
   23686      done.  As long as the floating registers are not in class
   23687      `GENERAL_REGS', they will not be used unless some pattern's
   23688      constraint asks for one.
   23689 
   23690  -- Macro: HARD_REGNO_RENAME_OK (FROM, TO)
   23691      A C expression that is nonzero if it is OK to rename a hard
   23692      register FROM to another hard register TO.
   23693 
   23694      One common use of this macro is to prevent renaming of a register
   23695      to another register that is not saved by a prologue in an interrupt
   23696      handler.
   23697 
   23698      The default is always nonzero.
   23699 
   23700  -- Macro: MODES_TIEABLE_P (MODE1, MODE2)
   23701      A C expression that is nonzero if a value of mode MODE1 is
   23702      accessible in mode MODE2 without copying.
   23703 
   23704      If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R,
   23705      MODE2)' are always the same for any R, then `MODES_TIEABLE_P
   23706      (MODE1, MODE2)' should be nonzero.  If they differ for any R, you
   23707      should define this macro to return zero unless some other
   23708      mechanism ensures the accessibility of the value in a narrower
   23709      mode.
   23710 
   23711      You should define this macro to return nonzero in as many cases as
   23712      possible since doing so will allow GCC to perform better register
   23713      allocation.
   23714 
   23715  -- Macro: AVOID_CCMODE_COPIES
   23716      Define this macro if the compiler should avoid copies to/from
   23717      `CCmode' registers.  You should only define this macro if support
   23718      for copying to/from `CCmode' is incomplete.
   23719 
   23720 
   23721 File: gccint.info,  Node: Leaf Functions,  Next: Stack Registers,  Prev: Values in Registers,  Up: Registers
   23722 
   23723 15.7.4 Handling Leaf Functions
   23724 ------------------------------
   23725 
   23726 On some machines, a leaf function (i.e., one which makes no calls) can
   23727 run more efficiently if it does not make its own register window.
   23728 Often this means it is required to receive its arguments in the
   23729 registers where they are passed by the caller, instead of the registers
   23730 where they would normally arrive.
   23731 
   23732  The special treatment for leaf functions generally applies only when
   23733 other conditions are met; for example, often they may use only those
   23734 registers for its own variables and temporaries.  We use the term "leaf
   23735 function" to mean a function that is suitable for this special
   23736 handling, so that functions with no calls are not necessarily "leaf
   23737 functions".
   23738 
   23739  GCC assigns register numbers before it knows whether the function is
   23740 suitable for leaf function treatment.  So it needs to renumber the
   23741 registers in order to output a leaf function.  The following macros
   23742 accomplish this.
   23743 
   23744  -- Macro: LEAF_REGISTERS
   23745      Name of a char vector, indexed by hard register number, which
   23746      contains 1 for a register that is allowable in a candidate for leaf
   23747      function treatment.
   23748 
   23749      If leaf function treatment involves renumbering the registers,
   23750      then the registers marked here should be the ones before
   23751      renumbering--those that GCC would ordinarily allocate.  The
   23752      registers which will actually be used in the assembler code, after
   23753      renumbering, should not be marked with 1 in this vector.
   23754 
   23755      Define this macro only if the target machine offers a way to
   23756      optimize the treatment of leaf functions.
   23757 
   23758  -- Macro: LEAF_REG_REMAP (REGNO)
   23759      A C expression whose value is the register number to which REGNO
   23760      should be renumbered, when a function is treated as a leaf
   23761      function.
   23762 
   23763      If REGNO is a register number which should not appear in a leaf
   23764      function before renumbering, then the expression should yield -1,
   23765      which will cause the compiler to abort.
   23766 
   23767      Define this macro only if the target machine offers a way to
   23768      optimize the treatment of leaf functions, and registers need to be
   23769      renumbered to do this.
   23770 
   23771  `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE' must
   23772 usually treat leaf functions specially.  They can test the C variable
   23773 `current_function_is_leaf' which is nonzero for leaf functions.
   23774 `current_function_is_leaf' is set prior to local register allocation
   23775 and is valid for the remaining compiler passes.  They can also test the
   23776 C variable `current_function_uses_only_leaf_regs' which is nonzero for
   23777 leaf functions which only use leaf registers.
   23778 `current_function_uses_only_leaf_regs' is valid after all passes that
   23779 modify the instructions have been run and is only useful if
   23780 `LEAF_REGISTERS' is defined.
   23781 
   23782 
   23783 File: gccint.info,  Node: Stack Registers,  Prev: Leaf Functions,  Up: Registers
   23784 
   23785 15.7.5 Registers That Form a Stack
   23786 ----------------------------------
   23787 
   23788 There are special features to handle computers where some of the
   23789 "registers" form a stack.  Stack registers are normally written by
   23790 pushing onto the stack, and are numbered relative to the top of the
   23791 stack.
   23792 
   23793  Currently, GCC can only handle one group of stack-like registers, and
   23794 they must be consecutively numbered.  Furthermore, the existing support
   23795 for stack-like registers is specific to the 80387 floating point
   23796 coprocessor.  If you have a new architecture that uses stack-like
   23797 registers, you will need to do substantial work on `reg-stack.c' and
   23798 write your machine description to cooperate with it, as well as
   23799 defining these macros.
   23800 
   23801  -- Macro: STACK_REGS
   23802      Define this if the machine has any stack-like registers.
   23803 
   23804  -- Macro: FIRST_STACK_REG
   23805      The number of the first stack-like register.  This one is the top
   23806      of the stack.
   23807 
   23808  -- Macro: LAST_STACK_REG
   23809      The number of the last stack-like register.  This one is the
   23810      bottom of the stack.
   23811 
   23812 
   23813 File: gccint.info,  Node: Register Classes,  Next: Old Constraints,  Prev: Registers,  Up: Target Macros
   23814 
   23815 15.8 Register Classes
   23816 =====================
   23817 
   23818 On many machines, the numbered registers are not all equivalent.  For
   23819 example, certain registers may not be allowed for indexed addressing;
   23820 certain registers may not be allowed in some instructions.  These
   23821 machine restrictions are described to the compiler using "register
   23822 classes".
   23823 
   23824  You define a number of register classes, giving each one a name and
   23825 saying which of the registers belong to it.  Then you can specify
   23826 register classes that are allowed as operands to particular instruction
   23827 patterns.
   23828 
   23829  In general, each register will belong to several classes.  In fact, one
   23830 class must be named `ALL_REGS' and contain all the registers.  Another
   23831 class must be named `NO_REGS' and contain no registers.  Often the
   23832 union of two classes will be another class; however, this is not
   23833 required.
   23834 
   23835  One of the classes must be named `GENERAL_REGS'.  There is nothing
   23836 terribly special about the name, but the operand constraint letters `r'
   23837 and `g' specify this class.  If `GENERAL_REGS' is the same as
   23838 `ALL_REGS', just define it as a macro which expands to `ALL_REGS'.
   23839 
   23840  Order the classes so that if class X is contained in class Y then X
   23841 has a lower class number than Y.
   23842 
   23843  The way classes other than `GENERAL_REGS' are specified in operand
   23844 constraints is through machine-dependent operand constraint letters.
   23845 You can define such letters to correspond to various classes, then use
   23846 them in operand constraints.
   23847 
   23848  You should define a class for the union of two classes whenever some
   23849 instruction allows both classes.  For example, if an instruction allows
   23850 either a floating point (coprocessor) register or a general register
   23851 for a certain operand, you should define a class `FLOAT_OR_GENERAL_REGS'
   23852 which includes both of them.  Otherwise you will get suboptimal code.
   23853 
   23854  You must also specify certain redundant information about the register
   23855 classes: for each class, which classes contain it and which ones are
   23856 contained in it; for each pair of classes, the largest class contained
   23857 in their union.
   23858 
   23859  When a value occupying several consecutive registers is expected in a
   23860 certain class, all the registers used must belong to that class.
   23861 Therefore, register classes cannot be used to enforce a requirement for
   23862 a register pair to start with an even-numbered register.  The way to
   23863 specify this requirement is with `HARD_REGNO_MODE_OK'.
   23864 
   23865  Register classes used for input-operands of bitwise-and or shift
   23866 instructions have a special requirement: each such class must have, for
   23867 each fixed-point machine mode, a subclass whose registers can transfer
   23868 that mode to or from memory.  For example, on some machines, the
   23869 operations for single-byte values (`QImode') are limited to certain
   23870 registers.  When this is so, each register class that is used in a
   23871 bitwise-and or shift instruction must have a subclass consisting of
   23872 registers from which single-byte values can be loaded or stored.  This
   23873 is so that `PREFERRED_RELOAD_CLASS' can always have a possible value to
   23874 return.
   23875 
   23876  -- Data type: enum reg_class
   23877      An enumerated type that must be defined with all the register
   23878      class names as enumerated values.  `NO_REGS' must be first.
   23879      `ALL_REGS' must be the last register class, followed by one more
   23880      enumerated value, `LIM_REG_CLASSES', which is not a register class
   23881      but rather tells how many classes there are.
   23882 
   23883      Each register class has a number, which is the value of casting
   23884      the class name to type `int'.  The number serves as an index in
   23885      many of the tables described below.
   23886 
   23887  -- Macro: N_REG_CLASSES
   23888      The number of distinct register classes, defined as follows:
   23889 
   23890           #define N_REG_CLASSES (int) LIM_REG_CLASSES
   23891 
   23892  -- Macro: REG_CLASS_NAMES
   23893      An initializer containing the names of the register classes as C
   23894      string constants.  These names are used in writing some of the
   23895      debugging dumps.
   23896 
   23897  -- Macro: REG_CLASS_CONTENTS
   23898      An initializer containing the contents of the register classes, as
   23899      integers which are bit masks.  The Nth integer specifies the
   23900      contents of class N.  The way the integer MASK is interpreted is
   23901      that register R is in the class if `MASK & (1 << R)' is 1.
   23902 
   23903      When the machine has more than 32 registers, an integer does not
   23904      suffice.  Then the integers are replaced by sub-initializers,
   23905      braced groupings containing several integers.  Each
   23906      sub-initializer must be suitable as an initializer for the type
   23907      `HARD_REG_SET' which is defined in `hard-reg-set.h'.  In this
   23908      situation, the first integer in each sub-initializer corresponds to
   23909      registers 0 through 31, the second integer to registers 32 through
   23910      63, and so on.
   23911 
   23912  -- Macro: REGNO_REG_CLASS (REGNO)
   23913      A C expression whose value is a register class containing hard
   23914      register REGNO.  In general there is more than one such class;
   23915      choose a class which is "minimal", meaning that no smaller class
   23916      also contains the register.
   23917 
   23918  -- Macro: BASE_REG_CLASS
   23919      A macro whose definition is the name of the class to which a valid
   23920      base register must belong.  A base register is one used in an
   23921      address which is the register value plus a displacement.
   23922 
   23923  -- Macro: MODE_BASE_REG_CLASS (MODE)
   23924      This is a variation of the `BASE_REG_CLASS' macro which allows the
   23925      selection of a base register in a mode dependent manner.  If MODE
   23926      is VOIDmode then it should return the same value as
   23927      `BASE_REG_CLASS'.
   23928 
   23929  -- Macro: MODE_BASE_REG_REG_CLASS (MODE)
   23930      A C expression whose value is the register class to which a valid
   23931      base register must belong in order to be used in a base plus index
   23932      register address.  You should define this macro if base plus index
   23933      addresses have different requirements than other base register
   23934      uses.
   23935 
   23936  -- Macro: MODE_CODE_BASE_REG_CLASS (MODE, OUTER_CODE, INDEX_CODE)
   23937      A C expression whose value is the register class to which a valid
   23938      base register must belong.  OUTER_CODE and INDEX_CODE define the
   23939      context in which the base register occurs.  OUTER_CODE is the code
   23940      of the immediately enclosing expression (`MEM' for the top level
   23941      of an address, `ADDRESS' for something that occurs in an
   23942      `address_operand').  INDEX_CODE is the code of the corresponding
   23943      index expression if OUTER_CODE is `PLUS'; `SCRATCH' otherwise.
   23944 
   23945  -- Macro: INDEX_REG_CLASS
   23946      A macro whose definition is the name of the class to which a valid
   23947      index register must belong.  An index register is one used in an
   23948      address where its value is either multiplied by a scale factor or
   23949      added to another register (as well as added to a displacement).
   23950 
   23951  -- Macro: REGNO_OK_FOR_BASE_P (NUM)
   23952      A C expression which is nonzero if register number NUM is suitable
   23953      for use as a base register in operand addresses.  It may be either
   23954      a suitable hard register or a pseudo register that has been
   23955      allocated such a hard register.
   23956 
   23957  -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE)
   23958      A C expression that is just like `REGNO_OK_FOR_BASE_P', except that
   23959      that expression may examine the mode of the memory reference in
   23960      MODE.  You should define this macro if the mode of the memory
   23961      reference affects whether a register may be used as a base
   23962      register.  If you define this macro, the compiler will use it
   23963      instead of `REGNO_OK_FOR_BASE_P'.  The mode may be `VOIDmode' for
   23964      addresses that appear outside a `MEM', i.e., as an
   23965      `address_operand'.
   23966 
   23967 
   23968  -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE)
   23969      A C expression which is nonzero if register number NUM is suitable
   23970      for use as a base register in base plus index operand addresses,
   23971      accessing memory in mode MODE.  It may be either a suitable hard
   23972      register or a pseudo register that has been allocated such a hard
   23973      register.  You should define this macro if base plus index
   23974      addresses have different requirements than other base register
   23975      uses.
   23976 
   23977      Use of this macro is deprecated; please use the more general
   23978      `REGNO_MODE_CODE_OK_FOR_BASE_P'.
   23979 
   23980  -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, OUTER_CODE,
   23981           INDEX_CODE)
   23982      A C expression that is just like `REGNO_MODE_OK_FOR_BASE_P', except
   23983      that that expression may examine the context in which the register
   23984      appears in the memory reference.  OUTER_CODE is the code of the
   23985      immediately enclosing expression (`MEM' if at the top level of the
   23986      address, `ADDRESS' for something that occurs in an
   23987      `address_operand').  INDEX_CODE is the code of the corresponding
   23988      index expression if OUTER_CODE is `PLUS'; `SCRATCH' otherwise.
   23989      The mode may be `VOIDmode' for addresses that appear outside a
   23990      `MEM', i.e., as an `address_operand'.
   23991 
   23992  -- Macro: REGNO_OK_FOR_INDEX_P (NUM)
   23993      A C expression which is nonzero if register number NUM is suitable
   23994      for use as an index register in operand addresses.  It may be
   23995      either a suitable hard register or a pseudo register that has been
   23996      allocated such a hard register.
   23997 
   23998      The difference between an index register and a base register is
   23999      that the index register may be scaled.  If an address involves the
   24000      sum of two registers, neither one of them scaled, then either one
   24001      may be labeled the "base" and the other the "index"; but whichever
   24002      labeling is used must fit the machine's constraints of which
   24003      registers may serve in each capacity.  The compiler will try both
   24004      labelings, looking for one that is valid, and will reload one or
   24005      both registers only if neither labeling works.
   24006 
   24007  -- Macro: PREFERRED_RELOAD_CLASS (X, CLASS)
   24008      A C expression that places additional restrictions on the register
   24009      class to use when it is necessary to copy value X into a register
   24010      in class CLASS.  The value is a register class; perhaps CLASS, or
   24011      perhaps another, smaller class.  On many machines, the following
   24012      definition is safe:
   24013 
   24014           #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
   24015 
   24016      Sometimes returning a more restrictive class makes better code.
   24017      For example, on the 68000, when X is an integer constant that is
   24018      in range for a `moveq' instruction, the value of this macro is
   24019      always `DATA_REGS' as long as CLASS includes the data registers.
   24020      Requiring a data register guarantees that a `moveq' will be used.
   24021 
   24022      One case where `PREFERRED_RELOAD_CLASS' must not return CLASS is
   24023      if X is a legitimate constant which cannot be loaded into some
   24024      register class.  By returning `NO_REGS' you can force X into a
   24025      memory location.  For example, rs6000 can load immediate values
   24026      into general-purpose registers, but does not have an instruction
   24027      for loading an immediate value into a floating-point register, so
   24028      `PREFERRED_RELOAD_CLASS' returns `NO_REGS' when X is a
   24029      floating-point constant.  If the constant can't be loaded into any
   24030      kind of register, code generation will be better if
   24031      `LEGITIMATE_CONSTANT_P' makes the constant illegitimate instead of
   24032      using `PREFERRED_RELOAD_CLASS'.
   24033 
   24034      If an insn has pseudos in it after register allocation, reload
   24035      will go through the alternatives and call repeatedly
   24036      `PREFERRED_RELOAD_CLASS' to find the best one.  Returning
   24037      `NO_REGS', in this case, makes reload add a `!' in front of the
   24038      constraint: the x86 back-end uses this feature to discourage usage
   24039      of 387 registers when math is done in the SSE registers (and vice
   24040      versa).
   24041 
   24042  -- Macro: PREFERRED_OUTPUT_RELOAD_CLASS (X, CLASS)
   24043      Like `PREFERRED_RELOAD_CLASS', but for output reloads instead of
   24044      input reloads.  If you don't define this macro, the default is to
   24045      use CLASS, unchanged.
   24046 
   24047      You can also use `PREFERRED_OUTPUT_RELOAD_CLASS' to discourage
   24048      reload from using some alternatives, like `PREFERRED_RELOAD_CLASS'.
   24049 
   24050  -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS)
   24051      A C expression that places additional restrictions on the register
   24052      class to use when it is necessary to be able to hold a value of
   24053      mode MODE in a reload register for which class CLASS would
   24054      ordinarily be used.
   24055 
   24056      Unlike `PREFERRED_RELOAD_CLASS', this macro should be used when
   24057      there are certain modes that simply can't go in certain reload
   24058      classes.
   24059 
   24060      The value is a register class; perhaps CLASS, or perhaps another,
   24061      smaller class.
   24062 
   24063      Don't define this macro unless the target machine has limitations
   24064      which require the macro to do something nontrivial.
   24065 
   24066  -- Target Hook: enum reg_class TARGET_SECONDARY_RELOAD (bool IN_P, rtx
   24067           X, enum reg_class RELOAD_CLASS, enum machine_mode
   24068           RELOAD_MODE, secondary_reload_info *SRI)
   24069      Many machines have some registers that cannot be copied directly
   24070      to or from memory or even from other types of registers.  An
   24071      example is the `MQ' register, which on most machines, can only be
   24072      copied to or from general registers, but not memory.  Below, we
   24073      shall be using the term 'intermediate register' when a move
   24074      operation cannot be performed directly, but has to be done by
   24075      copying the source into the intermediate register first, and then
   24076      copying the intermediate register to the destination.  An
   24077      intermediate register always has the same mode as source and
   24078      destination.  Since it holds the actual value being copied, reload
   24079      might apply optimizations to re-use an intermediate register and
   24080      eliding the copy from the source when it can determine that the
   24081      intermediate register still holds the required value.
   24082 
   24083      Another kind of secondary reload is required on some machines which
   24084      allow copying all registers to and from memory, but require a
   24085      scratch register for stores to some memory locations (e.g., those
   24086      with symbolic address on the RT, and those with certain symbolic
   24087      address on the SPARC when compiling PIC).  Scratch registers need
   24088      not have the same mode as the value being copied, and usually hold
   24089      a different value that that being copied.  Special patterns in the
   24090      md file are needed to describe how the copy is performed with the
   24091      help of the scratch register; these patterns also describe the
   24092      number, register class(es) and mode(s) of the scratch register(s).
   24093 
   24094      In some cases, both an intermediate and a scratch register are
   24095      required.
   24096 
   24097      For input reloads, this target hook is called with nonzero IN_P,
   24098      and X is an rtx that needs to be copied to a register of class
   24099      RELOAD_CLASS in RELOAD_MODE.  For output reloads, this target hook
   24100      is called with zero IN_P, and a register of class RELOAD_CLASS
   24101      needs to be copied to rtx X in RELOAD_MODE.
   24102 
   24103      If copying a register of RELOAD_CLASS from/to X requires an
   24104      intermediate register, the hook `secondary_reload' should return
   24105      the register class required for this intermediate register.  If no
   24106      intermediate register is required, it should return NO_REGS.  If
   24107      more than one intermediate register is required, describe the one
   24108      that is closest in the copy chain to the reload register.
   24109 
   24110      If scratch registers are needed, you also have to describe how to
   24111      perform the copy from/to the reload register to/from this closest
   24112      intermediate register.  Or if no intermediate register is
   24113      required, but still a scratch register is needed, describe the
   24114      copy  from/to the reload register to/from the reload operand X.
   24115 
   24116      You do this by setting `sri->icode' to the instruction code of a
   24117      pattern in the md file which performs the move.  Operands 0 and 1
   24118      are the output and input of this copy, respectively.  Operands
   24119      from operand 2 onward are for scratch operands.  These scratch
   24120      operands must have a mode, and a single-register-class output
   24121      constraint.
   24122 
   24123      When an intermediate register is used, the `secondary_reload' hook
   24124      will be called again to determine how to copy the intermediate
   24125      register to/from the reload operand X, so your hook must also have
   24126      code to handle the register class of the intermediate operand.
   24127 
   24128      X might be a pseudo-register or a `subreg' of a pseudo-register,
   24129      which could either be in a hard register or in memory.  Use
   24130      `true_regnum' to find out; it will return -1 if the pseudo is in
   24131      memory and the hard register number if it is in a register.
   24132 
   24133      Scratch operands in memory (constraint `"=m"' / `"=&m"') are
   24134      currently not supported.  For the time being, you will have to
   24135      continue to use `SECONDARY_MEMORY_NEEDED' for that purpose.
   24136 
   24137      `copy_cost' also uses this target hook to find out how values are
   24138      copied.  If you want it to include some extra cost for the need to
   24139      allocate (a) scratch register(s), set `sri->extra_cost' to the
   24140      additional cost.  Or if two dependent moves are supposed to have a
   24141      lower cost than the sum of the individual moves due to expected
   24142      fortuitous scheduling and/or special forwarding logic, you can set
   24143      `sri->extra_cost' to a negative amount.
   24144 
   24145  -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
   24146  -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X)
   24147  -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X)
   24148      These macros are obsolete, new ports should use the target hook
   24149      `TARGET_SECONDARY_RELOAD' instead.
   24150 
   24151      These are obsolete macros, replaced by the
   24152      `TARGET_SECONDARY_RELOAD' target hook.  Older ports still define
   24153      these macros to indicate to the reload phase that it may need to
   24154      allocate at least one register for a reload in addition to the
   24155      register to contain the data.  Specifically, if copying X to a
   24156      register CLASS in MODE requires an intermediate register, you were
   24157      supposed to define `SECONDARY_INPUT_RELOAD_CLASS' to return the
   24158      largest register class all of whose registers can be used as
   24159      intermediate registers or scratch registers.
   24160 
   24161      If copying a register CLASS in MODE to X requires an intermediate
   24162      or scratch register, `SECONDARY_OUTPUT_RELOAD_CLASS' was supposed
   24163      to be defined be defined to return the largest register class
   24164      required.  If the requirements for input and output reloads were
   24165      the same, the macro `SECONDARY_RELOAD_CLASS' should have been used
   24166      instead of defining both macros identically.
   24167 
   24168      The values returned by these macros are often `GENERAL_REGS'.
   24169      Return `NO_REGS' if no spare register is needed; i.e., if X can be
   24170      directly copied to or from a register of CLASS in MODE without
   24171      requiring a scratch register.  Do not define this macro if it
   24172      would always return `NO_REGS'.
   24173 
   24174      If a scratch register is required (either with or without an
   24175      intermediate register), you were supposed to define patterns for
   24176      `reload_inM' or `reload_outM', as required (*note Standard
   24177      Names::.  These patterns, which were normally implemented with a
   24178      `define_expand', should be similar to the `movM' patterns, except
   24179      that operand 2 is the scratch register.
   24180 
   24181      These patterns need constraints for the reload register and scratch
   24182      register that contain a single register class.  If the original
   24183      reload register (whose class is CLASS) can meet the constraint
   24184      given in the pattern, the value returned by these macros is used
   24185      for the class of the scratch register.  Otherwise, two additional
   24186      reload registers are required.  Their classes are obtained from
   24187      the constraints in the insn pattern.
   24188 
   24189      X might be a pseudo-register or a `subreg' of a pseudo-register,
   24190      which could either be in a hard register or in memory.  Use
   24191      `true_regnum' to find out; it will return -1 if the pseudo is in
   24192      memory and the hard register number if it is in a register.
   24193 
   24194      These macros should not be used in the case where a particular
   24195      class of registers can only be copied to memory and not to another
   24196      class of registers.  In that case, secondary reload registers are
   24197      not needed and would not be helpful.  Instead, a stack location
   24198      must be used to perform the copy and the `movM' pattern should use
   24199      memory as an intermediate storage.  This case often occurs between
   24200      floating-point and general registers.
   24201 
   24202  -- Macro: SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M)
   24203      Certain machines have the property that some registers cannot be
   24204      copied to some other registers without using memory.  Define this
   24205      macro on those machines to be a C expression that is nonzero if
   24206      objects of mode M in registers of CLASS1 can only be copied to
   24207      registers of class CLASS2 by storing a register of CLASS1 into
   24208      memory and loading that memory location into a register of CLASS2.
   24209 
   24210      Do not define this macro if its value would always be zero.
   24211 
   24212  -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE)
   24213      Normally when `SECONDARY_MEMORY_NEEDED' is defined, the compiler
   24214      allocates a stack slot for a memory location needed for register
   24215      copies.  If this macro is defined, the compiler instead uses the
   24216      memory location defined by this macro.
   24217 
   24218      Do not define this macro if you do not define
   24219      `SECONDARY_MEMORY_NEEDED'.
   24220 
   24221  -- Macro: SECONDARY_MEMORY_NEEDED_MODE (MODE)
   24222      When the compiler needs a secondary memory location to copy
   24223      between two registers of mode MODE, it normally allocates
   24224      sufficient memory to hold a quantity of `BITS_PER_WORD' bits and
   24225      performs the store and load operations in a mode that many bits
   24226      wide and whose class is the same as that of MODE.
   24227 
   24228      This is right thing to do on most machines because it ensures that
   24229      all bits of the register are copied and prevents accesses to the
   24230      registers in a narrower mode, which some machines prohibit for
   24231      floating-point registers.
   24232 
   24233      However, this default behavior is not correct on some machines,
   24234      such as the DEC Alpha, that store short integers in floating-point
   24235      registers differently than in integer registers.  On those
   24236      machines, the default widening will not work correctly and you
   24237      must define this macro to suppress that widening in some cases.
   24238      See the file `alpha.h' for details.
   24239 
   24240      Do not define this macro if you do not define
   24241      `SECONDARY_MEMORY_NEEDED' or if widening MODE to a mode that is
   24242      `BITS_PER_WORD' bits wide is correct for your machine.
   24243 
   24244  -- Macro: SMALL_REGISTER_CLASSES
   24245      On some machines, it is risky to let hard registers live across
   24246      arbitrary insns.  Typically, these machines have instructions that
   24247      require values to be in specific registers (like an accumulator),
   24248      and reload will fail if the required hard register is used for
   24249      another purpose across such an insn.
   24250 
   24251      Define `SMALL_REGISTER_CLASSES' to be an expression with a nonzero
   24252      value on these machines.  When this macro has a nonzero value, the
   24253      compiler will try to minimize the lifetime of hard registers.
   24254 
   24255      It is always safe to define this macro with a nonzero value, but
   24256      if you unnecessarily define it, you will reduce the amount of
   24257      optimizations that can be performed in some cases.  If you do not
   24258      define this macro with a nonzero value when it is required, the
   24259      compiler will run out of spill registers and print a fatal error
   24260      message.  For most machines, you should not define this macro at
   24261      all.
   24262 
   24263  -- Macro: CLASS_LIKELY_SPILLED_P (CLASS)
   24264      A C expression whose value is nonzero if pseudos that have been
   24265      assigned to registers of class CLASS would likely be spilled
   24266      because registers of CLASS are needed for spill registers.
   24267 
   24268      The default value of this macro returns 1 if CLASS has exactly one
   24269      register and zero otherwise.  On most machines, this default
   24270      should be used.  Only define this macro to some other expression
   24271      if pseudos allocated by `local-alloc.c' end up in memory because
   24272      their hard registers were needed for spill registers.  If this
   24273      macro returns nonzero for those classes, those pseudos will only
   24274      be allocated by `global.c', which knows how to reallocate the
   24275      pseudo to another register.  If there would not be another
   24276      register available for reallocation, you should not change the
   24277      definition of this macro since the only effect of such a
   24278      definition would be to slow down register allocation.
   24279 
   24280  -- Macro: CLASS_MAX_NREGS (CLASS, MODE)
   24281      A C expression for the maximum number of consecutive registers of
   24282      class CLASS needed to hold a value of mode MODE.
   24283 
   24284      This is closely related to the macro `HARD_REGNO_NREGS'.  In fact,
   24285      the value of the macro `CLASS_MAX_NREGS (CLASS, MODE)' should be
   24286      the maximum value of `HARD_REGNO_NREGS (REGNO, MODE)' for all
   24287      REGNO values in the class CLASS.
   24288 
   24289      This macro helps control the handling of multiple-word values in
   24290      the reload pass.
   24291 
   24292  -- Macro: CANNOT_CHANGE_MODE_CLASS (FROM, TO, CLASS)
   24293      If defined, a C expression that returns nonzero for a CLASS for
   24294      which a change from mode FROM to mode TO is invalid.
   24295 
   24296      For the example, loading 32-bit integer or floating-point objects
   24297      into floating-point registers on the Alpha extends them to 64 bits.
   24298      Therefore loading a 64-bit object and then storing it as a 32-bit
   24299      object does not store the low-order 32 bits, as would be the case
   24300      for a normal register.  Therefore, `alpha.h' defines
   24301      `CANNOT_CHANGE_MODE_CLASS' as below:
   24302 
   24303           #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
   24304             (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \
   24305              ? reg_classes_intersect_p (FLOAT_REGS, (CLASS)) : 0)
   24306 
   24307 
   24308 File: gccint.info,  Node: Old Constraints,  Next: Stack and Calling,  Prev: Register Classes,  Up: Target Macros
   24309 
   24310 15.9 Obsolete Macros for Defining Constraints
   24311 =============================================
   24312 
   24313 Machine-specific constraints can be defined with these macros instead
   24314 of the machine description constructs described in *Note Define
   24315 Constraints::.  This mechanism is obsolete.  New ports should not use
   24316 it; old ports should convert to the new mechanism.
   24317 
   24318  -- Macro: CONSTRAINT_LEN (CHAR, STR)
   24319      For the constraint at the start of STR, which starts with the
   24320      letter C, return the length.  This allows you to have register
   24321      class / constant / extra constraints that are longer than a single
   24322      letter; you don't need to define this macro if you can do with
   24323      single-letter constraints only.  The definition of this macro
   24324      should use DEFAULT_CONSTRAINT_LEN for all the characters that you
   24325      don't want to handle specially.  There are some sanity checks in
   24326      genoutput.c that check the constraint lengths for the md file, so
   24327      you can also use this macro to help you while you are
   24328      transitioning from a byzantine single-letter-constraint scheme:
   24329      when you return a negative length for a constraint you want to
   24330      re-use, genoutput will complain about every instance where it is
   24331      used in the md file.
   24332 
   24333  -- Macro: REG_CLASS_FROM_LETTER (CHAR)
   24334      A C expression which defines the machine-dependent operand
   24335      constraint letters for register classes.  If CHAR is such a
   24336      letter, the value should be the register class corresponding to
   24337      it.  Otherwise, the value should be `NO_REGS'.  The register
   24338      letter `r', corresponding to class `GENERAL_REGS', will not be
   24339      passed to this macro; you do not need to handle it.
   24340 
   24341  -- Macro: REG_CLASS_FROM_CONSTRAINT (CHAR, STR)
   24342      Like `REG_CLASS_FROM_LETTER', but you also get the constraint
   24343      string passed in STR, so that you can use suffixes to distinguish
   24344      between different variants.
   24345 
   24346  -- Macro: CONST_OK_FOR_LETTER_P (VALUE, C)
   24347      A C expression that defines the machine-dependent operand
   24348      constraint letters (`I', `J', `K', ... `P') that specify
   24349      particular ranges of integer values.  If C is one of those
   24350      letters, the expression should check that VALUE, an integer, is in
   24351      the appropriate range and return 1 if so, 0 otherwise.  If C is
   24352      not one of those letters, the value should be 0 regardless of
   24353      VALUE.
   24354 
   24355  -- Macro: CONST_OK_FOR_CONSTRAINT_P (VALUE, C, STR)
   24356      Like `CONST_OK_FOR_LETTER_P', but you also get the constraint
   24357      string passed in STR, so that you can use suffixes to distinguish
   24358      between different variants.
   24359 
   24360  -- Macro: CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C)
   24361      A C expression that defines the machine-dependent operand
   24362      constraint letters that specify particular ranges of
   24363      `const_double' values (`G' or `H').
   24364 
   24365      If C is one of those letters, the expression should check that
   24366      VALUE, an RTX of code `const_double', is in the appropriate range
   24367      and return 1 if so, 0 otherwise.  If C is not one of those
   24368      letters, the value should be 0 regardless of VALUE.
   24369 
   24370      `const_double' is used for all floating-point constants and for
   24371      `DImode' fixed-point constants.  A given letter can accept either
   24372      or both kinds of values.  It can use `GET_MODE' to distinguish
   24373      between these kinds.
   24374 
   24375  -- Macro: CONST_DOUBLE_OK_FOR_CONSTRAINT_P (VALUE, C, STR)
   24376      Like `CONST_DOUBLE_OK_FOR_LETTER_P', but you also get the
   24377      constraint string passed in STR, so that you can use suffixes to
   24378      distinguish between different variants.
   24379 
   24380  -- Macro: EXTRA_CONSTRAINT (VALUE, C)
   24381      A C expression that defines the optional machine-dependent
   24382      constraint letters that can be used to segregate specific types of
   24383      operands, usually memory references, for the target machine.  Any
   24384      letter that is not elsewhere defined and not matched by
   24385      `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' may be used.
   24386      Normally this macro will not be defined.
   24387 
   24388      If it is required for a particular target machine, it should
   24389      return 1 if VALUE corresponds to the operand type represented by
   24390      the constraint letter C.  If C is not defined as an extra
   24391      constraint, the value returned should be 0 regardless of VALUE.
   24392 
   24393      For example, on the ROMP, load instructions cannot have their
   24394      output in r0 if the memory reference contains a symbolic address.
   24395      Constraint letter `Q' is defined as representing a memory address
   24396      that does _not_ contain a symbolic address.  An alternative is
   24397      specified with a `Q' constraint on the input and `r' on the
   24398      output.  The next alternative specifies `m' on the input and a
   24399      register class that does not include r0 on the output.
   24400 
   24401  -- Macro: EXTRA_CONSTRAINT_STR (VALUE, C, STR)
   24402      Like `EXTRA_CONSTRAINT', but you also get the constraint string
   24403      passed in STR, so that you can use suffixes to distinguish between
   24404      different variants.
   24405 
   24406  -- Macro: EXTRA_MEMORY_CONSTRAINT (C, STR)
   24407      A C expression that defines the optional machine-dependent
   24408      constraint letters, amongst those accepted by `EXTRA_CONSTRAINT',
   24409      that should be treated like memory constraints by the reload pass.
   24410 
   24411      It should return 1 if the operand type represented by the
   24412      constraint at the start of STR, the first letter of which is the
   24413      letter C,  comprises a subset of all memory references including
   24414      all those whose address is simply a base register.  This allows
   24415      the reload pass to reload an operand, if it does not directly
   24416      correspond to the operand type of C, by copying its address into a
   24417      base register.
   24418 
   24419      For example, on the S/390, some instructions do not accept
   24420      arbitrary memory references, but only those that do not make use
   24421      of an index register.  The constraint letter `Q' is defined via
   24422      `EXTRA_CONSTRAINT' as representing a memory address of this type.
   24423      If the letter `Q' is marked as `EXTRA_MEMORY_CONSTRAINT', a `Q'
   24424      constraint can handle any memory operand, because the reload pass
   24425      knows it can be reloaded by copying the memory address into a base
   24426      register if required.  This is analogous to the way a `o'
   24427      constraint can handle any memory operand.
   24428 
   24429  -- Macro: EXTRA_ADDRESS_CONSTRAINT (C, STR)
   24430      A C expression that defines the optional machine-dependent
   24431      constraint letters, amongst those accepted by `EXTRA_CONSTRAINT' /
   24432      `EXTRA_CONSTRAINT_STR', that should be treated like address
   24433      constraints by the reload pass.
   24434 
   24435      It should return 1 if the operand type represented by the
   24436      constraint at the start of STR, which starts with the letter C,
   24437      comprises a subset of all memory addresses including all those
   24438      that consist of just a base register.  This allows the reload pass
   24439      to reload an operand, if it does not directly correspond to the
   24440      operand type of STR, by copying it into a base register.
   24441 
   24442      Any constraint marked as `EXTRA_ADDRESS_CONSTRAINT' can only be
   24443      used with the `address_operand' predicate.  It is treated
   24444      analogously to the `p' constraint.
   24445 
   24446 
   24447 File: gccint.info,  Node: Stack and Calling,  Next: Varargs,  Prev: Old Constraints,  Up: Target Macros
   24448 
   24449 15.10 Stack Layout and Calling Conventions
   24450 ==========================================
   24451 
   24452 This describes the stack layout and calling conventions.
   24453 
   24454 * Menu:
   24455 
   24456 * Frame Layout::
   24457 * Exception Handling::
   24458 * Stack Checking::
   24459 * Frame Registers::
   24460 * Elimination::
   24461 * Stack Arguments::
   24462 * Register Arguments::
   24463 * Scalar Return::
   24464 * Aggregate Return::
   24465 * Caller Saves::
   24466 * Function Entry::
   24467 * Profiling::
   24468 * Tail Calls::
   24469 * Stack Smashing Protection::
   24470 
   24471 
   24472 File: gccint.info,  Node: Frame Layout,  Next: Exception Handling,  Up: Stack and Calling
   24473 
   24474 15.10.1 Basic Stack Layout
   24475 --------------------------
   24476 
   24477 Here is the basic stack layout.
   24478 
   24479  -- Macro: STACK_GROWS_DOWNWARD
   24480      Define this macro if pushing a word onto the stack moves the stack
   24481      pointer to a smaller address.
   24482 
   24483      When we say, "define this macro if ...", it means that the
   24484      compiler checks this macro only with `#ifdef' so the precise
   24485      definition used does not matter.
   24486 
   24487  -- Macro: STACK_PUSH_CODE
   24488      This macro defines the operation used when something is pushed on
   24489      the stack.  In RTL, a push operation will be `(set (mem
   24490      (STACK_PUSH_CODE (reg sp))) ...)'
   24491 
   24492      The choices are `PRE_DEC', `POST_DEC', `PRE_INC', and `POST_INC'.
   24493      Which of these is correct depends on the stack direction and on
   24494      whether the stack pointer points to the last item on the stack or
   24495      whether it points to the space for the next item on the stack.
   24496 
   24497      The default is `PRE_DEC' when `STACK_GROWS_DOWNWARD' is defined,
   24498      which is almost always right, and `PRE_INC' otherwise, which is
   24499      often wrong.
   24500 
   24501  -- Macro: FRAME_GROWS_DOWNWARD
   24502      Define this macro to nonzero value if the addresses of local
   24503      variable slots are at negative offsets from the frame pointer.
   24504 
   24505  -- Macro: ARGS_GROW_DOWNWARD
   24506      Define this macro if successive arguments to a function occupy
   24507      decreasing addresses on the stack.
   24508 
   24509  -- Macro: STARTING_FRAME_OFFSET
   24510      Offset from the frame pointer to the first local variable slot to
   24511      be allocated.
   24512 
   24513      If `FRAME_GROWS_DOWNWARD', find the next slot's offset by
   24514      subtracting the first slot's length from `STARTING_FRAME_OFFSET'.
   24515      Otherwise, it is found by adding the length of the first slot to
   24516      the value `STARTING_FRAME_OFFSET'.
   24517 
   24518  -- Macro: STACK_ALIGNMENT_NEEDED
   24519      Define to zero to disable final alignment of the stack during
   24520      reload.  The nonzero default for this macro is suitable for most
   24521      ports.
   24522 
   24523      On ports where `STARTING_FRAME_OFFSET' is nonzero or where there
   24524      is a register save block following the local block that doesn't
   24525      require alignment to `STACK_BOUNDARY', it may be beneficial to
   24526      disable stack alignment and do it in the backend.
   24527 
   24528  -- Macro: STACK_POINTER_OFFSET
   24529      Offset from the stack pointer register to the first location at
   24530      which outgoing arguments are placed.  If not specified, the
   24531      default value of zero is used.  This is the proper value for most
   24532      machines.
   24533 
   24534      If `ARGS_GROW_DOWNWARD', this is the offset to the location above
   24535      the first location at which outgoing arguments are placed.
   24536 
   24537  -- Macro: FIRST_PARM_OFFSET (FUNDECL)
   24538      Offset from the argument pointer register to the first argument's
   24539      address.  On some machines it may depend on the data type of the
   24540      function.
   24541 
   24542      If `ARGS_GROW_DOWNWARD', this is the offset to the location above
   24543      the first argument's address.
   24544 
   24545  -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL)
   24546      Offset from the stack pointer register to an item dynamically
   24547      allocated on the stack, e.g., by `alloca'.
   24548 
   24549      The default value for this macro is `STACK_POINTER_OFFSET' plus the
   24550      length of the outgoing arguments.  The default is correct for most
   24551      machines.  See `function.c' for details.
   24552 
   24553  -- Macro: INITIAL_FRAME_ADDRESS_RTX
   24554      A C expression whose value is RTL representing the address of the
   24555      initial stack frame. This address is passed to `RETURN_ADDR_RTX'
   24556      and `DYNAMIC_CHAIN_ADDRESS'.  If you don't define this macro, a
   24557      reasonable default value will be used.  Define this macro in order
   24558      to make frame pointer elimination work in the presence of
   24559      `__builtin_frame_address (count)' and `__builtin_return_address
   24560      (count)' for `count' not equal to zero.
   24561 
   24562  -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR)
   24563      A C expression whose value is RTL representing the address in a
   24564      stack frame where the pointer to the caller's frame is stored.
   24565      Assume that FRAMEADDR is an RTL expression for the address of the
   24566      stack frame itself.
   24567 
   24568      If you don't define this macro, the default is to return the value
   24569      of FRAMEADDR--that is, the stack frame address is also the address
   24570      of the stack word that points to the previous frame.
   24571 
   24572  -- Macro: SETUP_FRAME_ADDRESSES
   24573      If defined, a C expression that produces the machine-specific code
   24574      to setup the stack so that arbitrary frames can be accessed.  For
   24575      example, on the SPARC, we must flush all of the register windows
   24576      to the stack before we can access arbitrary stack frames.  You
   24577      will seldom need to define this macro.
   24578 
   24579  -- Target Hook: bool TARGET_BUILTIN_SETJMP_FRAME_VALUE ()
   24580      This target hook should return an rtx that is used to store the
   24581      address of the current frame into the built in `setjmp' buffer.
   24582      The default value, `virtual_stack_vars_rtx', is correct for most
   24583      machines.  One reason you may need to define this target hook is if
   24584      `hard_frame_pointer_rtx' is the appropriate value on your machine.
   24585 
   24586  -- Macro: FRAME_ADDR_RTX (FRAMEADDR)
   24587      A C expression whose value is RTL representing the value of the
   24588      frame address for the current frame.  FRAMEADDR is the frame
   24589      pointer of the current frame.  This is used for
   24590      __builtin_frame_address.  You need only define this macro if the
   24591      frame address is not the same as the frame pointer.  Most machines
   24592      do not need to define it.
   24593 
   24594  -- Macro: RETURN_ADDR_RTX (COUNT, FRAMEADDR)
   24595      A C expression whose value is RTL representing the value of the
   24596      return address for the frame COUNT steps up from the current
   24597      frame, after the prologue.  FRAMEADDR is the frame pointer of the
   24598      COUNT frame, or the frame pointer of the COUNT - 1 frame if
   24599      `RETURN_ADDR_IN_PREVIOUS_FRAME' is defined.
   24600 
   24601      The value of the expression must always be the correct address when
   24602      COUNT is zero, but may be `NULL_RTX' if there is not way to
   24603      determine the return address of other frames.
   24604 
   24605  -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME
   24606      Define this if the return address of a particular stack frame is
   24607      accessed from the frame pointer of the previous stack frame.
   24608 
   24609  -- Macro: INCOMING_RETURN_ADDR_RTX
   24610      A C expression whose value is RTL representing the location of the
   24611      incoming return address at the beginning of any function, before
   24612      the prologue.  This RTL is either a `REG', indicating that the
   24613      return value is saved in `REG', or a `MEM' representing a location
   24614      in the stack.
   24615 
   24616      You only need to define this macro if you want to support call
   24617      frame debugging information like that provided by DWARF 2.
   24618 
   24619      If this RTL is a `REG', you should also define
   24620      `DWARF_FRAME_RETURN_COLUMN' to `DWARF_FRAME_REGNUM (REGNO)'.
   24621 
   24622  -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN
   24623      A C expression whose value is an integer giving a DWARF 2 column
   24624      number that may be used as an alternative return column.  The
   24625      column must not correspond to any gcc hard register (that is, it
   24626      must not be in the range of `DWARF_FRAME_REGNUM').
   24627 
   24628      This macro can be useful if `DWARF_FRAME_RETURN_COLUMN' is set to a
   24629      general register, but an alternative column needs to be used for
   24630      signal frames.  Some targets have also used different frame return
   24631      columns over time.
   24632 
   24633  -- Macro: DWARF_ZERO_REG
   24634      A C expression whose value is an integer giving a DWARF 2 register
   24635      number that is considered to always have the value zero.  This
   24636      should only be defined if the target has an architected zero
   24637      register, and someone decided it was a good idea to use that
   24638      register number to terminate the stack backtrace.  New ports
   24639      should avoid this.
   24640 
   24641  -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char
   24642           *LABEL, rtx PATTERN, int INDEX)
   24643      This target hook allows the backend to emit frame-related insns
   24644      that contain UNSPECs or UNSPEC_VOLATILEs.  The DWARF 2 call frame
   24645      debugging info engine will invoke it on insns of the form
   24646           (set (reg) (unspec [...] UNSPEC_INDEX))
   24647      and
   24648           (set (reg) (unspec_volatile [...] UNSPECV_INDEX)).
   24649      to let the backend emit the call frame instructions.  LABEL is the
   24650      CFI label attached to the insn, PATTERN is the pattern of the insn
   24651      and INDEX is `UNSPEC_INDEX' or `UNSPECV_INDEX'.
   24652 
   24653  -- Macro: INCOMING_FRAME_SP_OFFSET
   24654      A C expression whose value is an integer giving the offset, in
   24655      bytes, from the value of the stack pointer register to the top of
   24656      the stack frame at the beginning of any function, before the
   24657      prologue.  The top of the frame is defined to be the value of the
   24658      stack pointer in the previous frame, just before the call
   24659      instruction.
   24660 
   24661      You only need to define this macro if you want to support call
   24662      frame debugging information like that provided by DWARF 2.
   24663 
   24664  -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL)
   24665      A C expression whose value is an integer giving the offset, in
   24666      bytes, from the argument pointer to the canonical frame address
   24667      (cfa).  The final value should coincide with that calculated by
   24668      `INCOMING_FRAME_SP_OFFSET'.  Which is unfortunately not usable
   24669      during virtual register instantiation.
   24670 
   24671      The default value for this macro is `FIRST_PARM_OFFSET (fundecl)',
   24672      which is correct for most machines; in general, the arguments are
   24673      found immediately before the stack frame.  Note that this is not
   24674      the case on some targets that save registers into the caller's
   24675      frame, such as SPARC and rs6000, and so such targets need to
   24676      define this macro.
   24677 
   24678      You only need to define this macro if the default is incorrect,
   24679      and you want to support call frame debugging information like that
   24680      provided by DWARF 2.
   24681 
   24682  -- Macro: FRAME_POINTER_CFA_OFFSET (FUNDECL)
   24683      If defined, a C expression whose value is an integer giving the
   24684      offset in bytes from the frame pointer to the canonical frame
   24685      address (cfa).  The final value should coincide with that
   24686      calculated by `INCOMING_FRAME_SP_OFFSET'.
   24687 
   24688      Normally the CFA is calculated as an offset from the argument
   24689      pointer, via `ARG_POINTER_CFA_OFFSET', but if the argument pointer
   24690      is variable due to the ABI, this may not be possible.  If this
   24691      macro is defined, it implies that the virtual register
   24692      instantiation should be based on the frame pointer instead of the
   24693      argument pointer.  Only one of `FRAME_POINTER_CFA_OFFSET' and
   24694      `ARG_POINTER_CFA_OFFSET' should be defined.
   24695 
   24696  -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL)
   24697      If defined, a C expression whose value is an integer giving the
   24698      offset in bytes from the canonical frame address (cfa) to the
   24699      frame base used in DWARF 2 debug information.  The default is
   24700      zero.  A different value may reduce the size of debug information
   24701      on some ports.
   24702 
   24703 
   24704 File: gccint.info,  Node: Exception Handling,  Next: Stack Checking,  Prev: Frame Layout,  Up: Stack and Calling
   24705 
   24706 15.10.2 Exception Handling Support
   24707 ----------------------------------
   24708 
   24709  -- Macro: EH_RETURN_DATA_REGNO (N)
   24710      A C expression whose value is the Nth register number used for
   24711      data by exception handlers, or `INVALID_REGNUM' if fewer than N
   24712      registers are usable.
   24713 
   24714      The exception handling library routines communicate with the
   24715      exception handlers via a set of agreed upon registers.  Ideally
   24716      these registers should be call-clobbered; it is possible to use
   24717      call-saved registers, but may negatively impact code size.  The
   24718      target must support at least 2 data registers, but should define 4
   24719      if there are enough free registers.
   24720 
   24721      You must define this macro if you want to support call frame
   24722      exception handling like that provided by DWARF 2.
   24723 
   24724  -- Macro: EH_RETURN_STACKADJ_RTX
   24725      A C expression whose value is RTL representing a location in which
   24726      to store a stack adjustment to be applied before function return.
   24727      This is used to unwind the stack to an exception handler's call
   24728      frame.  It will be assigned zero on code paths that return
   24729      normally.
   24730 
   24731      Typically this is a call-clobbered hard register that is otherwise
   24732      untouched by the epilogue, but could also be a stack slot.
   24733 
   24734      Do not define this macro if the stack pointer is saved and restored
   24735      by the regular prolog and epilog code in the call frame itself; in
   24736      this case, the exception handling library routines will update the
   24737      stack location to be restored in place.  Otherwise, you must define
   24738      this macro if you want to support call frame exception handling
   24739      like that provided by DWARF 2.
   24740 
   24741  -- Macro: EH_RETURN_HANDLER_RTX
   24742      A C expression whose value is RTL representing a location in which
   24743      to store the address of an exception handler to which we should
   24744      return.  It will not be assigned on code paths that return
   24745      normally.
   24746 
   24747      Typically this is the location in the call frame at which the
   24748      normal return address is stored.  For targets that return by
   24749      popping an address off the stack, this might be a memory address
   24750      just below the _target_ call frame rather than inside the current
   24751      call frame.  If defined, `EH_RETURN_STACKADJ_RTX' will have already
   24752      been assigned, so it may be used to calculate the location of the
   24753      target call frame.
   24754 
   24755      Some targets have more complex requirements than storing to an
   24756      address calculable during initial code generation.  In that case
   24757      the `eh_return' instruction pattern should be used instead.
   24758 
   24759      If you want to support call frame exception handling, you must
   24760      define either this macro or the `eh_return' instruction pattern.
   24761 
   24762  -- Macro: RETURN_ADDR_OFFSET
   24763      If defined, an integer-valued C expression for which rtl will be
   24764      generated to add it to the exception handler address before it is
   24765      searched in the exception handling tables, and to subtract it
   24766      again from the address before using it to return to the exception
   24767      handler.
   24768 
   24769  -- Macro: ASM_PREFERRED_EH_DATA_FORMAT (CODE, GLOBAL)
   24770      This macro chooses the encoding of pointers embedded in the
   24771      exception handling sections.  If at all possible, this should be
   24772      defined such that the exception handling section will not require
   24773      dynamic relocations, and so may be read-only.
   24774 
   24775      CODE is 0 for data, 1 for code labels, 2 for function pointers.
   24776      GLOBAL is true if the symbol may be affected by dynamic
   24777      relocations.  The macro should return a combination of the
   24778      `DW_EH_PE_*' defines as found in `dwarf2.h'.
   24779 
   24780      If this macro is not defined, pointers will not be encoded but
   24781      represented directly.
   24782 
   24783  -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE,
   24784           ADDR, DONE)
   24785      This macro allows the target to emit whatever special magic is
   24786      required to represent the encoding chosen by
   24787      `ASM_PREFERRED_EH_DATA_FORMAT'.  Generic code takes care of
   24788      pc-relative and indirect encodings; this must be defined if the
   24789      target uses text-relative or data-relative encodings.
   24790 
   24791      This is a C statement that branches to DONE if the format was
   24792      handled.  ENCODING is the format chosen, SIZE is the number of
   24793      bytes that the format occupies, ADDR is the `SYMBOL_REF' to be
   24794      emitted.
   24795 
   24796  -- Macro: MD_UNWIND_SUPPORT
   24797      A string specifying a file to be #include'd in unwind-dw2.c.  The
   24798      file so included typically defines `MD_FALLBACK_FRAME_STATE_FOR'.
   24799 
   24800  -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS)
   24801      This macro allows the target to add CPU and operating system
   24802      specific code to the call-frame unwinder for use when there is no
   24803      unwind data available.  The most common reason to implement this
   24804      macro is to unwind through signal frames.
   24805 
   24806      This macro is called from `uw_frame_state_for' in `unwind-dw2.c',
   24807      `unwind-dw2-xtensa.c' and `unwind-ia64.c'.  CONTEXT is an
   24808      `_Unwind_Context'; FS is an `_Unwind_FrameState'.  Examine
   24809      `context->ra' for the address of the code being executed and
   24810      `context->cfa' for the stack pointer value.  If the frame can be
   24811      decoded, the register save addresses should be updated in FS and
   24812      the macro should evaluate to `_URC_NO_REASON'.  If the frame
   24813      cannot be decoded, the macro should evaluate to
   24814      `_URC_END_OF_STACK'.
   24815 
   24816      For proper signal handling in Java this macro is accompanied by
   24817      `MAKE_THROW_FRAME', defined in `libjava/include/*-signal.h'
   24818      headers.
   24819 
   24820  -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS)
   24821      This macro allows the target to add operating system specific code
   24822      to the call-frame unwinder to handle the IA-64 `.unwabi' unwinding
   24823      directive, usually used for signal or interrupt frames.
   24824 
   24825      This macro is called from `uw_update_context' in `unwind-ia64.c'.
   24826      CONTEXT is an `_Unwind_Context'; FS is an `_Unwind_FrameState'.
   24827      Examine `fs->unwabi' for the abi and context in the `.unwabi'
   24828      directive.  If the `.unwabi' directive can be handled, the
   24829      register save addresses should be updated in FS.
   24830 
   24831  -- Macro: TARGET_USES_WEAK_UNWIND_INFO
   24832      A C expression that evaluates to true if the target requires unwind
   24833      info to be given comdat linkage.  Define it to be `1' if comdat
   24834      linkage is necessary.  The default is `0'.
   24835 
   24836 
   24837 File: gccint.info,  Node: Stack Checking,  Next: Frame Registers,  Prev: Exception Handling,  Up: Stack and Calling
   24838 
   24839 15.10.3 Specifying How Stack Checking is Done
   24840 ---------------------------------------------
   24841 
   24842 GCC will check that stack references are within the boundaries of the
   24843 stack, if the `-fstack-check' is specified, in one of three ways:
   24844 
   24845   1. If the value of the `STACK_CHECK_BUILTIN' macro is nonzero, GCC
   24846      will assume that you have arranged for stack checking to be done at
   24847      appropriate places in the configuration files, e.g., in
   24848      `TARGET_ASM_FUNCTION_PROLOGUE'.  GCC will do not other special
   24849      processing.
   24850 
   24851   2. If `STACK_CHECK_BUILTIN' is zero and you defined a named pattern
   24852      called `check_stack' in your `md' file, GCC will call that pattern
   24853      with one argument which is the address to compare the stack value
   24854      against.  You must arrange for this pattern to report an error if
   24855      the stack pointer is out of range.
   24856 
   24857   3. If neither of the above are true, GCC will generate code to
   24858      periodically "probe" the stack pointer using the values of the
   24859      macros defined below.
   24860 
   24861  Normally, you will use the default values of these macros, so GCC will
   24862 use the third approach.
   24863 
   24864  -- Macro: STACK_CHECK_BUILTIN
   24865      A nonzero value if stack checking is done by the configuration
   24866      files in a machine-dependent manner.  You should define this macro
   24867      if stack checking is require by the ABI of your machine or if you
   24868      would like to have to stack checking in some more efficient way
   24869      than GCC's portable approach.  The default value of this macro is
   24870      zero.
   24871 
   24872  -- Macro: STACK_CHECK_PROBE_INTERVAL
   24873      An integer representing the interval at which GCC must generate
   24874      stack probe instructions.  You will normally define this macro to
   24875      be no larger than the size of the "guard pages" at the end of a
   24876      stack area.  The default value of 4096 is suitable for most
   24877      systems.
   24878 
   24879  -- Macro: STACK_CHECK_PROBE_LOAD
   24880      A integer which is nonzero if GCC should perform the stack probe
   24881      as a load instruction and zero if GCC should use a store
   24882      instruction.  The default is zero, which is the most efficient
   24883      choice on most systems.
   24884 
   24885  -- Macro: STACK_CHECK_PROTECT
   24886      The number of bytes of stack needed to recover from a stack
   24887      overflow, for languages where such a recovery is supported.  The
   24888      default value of 75 words should be adequate for most machines.
   24889 
   24890  -- Macro: STACK_CHECK_MAX_FRAME_SIZE
   24891      The maximum size of a stack frame, in bytes.  GCC will generate
   24892      probe instructions in non-leaf functions to ensure at least this
   24893      many bytes of stack are available.  If a stack frame is larger
   24894      than this size, stack checking will not be reliable and GCC will
   24895      issue a warning.  The default is chosen so that GCC only generates
   24896      one instruction on most systems.  You should normally not change
   24897      the default value of this macro.
   24898 
   24899  -- Macro: STACK_CHECK_FIXED_FRAME_SIZE
   24900      GCC uses this value to generate the above warning message.  It
   24901      represents the amount of fixed frame used by a function, not
   24902      including space for any callee-saved registers, temporaries and
   24903      user variables.  You need only specify an upper bound for this
   24904      amount and will normally use the default of four words.
   24905 
   24906  -- Macro: STACK_CHECK_MAX_VAR_SIZE
   24907      The maximum size, in bytes, of an object that GCC will place in the
   24908      fixed area of the stack frame when the user specifies
   24909      `-fstack-check'.  GCC computed the default from the values of the
   24910      above macros and you will normally not need to override that
   24911      default.
   24912 
   24913 
   24914 File: gccint.info,  Node: Frame Registers,  Next: Elimination,  Prev: Stack Checking,  Up: Stack and Calling
   24915 
   24916 15.10.4 Registers That Address the Stack Frame
   24917 ----------------------------------------------
   24918 
   24919 This discusses registers that address the stack frame.
   24920 
   24921  -- Macro: STACK_POINTER_REGNUM
   24922      The register number of the stack pointer register, which must also
   24923      be a fixed register according to `FIXED_REGISTERS'.  On most
   24924      machines, the hardware determines which register this is.
   24925 
   24926  -- Macro: FRAME_POINTER_REGNUM
   24927      The register number of the frame pointer register, which is used to
   24928      access automatic variables in the stack frame.  On some machines,
   24929      the hardware determines which register this is.  On other
   24930      machines, you can choose any register you wish for this purpose.
   24931 
   24932  -- Macro: HARD_FRAME_POINTER_REGNUM
   24933      On some machines the offset between the frame pointer and starting
   24934      offset of the automatic variables is not known until after register
   24935      allocation has been done (for example, because the saved registers
   24936      are between these two locations).  On those machines, define
   24937      `FRAME_POINTER_REGNUM' the number of a special, fixed register to
   24938      be used internally until the offset is known, and define
   24939      `HARD_FRAME_POINTER_REGNUM' to be the actual hard register number
   24940      used for the frame pointer.
   24941 
   24942      You should define this macro only in the very rare circumstances
   24943      when it is not possible to calculate the offset between the frame
   24944      pointer and the automatic variables until after register
   24945      allocation has been completed.  When this macro is defined, you
   24946      must also indicate in your definition of `ELIMINABLE_REGS' how to
   24947      eliminate `FRAME_POINTER_REGNUM' into either
   24948      `HARD_FRAME_POINTER_REGNUM' or `STACK_POINTER_REGNUM'.
   24949 
   24950      Do not define this macro if it would be the same as
   24951      `FRAME_POINTER_REGNUM'.
   24952 
   24953  -- Macro: ARG_POINTER_REGNUM
   24954      The register number of the arg pointer register, which is used to
   24955      access the function's argument list.  On some machines, this is
   24956      the same as the frame pointer register.  On some machines, the
   24957      hardware determines which register this is.  On other machines,
   24958      you can choose any register you wish for this purpose.  If this is
   24959      not the same register as the frame pointer register, then you must
   24960      mark it as a fixed register according to `FIXED_REGISTERS', or
   24961      arrange to be able to eliminate it (*note Elimination::).
   24962 
   24963  -- Macro: RETURN_ADDRESS_POINTER_REGNUM
   24964      The register number of the return address pointer register, which
   24965      is used to access the current function's return address from the
   24966      stack.  On some machines, the return address is not at a fixed
   24967      offset from the frame pointer or stack pointer or argument
   24968      pointer.  This register can be defined to point to the return
   24969      address on the stack, and then be converted by `ELIMINABLE_REGS'
   24970      into either the frame pointer or stack pointer.
   24971 
   24972      Do not define this macro unless there is no other way to get the
   24973      return address from the stack.
   24974 
   24975  -- Macro: STATIC_CHAIN_REGNUM
   24976  -- Macro: STATIC_CHAIN_INCOMING_REGNUM
   24977      Register numbers used for passing a function's static chain
   24978      pointer.  If register windows are used, the register number as
   24979      seen by the called function is `STATIC_CHAIN_INCOMING_REGNUM',
   24980      while the register number as seen by the calling function is
   24981      `STATIC_CHAIN_REGNUM'.  If these registers are the same,
   24982      `STATIC_CHAIN_INCOMING_REGNUM' need not be defined.
   24983 
   24984      The static chain register need not be a fixed register.
   24985 
   24986      If the static chain is passed in memory, these macros should not be
   24987      defined; instead, the next two macros should be defined.
   24988 
   24989  -- Macro: STATIC_CHAIN
   24990  -- Macro: STATIC_CHAIN_INCOMING
   24991      If the static chain is passed in memory, these macros provide rtx
   24992      giving `mem' expressions that denote where they are stored.
   24993      `STATIC_CHAIN' and `STATIC_CHAIN_INCOMING' give the locations as
   24994      seen by the calling and called functions, respectively.  Often the
   24995      former will be at an offset from the stack pointer and the latter
   24996      at an offset from the frame pointer.
   24997 
   24998      The variables `stack_pointer_rtx', `frame_pointer_rtx', and
   24999      `arg_pointer_rtx' will have been initialized prior to the use of
   25000      these macros and should be used to refer to those items.
   25001 
   25002      If the static chain is passed in a register, the two previous
   25003      macros should be defined instead.
   25004 
   25005  -- Macro: DWARF_FRAME_REGISTERS
   25006      This macro specifies the maximum number of hard registers that can
   25007      be saved in a call frame.  This is used to size data structures
   25008      used in DWARF2 exception handling.
   25009 
   25010      Prior to GCC 3.0, this macro was needed in order to establish a
   25011      stable exception handling ABI in the face of adding new hard
   25012      registers for ISA extensions.  In GCC 3.0 and later, the EH ABI is
   25013      insulated from changes in the number of hard registers.
   25014      Nevertheless, this macro can still be used to reduce the runtime
   25015      memory requirements of the exception handling routines, which can
   25016      be substantial if the ISA contains a lot of registers that are not
   25017      call-saved.
   25018 
   25019      If this macro is not defined, it defaults to
   25020      `FIRST_PSEUDO_REGISTER'.
   25021 
   25022  -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS
   25023      This macro is similar to `DWARF_FRAME_REGISTERS', but is provided
   25024      for backward compatibility in pre GCC 3.0 compiled code.
   25025 
   25026      If this macro is not defined, it defaults to
   25027      `DWARF_FRAME_REGISTERS'.
   25028 
   25029  -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO)
   25030      Define this macro if the target's representation for dwarf
   25031      registers is different than the internal representation for unwind
   25032      column.  Given a dwarf register, this macro should return the
   25033      internal unwind column number to use instead.
   25034 
   25035      See the PowerPC's SPE target for an example.
   25036 
   25037  -- Macro: DWARF_FRAME_REGNUM (REGNO)
   25038      Define this macro if the target's representation for dwarf
   25039      registers used in .eh_frame or .debug_frame is different from that
   25040      used in other debug info sections.  Given a GCC hard register
   25041      number, this macro should return the .eh_frame register number.
   25042      The default is `DBX_REGISTER_NUMBER (REGNO)'.
   25043 
   25044 
   25045  -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH)
   25046      Define this macro to map register numbers held in the call frame
   25047      info that GCC has collected using `DWARF_FRAME_REGNUM' to those
   25048      that should be output in .debug_frame (`FOR_EH' is zero) and
   25049      .eh_frame (`FOR_EH' is nonzero).  The default is to return `REGNO'.
   25050 
   25051 
   25052 
   25053 File: gccint.info,  Node: Elimination,  Next: Stack Arguments,  Prev: Frame Registers,  Up: Stack and Calling
   25054 
   25055 15.10.5 Eliminating Frame Pointer and Arg Pointer
   25056 -------------------------------------------------
   25057 
   25058 This is about eliminating the frame pointer and arg pointer.
   25059 
   25060  -- Macro: FRAME_POINTER_REQUIRED
   25061      A C expression which is nonzero if a function must have and use a
   25062      frame pointer.  This expression is evaluated  in the reload pass.
   25063      If its value is nonzero the function will have a frame pointer.
   25064 
   25065      The expression can in principle examine the current function and
   25066      decide according to the facts, but on most machines the constant 0
   25067      or the constant 1 suffices.  Use 0 when the machine allows code to
   25068      be generated with no frame pointer, and doing so saves some time
   25069      or space.  Use 1 when there is no possible advantage to avoiding a
   25070      frame pointer.
   25071 
   25072      In certain cases, the compiler does not know how to produce valid
   25073      code without a frame pointer.  The compiler recognizes those cases
   25074      and automatically gives the function a frame pointer regardless of
   25075      what `FRAME_POINTER_REQUIRED' says.  You don't need to worry about
   25076      them.
   25077 
   25078      In a function that does not require a frame pointer, the frame
   25079      pointer register can be allocated for ordinary usage, unless you
   25080      mark it as a fixed register.  See `FIXED_REGISTERS' for more
   25081      information.
   25082 
   25083  -- Macro: INITIAL_FRAME_POINTER_OFFSET (DEPTH-VAR)
   25084      A C statement to store in the variable DEPTH-VAR the difference
   25085      between the frame pointer and the stack pointer values immediately
   25086      after the function prologue.  The value would be computed from
   25087      information such as the result of `get_frame_size ()' and the
   25088      tables of registers `regs_ever_live' and `call_used_regs'.
   25089 
   25090      If `ELIMINABLE_REGS' is defined, this macro will be not be used and
   25091      need not be defined.  Otherwise, it must be defined even if
   25092      `FRAME_POINTER_REQUIRED' is defined to always be true; in that
   25093      case, you may set DEPTH-VAR to anything.
   25094 
   25095  -- Macro: ELIMINABLE_REGS
   25096      If defined, this macro specifies a table of register pairs used to
   25097      eliminate unneeded registers that point into the stack frame.  If
   25098      it is not defined, the only elimination attempted by the compiler
   25099      is to replace references to the frame pointer with references to
   25100      the stack pointer.
   25101 
   25102      The definition of this macro is a list of structure
   25103      initializations, each of which specifies an original and
   25104      replacement register.
   25105 
   25106      On some machines, the position of the argument pointer is not
   25107      known until the compilation is completed.  In such a case, a
   25108      separate hard register must be used for the argument pointer.
   25109      This register can be eliminated by replacing it with either the
   25110      frame pointer or the argument pointer, depending on whether or not
   25111      the frame pointer has been eliminated.
   25112 
   25113      In this case, you might specify:
   25114           #define ELIMINABLE_REGS  \
   25115           {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
   25116            {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
   25117            {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
   25118 
   25119      Note that the elimination of the argument pointer with the stack
   25120      pointer is specified first since that is the preferred elimination.
   25121 
   25122  -- Macro: CAN_ELIMINATE (FROM-REG, TO-REG)
   25123      A C expression that returns nonzero if the compiler is allowed to
   25124      try to replace register number FROM-REG with register number
   25125      TO-REG.  This macro need only be defined if `ELIMINABLE_REGS' is
   25126      defined, and will usually be the constant 1, since most of the
   25127      cases preventing register elimination are things that the compiler
   25128      already knows about.
   25129 
   25130  -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR)
   25131      This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'.  It
   25132      specifies the initial difference between the specified pair of
   25133      registers.  This macro must be defined if `ELIMINABLE_REGS' is
   25134      defined.
   25135 
   25136 
   25137 File: gccint.info,  Node: Stack Arguments,  Next: Register Arguments,  Prev: Elimination,  Up: Stack and Calling
   25138 
   25139 15.10.6 Passing Function Arguments on the Stack
   25140 -----------------------------------------------
   25141 
   25142 The macros in this section control how arguments are passed on the
   25143 stack.  See the following section for other macros that control passing
   25144 certain arguments in registers.
   25145 
   25146  -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (tree FNTYPE)
   25147      This target hook returns `true' if an argument declared in a
   25148      prototype as an integral type smaller than `int' should actually be
   25149      passed as an `int'.  In addition to avoiding errors in certain
   25150      cases of mismatch, it also makes for better code on certain
   25151      machines.  The default is to not promote prototypes.
   25152 
   25153  -- Macro: PUSH_ARGS
   25154      A C expression.  If nonzero, push insns will be used to pass
   25155      outgoing arguments.  If the target machine does not have a push
   25156      instruction, set it to zero.  That directs GCC to use an alternate
   25157      strategy: to allocate the entire argument block and then store the
   25158      arguments into it.  When `PUSH_ARGS' is nonzero, `PUSH_ROUNDING'
   25159      must be defined too.
   25160 
   25161  -- Macro: PUSH_ARGS_REVERSED
   25162      A C expression.  If nonzero, function arguments will be evaluated
   25163      from last to first, rather than from first to last.  If this macro
   25164      is not defined, it defaults to `PUSH_ARGS' on targets where the
   25165      stack and args grow in opposite directions, and 0 otherwise.
   25166 
   25167  -- Macro: PUSH_ROUNDING (NPUSHED)
   25168      A C expression that is the number of bytes actually pushed onto the
   25169      stack when an instruction attempts to push NPUSHED bytes.
   25170 
   25171      On some machines, the definition
   25172 
   25173           #define PUSH_ROUNDING(BYTES) (BYTES)
   25174 
   25175      will suffice.  But on other machines, instructions that appear to
   25176      push one byte actually push two bytes in an attempt to maintain
   25177      alignment.  Then the definition should be
   25178 
   25179           #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
   25180 
   25181  -- Macro: ACCUMULATE_OUTGOING_ARGS
   25182      A C expression.  If nonzero, the maximum amount of space required
   25183      for outgoing arguments will be computed and placed into the
   25184      variable `current_function_outgoing_args_size'.  No space will be
   25185      pushed onto the stack for each call; instead, the function
   25186      prologue should increase the stack frame size by this amount.
   25187 
   25188      Setting both `PUSH_ARGS' and `ACCUMULATE_OUTGOING_ARGS' is not
   25189      proper.
   25190 
   25191  -- Macro: REG_PARM_STACK_SPACE (FNDECL)
   25192      Define this macro if functions should assume that stack space has
   25193      been allocated for arguments even when their values are passed in
   25194      registers.
   25195 
   25196      The value of this macro is the size, in bytes, of the area
   25197      reserved for arguments passed in registers for the function
   25198      represented by FNDECL, which can be zero if GCC is calling a
   25199      library function.
   25200 
   25201      This space can be allocated by the caller, or be a part of the
   25202      machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' says
   25203      which.
   25204 
   25205  -- Macro: OUTGOING_REG_PARM_STACK_SPACE
   25206      Define this to a nonzero value if it is the responsibility of the
   25207      caller to allocate the area reserved for arguments passed in
   25208      registers.
   25209 
   25210      If `ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls
   25211      whether the space for these arguments counts in the value of
   25212      `current_function_outgoing_args_size'.
   25213 
   25214  -- Macro: STACK_PARMS_IN_REG_PARM_AREA
   25215      Define this macro if `REG_PARM_STACK_SPACE' is defined, but the
   25216      stack parameters don't skip the area specified by it.
   25217 
   25218      Normally, when a parameter is not passed in registers, it is
   25219      placed on the stack beyond the `REG_PARM_STACK_SPACE' area.
   25220      Defining this macro suppresses this behavior and causes the
   25221      parameter to be passed on the stack in its natural location.
   25222 
   25223  -- Macro: RETURN_POPS_ARGS (FUNDECL, FUNTYPE, STACK-SIZE)
   25224      A C expression that should indicate the number of bytes of its own
   25225      arguments that a function pops on returning, or 0 if the function
   25226      pops no arguments and the caller must therefore pop them all after
   25227      the function returns.
   25228 
   25229      FUNDECL is a C variable whose value is a tree node that describes
   25230      the function in question.  Normally it is a node of type
   25231      `FUNCTION_DECL' that describes the declaration of the function.
   25232      From this you can obtain the `DECL_ATTRIBUTES' of the function.
   25233 
   25234      FUNTYPE is a C variable whose value is a tree node that describes
   25235      the function in question.  Normally it is a node of type
   25236      `FUNCTION_TYPE' that describes the data type of the function.
   25237      From this it is possible to obtain the data types of the value and
   25238      arguments (if known).
   25239 
   25240      When a call to a library function is being considered, FUNDECL
   25241      will contain an identifier node for the library function.  Thus, if
   25242      you need to distinguish among various library functions, you can
   25243      do so by their names.  Note that "library function" in this
   25244      context means a function used to perform arithmetic, whose name is
   25245      known specially in the compiler and was not mentioned in the C
   25246      code being compiled.
   25247 
   25248      STACK-SIZE is the number of bytes of arguments passed on the
   25249      stack.  If a variable number of bytes is passed, it is zero, and
   25250      argument popping will always be the responsibility of the calling
   25251      function.
   25252 
   25253      On the VAX, all functions always pop their arguments, so the
   25254      definition of this macro is STACK-SIZE.  On the 68000, using the
   25255      standard calling convention, no functions pop their arguments, so
   25256      the value of the macro is always 0 in this case.  But an
   25257      alternative calling convention is available in which functions
   25258      that take a fixed number of arguments pop them but other functions
   25259      (such as `printf') pop nothing (the caller pops all).  When this
   25260      convention is in use, FUNTYPE is examined to determine whether a
   25261      function takes a fixed number of arguments.
   25262 
   25263  -- Macro: CALL_POPS_ARGS (CUM)
   25264      A C expression that should indicate the number of bytes a call
   25265      sequence pops off the stack.  It is added to the value of
   25266      `RETURN_POPS_ARGS' when compiling a function call.
   25267 
   25268      CUM is the variable in which all arguments to the called function
   25269      have been accumulated.
   25270 
   25271      On certain architectures, such as the SH5, a call trampoline is
   25272      used that pops certain registers off the stack, depending on the
   25273      arguments that have been passed to the function.  Since this is a
   25274      property of the call site, not of the called function,
   25275      `RETURN_POPS_ARGS' is not appropriate.
   25276 
   25277 
   25278 File: gccint.info,  Node: Register Arguments,  Next: Scalar Return,  Prev: Stack Arguments,  Up: Stack and Calling
   25279 
   25280 15.10.7 Passing Arguments in Registers
   25281 --------------------------------------
   25282 
   25283 This section describes the macros which let you control how various
   25284 types of arguments are passed in registers or how they are arranged in
   25285 the stack.
   25286 
   25287  -- Macro: FUNCTION_ARG (CUM, MODE, TYPE, NAMED)
   25288      A C expression that controls whether a function argument is passed
   25289      in a register, and which register.
   25290 
   25291      The arguments are CUM, which summarizes all the previous
   25292      arguments; MODE, the machine mode of the argument; TYPE, the data
   25293      type of the argument as a tree node or 0 if that is not known
   25294      (which happens for C support library functions); and NAMED, which
   25295      is 1 for an ordinary argument and 0 for nameless arguments that
   25296      correspond to `...' in the called function's prototype.  TYPE can
   25297      be an incomplete type if a syntax error has previously occurred.
   25298 
   25299      The value of the expression is usually either a `reg' RTX for the
   25300      hard register in which to pass the argument, or zero to pass the
   25301      argument on the stack.
   25302 
   25303      For machines like the VAX and 68000, where normally all arguments
   25304      are pushed, zero suffices as a definition.
   25305 
   25306      The value of the expression can also be a `parallel' RTX.  This is
   25307      used when an argument is passed in multiple locations.  The mode
   25308      of the `parallel' should be the mode of the entire argument.  The
   25309      `parallel' holds any number of `expr_list' pairs; each one
   25310      describes where part of the argument is passed.  In each
   25311      `expr_list' the first operand must be a `reg' RTX for the hard
   25312      register in which to pass this part of the argument, and the mode
   25313      of the register RTX indicates how large this part of the argument
   25314      is.  The second operand of the `expr_list' is a `const_int' which
   25315      gives the offset in bytes into the entire argument of where this
   25316      part starts.  As a special exception the first `expr_list' in the
   25317      `parallel' RTX may have a first operand of zero.  This indicates
   25318      that the entire argument is also stored on the stack.
   25319 
   25320      The last time this macro is called, it is called with `MODE ==
   25321      VOIDmode', and its result is passed to the `call' or `call_value'
   25322      pattern as operands 2 and 3 respectively.
   25323 
   25324      The usual way to make the ISO library `stdarg.h' work on a machine
   25325      where some arguments are usually passed in registers, is to cause
   25326      nameless arguments to be passed on the stack instead.  This is done
   25327      by making `FUNCTION_ARG' return 0 whenever NAMED is 0.
   25328 
   25329      You may use the hook `targetm.calls.must_pass_in_stack' in the
   25330      definition of this macro to determine if this argument is of a
   25331      type that must be passed in the stack.  If `REG_PARM_STACK_SPACE'
   25332      is not defined and `FUNCTION_ARG' returns nonzero for such an
   25333      argument, the compiler will abort.  If `REG_PARM_STACK_SPACE' is
   25334      defined, the argument will be computed in the stack and then
   25335      loaded into a register.
   25336 
   25337  -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (enum machine_mode
   25338           MODE, tree TYPE)
   25339      This target hook should return `true' if we should not pass TYPE
   25340      solely in registers.  The file `expr.h' defines a definition that
   25341      is usually appropriate, refer to `expr.h' for additional
   25342      documentation.
   25343 
   25344  -- Macro: FUNCTION_INCOMING_ARG (CUM, MODE, TYPE, NAMED)
   25345      Define this macro if the target machine has "register windows", so
   25346      that the register in which a function sees an arguments is not
   25347      necessarily the same as the one in which the caller passed the
   25348      argument.
   25349 
   25350      For such machines, `FUNCTION_ARG' computes the register in which
   25351      the caller passes the value, and `FUNCTION_INCOMING_ARG' should be
   25352      defined in a similar fashion to tell the function being called
   25353      where the arguments will arrive.
   25354 
   25355      If `FUNCTION_INCOMING_ARG' is not defined, `FUNCTION_ARG' serves
   25356      both purposes.
   25357 
   25358  -- Target Hook: int TARGET_ARG_PARTIAL_BYTES (CUMULATIVE_ARGS *CUM,
   25359           enum machine_mode MODE, tree TYPE, bool NAMED)
   25360      This target hook returns the number of bytes at the beginning of an
   25361      argument that must be put in registers.  The value must be zero for
   25362      arguments that are passed entirely in registers or that are
   25363      entirely pushed on the stack.
   25364 
   25365      On some machines, certain arguments must be passed partially in
   25366      registers and partially in memory.  On these machines, typically
   25367      the first few words of arguments are passed in registers, and the
   25368      rest on the stack.  If a multi-word argument (a `double' or a
   25369      structure) crosses that boundary, its first few words must be
   25370      passed in registers and the rest must be pushed.  This macro tells
   25371      the compiler when this occurs, and how many bytes should go in
   25372      registers.
   25373 
   25374      `FUNCTION_ARG' for these arguments should return the first
   25375      register to be used by the caller for this argument; likewise
   25376      `FUNCTION_INCOMING_ARG', for the called function.
   25377 
   25378  -- Target Hook: bool TARGET_PASS_BY_REFERENCE (CUMULATIVE_ARGS *CUM,
   25379           enum machine_mode MODE, tree TYPE, bool NAMED)
   25380      This target hook should return `true' if an argument at the
   25381      position indicated by CUM should be passed by reference.  This
   25382      predicate is queried after target independent reasons for being
   25383      passed by reference, such as `TREE_ADDRESSABLE (type)'.
   25384 
   25385      If the hook returns true, a copy of that argument is made in
   25386      memory and a pointer to the argument is passed instead of the
   25387      argument itself.  The pointer is passed in whatever way is
   25388      appropriate for passing a pointer to that type.
   25389 
   25390  -- Target Hook: bool TARGET_CALLEE_COPIES (CUMULATIVE_ARGS *CUM, enum
   25391           machine_mode MODE, tree TYPE, bool NAMED)
   25392      The function argument described by the parameters to this hook is
   25393      known to be passed by reference.  The hook should return true if
   25394      the function argument should be copied by the callee instead of
   25395      copied by the caller.
   25396 
   25397      For any argument for which the hook returns true, if it can be
   25398      determined that the argument is not modified, then a copy need not
   25399      be generated.
   25400 
   25401      The default version of this hook always returns false.
   25402 
   25403  -- Macro: CUMULATIVE_ARGS
   25404      A C type for declaring a variable that is used as the first
   25405      argument of `FUNCTION_ARG' and other related values.  For some
   25406      target machines, the type `int' suffices and can hold the number
   25407      of bytes of argument so far.
   25408 
   25409      There is no need to record in `CUMULATIVE_ARGS' anything about the
   25410      arguments that have been passed on the stack.  The compiler has
   25411      other variables to keep track of that.  For target machines on
   25412      which all arguments are passed on the stack, there is no need to
   25413      store anything in `CUMULATIVE_ARGS'; however, the data structure
   25414      must exist and should not be empty, so use `int'.
   25415 
   25416  -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL,
   25417           N_NAMED_ARGS)
   25418      A C statement (sans semicolon) for initializing the variable CUM
   25419      for the state at the beginning of the argument list.  The variable
   25420      has type `CUMULATIVE_ARGS'.  The value of FNTYPE is the tree node
   25421      for the data type of the function which will receive the args, or
   25422      0 if the args are to a compiler support library function.  For
   25423      direct calls that are not libcalls, FNDECL contain the declaration
   25424      node of the function.  FNDECL is also set when
   25425      `INIT_CUMULATIVE_ARGS' is used to find arguments for the function
   25426      being compiled.  N_NAMED_ARGS is set to the number of named
   25427      arguments, including a structure return address if it is passed as
   25428      a parameter, when making a call.  When processing incoming
   25429      arguments, N_NAMED_ARGS is set to -1.
   25430 
   25431      When processing a call to a compiler support library function,
   25432      LIBNAME identifies which one.  It is a `symbol_ref' rtx which
   25433      contains the name of the function, as a string.  LIBNAME is 0 when
   25434      an ordinary C function call is being processed.  Thus, each time
   25435      this macro is called, either LIBNAME or FNTYPE is nonzero, but
   25436      never both of them at once.
   25437 
   25438  -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME)
   25439      Like `INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls,
   25440      it gets a `MODE' argument instead of FNTYPE, that would be `NULL'.
   25441      INDIRECT would always be zero, too.  If this macro is not
   25442      defined, `INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is
   25443      used instead.
   25444 
   25445  -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME)
   25446      Like `INIT_CUMULATIVE_ARGS' but overrides it for the purposes of
   25447      finding the arguments for the function being compiled.  If this
   25448      macro is undefined, `INIT_CUMULATIVE_ARGS' is used instead.
   25449 
   25450      The value passed for LIBNAME is always 0, since library routines
   25451      with special calling conventions are never compiled with GCC.  The
   25452      argument LIBNAME exists for symmetry with `INIT_CUMULATIVE_ARGS'.
   25453 
   25454  -- Macro: FUNCTION_ARG_ADVANCE (CUM, MODE, TYPE, NAMED)
   25455      A C statement (sans semicolon) to update the summarizer variable
   25456      CUM to advance past an argument in the argument list.  The values
   25457      MODE, TYPE and NAMED describe that argument.  Once this is done,
   25458      the variable CUM is suitable for analyzing the _following_
   25459      argument with `FUNCTION_ARG', etc.
   25460 
   25461      This macro need not do anything if the argument in question was
   25462      passed on the stack.  The compiler knows how to track the amount
   25463      of stack space used for arguments without any special help.
   25464 
   25465  -- Macro: FUNCTION_ARG_PADDING (MODE, TYPE)
   25466      If defined, a C expression which determines whether, and in which
   25467      direction, to pad out an argument with extra space.  The value
   25468      should be of type `enum direction': either `upward' to pad above
   25469      the argument, `downward' to pad below, or `none' to inhibit
   25470      padding.
   25471 
   25472      The _amount_ of padding is always just enough to reach the next
   25473      multiple of `FUNCTION_ARG_BOUNDARY'; this macro does not control
   25474      it.
   25475 
   25476      This macro has a default definition which is right for most
   25477      systems.  For little-endian machines, the default is to pad
   25478      upward.  For big-endian machines, the default is to pad downward
   25479      for an argument of constant size shorter than an `int', and upward
   25480      otherwise.
   25481 
   25482  -- Macro: PAD_VARARGS_DOWN
   25483      If defined, a C expression which determines whether the default
   25484      implementation of va_arg will attempt to pad down before reading
   25485      the next argument, if that argument is smaller than its aligned
   25486      space as controlled by `PARM_BOUNDARY'.  If this macro is not
   25487      defined, all such arguments are padded down if `BYTES_BIG_ENDIAN'
   25488      is true.
   25489 
   25490  -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST)
   25491      Specify padding for the last element of a block move between
   25492      registers and memory.  FIRST is nonzero if this is the only
   25493      element.  Defining this macro allows better control of register
   25494      function parameters on big-endian machines, without using
   25495      `PARALLEL' rtl.  In particular, `MUST_PASS_IN_STACK' need not test
   25496      padding and mode of types in registers, as there is no longer a
   25497      "wrong" part of a register;  For example, a three byte aggregate
   25498      may be passed in the high part of a register if so required.
   25499 
   25500  -- Macro: FUNCTION_ARG_BOUNDARY (MODE, TYPE)
   25501      If defined, a C expression that gives the alignment boundary, in
   25502      bits, of an argument with the specified mode and type.  If it is
   25503      not defined, `PARM_BOUNDARY' is used for all arguments.
   25504 
   25505  -- Macro: FUNCTION_ARG_REGNO_P (REGNO)
   25506      A C expression that is nonzero if REGNO is the number of a hard
   25507      register in which function arguments are sometimes passed.  This
   25508      does _not_ include implicit arguments such as the static chain and
   25509      the structure-value address.  On many machines, no registers can be
   25510      used for this purpose since all function arguments are pushed on
   25511      the stack.
   25512 
   25513  -- Target Hook: bool TARGET_SPLIT_COMPLEX_ARG (tree TYPE)
   25514      This hook should return true if parameter of type TYPE are passed
   25515      as two scalar parameters.  By default, GCC will attempt to pack
   25516      complex arguments into the target's word size.  Some ABIs require
   25517      complex arguments to be split and treated as their individual
   25518      components.  For example, on AIX64, complex floats should be
   25519      passed in a pair of floating point registers, even though a
   25520      complex float would fit in one 64-bit floating point register.
   25521 
   25522      The default value of this hook is `NULL', which is treated as
   25523      always false.
   25524 
   25525  -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void)
   25526      This hook returns a type node for `va_list' for the target.  The
   25527      default version of the hook returns `void*'.
   25528 
   25529  -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree
   25530           TYPE, tree *PRE_P, tree *POST_P)
   25531      This hook performs target-specific gimplification of
   25532      `VA_ARG_EXPR'.  The first two parameters correspond to the
   25533      arguments to `va_arg'; the latter two are as in
   25534      `gimplify.c:gimplify_expr'.
   25535 
   25536  -- Target Hook: bool TARGET_VALID_POINTER_MODE (enum machine_mode MODE)
   25537      Define this to return nonzero if the port can handle pointers with
   25538      machine mode MODE.  The default version of this hook returns true
   25539      for both `ptr_mode' and `Pmode'.
   25540 
   25541  -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (enum machine_mode
   25542           MODE)
   25543      Define this to return nonzero if the port is prepared to handle
   25544      insns involving scalar mode MODE.  For a scalar mode to be
   25545      considered supported, all the basic arithmetic and comparisons
   25546      must work.
   25547 
   25548      The default version of this hook returns true for any mode
   25549      required to handle the basic C types (as defined by the port).
   25550      Included here are the double-word arithmetic supported by the code
   25551      in `optabs.c'.
   25552 
   25553  -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (enum machine_mode
   25554           MODE)
   25555      Define this to return nonzero if the port is prepared to handle
   25556      insns involving vector mode MODE.  At the very least, it must have
   25557      move patterns for this mode.
   25558 
   25559 
   25560 File: gccint.info,  Node: Scalar Return,  Next: Aggregate Return,  Prev: Register Arguments,  Up: Stack and Calling
   25561 
   25562 15.10.8 How Scalar Function Values Are Returned
   25563 -----------------------------------------------
   25564 
   25565 This section discusses the macros that control returning scalars as
   25566 values--values that can fit in registers.
   25567 
   25568  -- Target Hook: rtx TARGET_FUNCTION_VALUE (tree RET_TYPE, tree
   25569           FN_DECL_OR_TYPE, bool OUTGOING)
   25570      Define this to return an RTX representing the place where a
   25571      function returns or receives a value of data type RET_TYPE, a tree
   25572      node node representing a data type.  FN_DECL_OR_TYPE is a tree node
   25573      representing `FUNCTION_DECL' or `FUNCTION_TYPE' of a function
   25574      being called.  If OUTGOING is false, the hook should compute the
   25575      register in which the caller will see the return value.
   25576      Otherwise, the hook should return an RTX representing the place
   25577      where a function returns a value.
   25578 
   25579      On many machines, only `TYPE_MODE (RET_TYPE)' is relevant.
   25580      (Actually, on most machines, scalar values are returned in the same
   25581      place regardless of mode.)  The value of the expression is usually
   25582      a `reg' RTX for the hard register where the return value is stored.
   25583      The value can also be a `parallel' RTX, if the return value is in
   25584      multiple places.  See `FUNCTION_ARG' for an explanation of the
   25585      `parallel' form.   Note that the callee will populate every
   25586      location specified in the `parallel', but if the first element of
   25587      the `parallel' contains the whole return value, callers will use
   25588      that element as the canonical location and ignore the others.  The
   25589      m68k port uses this type of `parallel' to return pointers in both
   25590      `%a0' (the canonical location) and `%d0'.
   25591 
   25592      If `TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply
   25593      the same promotion rules specified in `PROMOTE_MODE' if VALTYPE is
   25594      a scalar type.
   25595 
   25596      If the precise function being called is known, FUNC is a tree node
   25597      (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer.  This
   25598      makes it possible to use a different value-returning convention
   25599      for specific functions when all their calls are known.
   25600 
   25601      Some target machines have "register windows" so that the register
   25602      in which a function returns its value is not the same as the one
   25603      in which the caller sees the value.  For such machines, you should
   25604      return different RTX depending on OUTGOING.
   25605 
   25606      `TARGET_FUNCTION_VALUE' is not used for return values with
   25607      aggregate data types, because these are returned in another way.
   25608      See `TARGET_STRUCT_VALUE_RTX' and related macros, below.
   25609 
   25610  -- Macro: FUNCTION_VALUE (VALTYPE, FUNC)
   25611      This macro has been deprecated.  Use `TARGET_FUNCTION_VALUE' for a
   25612      new target instead.
   25613 
   25614  -- Macro: FUNCTION_OUTGOING_VALUE (VALTYPE, FUNC)
   25615      This macro has been deprecated.  Use `TARGET_FUNCTION_VALUE' for a
   25616      new target instead.
   25617 
   25618  -- Macro: LIBCALL_VALUE (MODE)
   25619      A C expression to create an RTX representing the place where a
   25620      library function returns a value of mode MODE.  If the precise
   25621      function being called is known, FUNC is a tree node
   25622      (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer.  This
   25623      makes it possible to use a different value-returning convention
   25624      for specific functions when all their calls are known.
   25625 
   25626      Note that "library function" in this context means a compiler
   25627      support routine, used to perform arithmetic, whose name is known
   25628      specially by the compiler and was not mentioned in the C code being
   25629      compiled.
   25630 
   25631      The definition of `LIBRARY_VALUE' need not be concerned aggregate
   25632      data types, because none of the library functions returns such
   25633      types.
   25634 
   25635  -- Macro: FUNCTION_VALUE_REGNO_P (REGNO)
   25636      A C expression that is nonzero if REGNO is the number of a hard
   25637      register in which the values of called function may come back.
   25638 
   25639      A register whose use for returning values is limited to serving as
   25640      the second of a pair (for a value of type `double', say) need not
   25641      be recognized by this macro.  So for most machines, this definition
   25642      suffices:
   25643 
   25644           #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
   25645 
   25646      If the machine has register windows, so that the caller and the
   25647      called function use different registers for the return value, this
   25648      macro should recognize only the caller's register numbers.
   25649 
   25650  -- Macro: APPLY_RESULT_SIZE
   25651      Define this macro if `untyped_call' and `untyped_return' need more
   25652      space than is implied by `FUNCTION_VALUE_REGNO_P' for saving and
   25653      restoring an arbitrary return value.
   25654 
   25655  -- Target Hook: bool TARGET_RETURN_IN_MSB (tree TYPE)
   25656      This hook should return true if values of type TYPE are returned
   25657      at the most significant end of a register (in other words, if they
   25658      are padded at the least significant end).  You can assume that TYPE
   25659      is returned in a register; the caller is required to check this.
   25660 
   25661      Note that the register provided by `TARGET_FUNCTION_VALUE' must be
   25662      able to hold the complete return value.  For example, if a 1-, 2-
   25663      or 3-byte structure is returned at the most significant end of a
   25664      4-byte register, `TARGET_FUNCTION_VALUE' should provide an
   25665      `SImode' rtx.
   25666 
   25667 
   25668 File: gccint.info,  Node: Aggregate Return,  Next: Caller Saves,  Prev: Scalar Return,  Up: Stack and Calling
   25669 
   25670 15.10.9 How Large Values Are Returned
   25671 -------------------------------------
   25672 
   25673 When a function value's mode is `BLKmode' (and in some other cases),
   25674 the value is not returned according to `TARGET_FUNCTION_VALUE' (*note
   25675 Scalar Return::).  Instead, the caller passes the address of a block of
   25676 memory in which the value should be stored.  This address is called the
   25677 "structure value address".
   25678 
   25679  This section describes how to control returning structure values in
   25680 memory.
   25681 
   25682  -- Target Hook: bool TARGET_RETURN_IN_MEMORY (tree TYPE, tree FNTYPE)
   25683      This target hook should return a nonzero value to say to return the
   25684      function value in memory, just as large structures are always
   25685      returned.  Here TYPE will be the data type of the value, and FNTYPE
   25686      will be the type of the function doing the returning, or `NULL' for
   25687      libcalls.
   25688 
   25689      Note that values of mode `BLKmode' must be explicitly handled by
   25690      this function.  Also, the option `-fpcc-struct-return' takes
   25691      effect regardless of this macro.  On most systems, it is possible
   25692      to leave the hook undefined; this causes a default definition to
   25693      be used, whose value is the constant 1 for `BLKmode' values, and 0
   25694      otherwise.
   25695 
   25696      Do not use this hook to indicate that structures and unions should
   25697      always be returned in memory.  You should instead use
   25698      `DEFAULT_PCC_STRUCT_RETURN' to indicate this.
   25699 
   25700  -- Macro: DEFAULT_PCC_STRUCT_RETURN
   25701      Define this macro to be 1 if all structure and union return values
   25702      must be in memory.  Since this results in slower code, this should
   25703      be defined only if needed for compatibility with other compilers
   25704      or with an ABI.  If you define this macro to be 0, then the
   25705      conventions used for structure and union return values are decided
   25706      by the `TARGET_RETURN_IN_MEMORY' target hook.
   25707 
   25708      If not defined, this defaults to the value 1.
   25709 
   25710  -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING)
   25711      This target hook should return the location of the structure value
   25712      address (normally a `mem' or `reg'), or 0 if the address is passed
   25713      as an "invisible" first argument.  Note that FNDECL may be `NULL',
   25714      for libcalls.  You do not need to define this target hook if the
   25715      address is always passed as an "invisible" first argument.
   25716 
   25717      On some architectures the place where the structure value address
   25718      is found by the called function is not the same place that the
   25719      caller put it.  This can be due to register windows, or it could
   25720      be because the function prologue moves it to a different place.
   25721      INCOMING is `1' or `2' when the location is needed in the context
   25722      of the called function, and `0' in the context of the caller.
   25723 
   25724      If INCOMING is nonzero and the address is to be found on the
   25725      stack, return a `mem' which refers to the frame pointer. If
   25726      INCOMING is `2', the result is being used to fetch the structure
   25727      value address at the beginning of a function.  If you need to emit
   25728      adjusting code, you should do it at this point.
   25729 
   25730  -- Macro: PCC_STATIC_STRUCT_RETURN
   25731      Define this macro if the usual system convention on the target
   25732      machine for returning structures and unions is for the called
   25733      function to return the address of a static variable containing the
   25734      value.
   25735 
   25736      Do not define this if the usual system convention is for the
   25737      caller to pass an address to the subroutine.
   25738 
   25739      This macro has effect in `-fpcc-struct-return' mode, but it does
   25740      nothing when you use `-freg-struct-return' mode.
   25741 
   25742 
   25743 File: gccint.info,  Node: Caller Saves,  Next: Function Entry,  Prev: Aggregate Return,  Up: Stack and Calling
   25744 
   25745 15.10.10 Caller-Saves Register Allocation
   25746 -----------------------------------------
   25747 
   25748 If you enable it, GCC can save registers around function calls.  This
   25749 makes it possible to use call-clobbered registers to hold variables that
   25750 must live across calls.
   25751 
   25752  -- Macro: CALLER_SAVE_PROFITABLE (REFS, CALLS)
   25753      A C expression to determine whether it is worthwhile to consider
   25754      placing a pseudo-register in a call-clobbered hard register and
   25755      saving and restoring it around each function call.  The expression
   25756      should be 1 when this is worth doing, and 0 otherwise.
   25757 
   25758      If you don't define this macro, a default is used which is good on
   25759      most machines: `4 * CALLS < REFS'.
   25760 
   25761  -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS)
   25762      A C expression specifying which mode is required for saving NREGS
   25763      of a pseudo-register in call-clobbered hard register REGNO.  If
   25764      REGNO is unsuitable for caller save, `VOIDmode' should be
   25765      returned.  For most machines this macro need not be defined since
   25766      GCC will select the smallest suitable mode.
   25767 
   25768 
   25769 File: gccint.info,  Node: Function Entry,  Next: Profiling,  Prev: Caller Saves,  Up: Stack and Calling
   25770 
   25771 15.10.11 Function Entry and Exit
   25772 --------------------------------
   25773 
   25774 This section describes the macros that output function entry
   25775 ("prologue") and exit ("epilogue") code.
   25776 
   25777  -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE,
   25778           HOST_WIDE_INT SIZE)
   25779      If defined, a function that outputs the assembler code for entry
   25780      to a function.  The prologue is responsible for setting up the
   25781      stack frame, initializing the frame pointer register, saving
   25782      registers that must be saved, and allocating SIZE additional bytes
   25783      of storage for the local variables.  SIZE is an integer.  FILE is
   25784      a stdio stream to which the assembler code should be output.
   25785 
   25786      The label for the beginning of the function need not be output by
   25787      this macro.  That has already been done when the macro is run.
   25788 
   25789      To determine which registers to save, the macro can refer to the
   25790      array `regs_ever_live': element R is nonzero if hard register R is
   25791      used anywhere within the function.  This implies the function
   25792      prologue should save register R, provided it is not one of the
   25793      call-used registers.  (`TARGET_ASM_FUNCTION_EPILOGUE' must
   25794      likewise use `regs_ever_live'.)
   25795 
   25796      On machines that have "register windows", the function entry code
   25797      does not save on the stack the registers that are in the windows,
   25798      even if they are supposed to be preserved by function calls;
   25799      instead it takes appropriate steps to "push" the register stack,
   25800      if any non-call-used registers are used in the function.
   25801 
   25802      On machines where functions may or may not have frame-pointers, the
   25803      function entry code must vary accordingly; it must set up the frame
   25804      pointer if one is wanted, and not otherwise.  To determine whether
   25805      a frame pointer is in wanted, the macro can refer to the variable
   25806      `frame_pointer_needed'.  The variable's value will be 1 at run
   25807      time in a function that needs a frame pointer.  *Note
   25808      Elimination::.
   25809 
   25810      The function entry code is responsible for allocating any stack
   25811      space required for the function.  This stack space consists of the
   25812      regions listed below.  In most cases, these regions are allocated
   25813      in the order listed, with the last listed region closest to the
   25814      top of the stack (the lowest address if `STACK_GROWS_DOWNWARD' is
   25815      defined, and the highest address if it is not defined).  You can
   25816      use a different order for a machine if doing so is more convenient
   25817      or required for compatibility reasons.  Except in cases where
   25818      required by standard or by a debugger, there is no reason why the
   25819      stack layout used by GCC need agree with that used by other
   25820      compilers for a machine.
   25821 
   25822  -- Target Hook: void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *FILE)
   25823      If defined, a function that outputs assembler code at the end of a
   25824      prologue.  This should be used when the function prologue is being
   25825      emitted as RTL, and you have some extra assembler that needs to be
   25826      emitted.  *Note prologue instruction pattern::.
   25827 
   25828  -- Target Hook: void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *FILE)
   25829      If defined, a function that outputs assembler code at the start of
   25830      an epilogue.  This should be used when the function epilogue is
   25831      being emitted as RTL, and you have some extra assembler that needs
   25832      to be emitted.  *Note epilogue instruction pattern::.
   25833 
   25834  -- Target Hook: void TARGET_ASM_FUNCTION_EPILOGUE (FILE *FILE,
   25835           HOST_WIDE_INT SIZE)
   25836      If defined, a function that outputs the assembler code for exit
   25837      from a function.  The epilogue is responsible for restoring the
   25838      saved registers and stack pointer to their values when the
   25839      function was called, and returning control to the caller.  This
   25840      macro takes the same arguments as the macro
   25841      `TARGET_ASM_FUNCTION_PROLOGUE', and the registers to restore are
   25842      determined from `regs_ever_live' and `CALL_USED_REGISTERS' in the
   25843      same way.
   25844 
   25845      On some machines, there is a single instruction that does all the
   25846      work of returning from the function.  On these machines, give that
   25847      instruction the name `return' and do not define the macro
   25848      `TARGET_ASM_FUNCTION_EPILOGUE' at all.
   25849 
   25850      Do not define a pattern named `return' if you want the
   25851      `TARGET_ASM_FUNCTION_EPILOGUE' to be used.  If you want the target
   25852      switches to control whether return instructions or epilogues are
   25853      used, define a `return' pattern with a validity condition that
   25854      tests the target switches appropriately.  If the `return'
   25855      pattern's validity condition is false, epilogues will be used.
   25856 
   25857      On machines where functions may or may not have frame-pointers, the
   25858      function exit code must vary accordingly.  Sometimes the code for
   25859      these two cases is completely different.  To determine whether a
   25860      frame pointer is wanted, the macro can refer to the variable
   25861      `frame_pointer_needed'.  The variable's value will be 1 when
   25862      compiling a function that needs a frame pointer.
   25863 
   25864      Normally, `TARGET_ASM_FUNCTION_PROLOGUE' and
   25865      `TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially.
   25866      The C variable `current_function_is_leaf' is nonzero for such a
   25867      function.  *Note Leaf Functions::.
   25868 
   25869      On some machines, some functions pop their arguments on exit while
   25870      others leave that for the caller to do.  For example, the 68020
   25871      when given `-mrtd' pops arguments in functions that take a fixed
   25872      number of arguments.
   25873 
   25874      Your definition of the macro `RETURN_POPS_ARGS' decides which
   25875      functions pop their own arguments.  `TARGET_ASM_FUNCTION_EPILOGUE'
   25876      needs to know what was decided.  The variable that is called
   25877      `current_function_pops_args' is the number of bytes of its
   25878      arguments that a function should pop.  *Note Scalar Return::.
   25879 
   25880    * A region of `current_function_pretend_args_size' bytes of
   25881      uninitialized space just underneath the first argument arriving on
   25882      the stack.  (This may not be at the very start of the allocated
   25883      stack region if the calling sequence has pushed anything else
   25884      since pushing the stack arguments.  But usually, on such machines,
   25885      nothing else has been pushed yet, because the function prologue
   25886      itself does all the pushing.)  This region is used on machines
   25887      where an argument may be passed partly in registers and partly in
   25888      memory, and, in some cases to support the features in `<stdarg.h>'.
   25889 
   25890    * An area of memory used to save certain registers used by the
   25891      function.  The size of this area, which may also include space for
   25892      such things as the return address and pointers to previous stack
   25893      frames, is machine-specific and usually depends on which registers
   25894      have been used in the function.  Machines with register windows
   25895      often do not require a save area.
   25896 
   25897    * A region of at least SIZE bytes, possibly rounded up to an
   25898      allocation boundary, to contain the local variables of the
   25899      function.  On some machines, this region and the save area may
   25900      occur in the opposite order, with the save area closer to the top
   25901      of the stack.
   25902 
   25903    * Optionally, when `ACCUMULATE_OUTGOING_ARGS' is defined, a region of
   25904      `current_function_outgoing_args_size' bytes to be used for outgoing
   25905      argument lists of the function.  *Note Stack Arguments::.
   25906 
   25907  -- Macro: EXIT_IGNORE_STACK
   25908      Define this macro as a C expression that is nonzero if the return
   25909      instruction or the function epilogue ignores the value of the stack
   25910      pointer; in other words, if it is safe to delete an instruction to
   25911      adjust the stack pointer before a return from the function.  The
   25912      default is 0.
   25913 
   25914      Note that this macro's value is relevant only for functions for
   25915      which frame pointers are maintained.  It is never safe to delete a
   25916      final stack adjustment in a function that has no frame pointer,
   25917      and the compiler knows this regardless of `EXIT_IGNORE_STACK'.
   25918 
   25919  -- Macro: EPILOGUE_USES (REGNO)
   25920      Define this macro as a C expression that is nonzero for registers
   25921      that are used by the epilogue or the `return' pattern.  The stack
   25922      and frame pointer registers are already assumed to be used as
   25923      needed.
   25924 
   25925  -- Macro: EH_USES (REGNO)
   25926      Define this macro as a C expression that is nonzero for registers
   25927      that are used by the exception handling mechanism, and so should
   25928      be considered live on entry to an exception edge.
   25929 
   25930  -- Macro: DELAY_SLOTS_FOR_EPILOGUE
   25931      Define this macro if the function epilogue contains delay slots to
   25932      which instructions from the rest of the function can be "moved".
   25933      The definition should be a C expression whose value is an integer
   25934      representing the number of delay slots there.
   25935 
   25936  -- Macro: ELIGIBLE_FOR_EPILOGUE_DELAY (INSN, N)
   25937      A C expression that returns 1 if INSN can be placed in delay slot
   25938      number N of the epilogue.
   25939 
   25940      The argument N is an integer which identifies the delay slot now
   25941      being considered (since different slots may have different rules of
   25942      eligibility).  It is never negative and is always less than the
   25943      number of epilogue delay slots (what `DELAY_SLOTS_FOR_EPILOGUE'
   25944      returns).  If you reject a particular insn for a given delay slot,
   25945      in principle, it may be reconsidered for a subsequent delay slot.
   25946      Also, other insns may (at least in principle) be considered for
   25947      the so far unfilled delay slot.
   25948 
   25949      The insns accepted to fill the epilogue delay slots are put in an
   25950      RTL list made with `insn_list' objects, stored in the variable
   25951      `current_function_epilogue_delay_list'.  The insn for the first
   25952      delay slot comes first in the list.  Your definition of the macro
   25953      `TARGET_ASM_FUNCTION_EPILOGUE' should fill the delay slots by
   25954      outputting the insns in this list, usually by calling
   25955      `final_scan_insn'.
   25956 
   25957      You need not define this macro if you did not define
   25958      `DELAY_SLOTS_FOR_EPILOGUE'.
   25959 
   25960  -- Target Hook: void TARGET_ASM_OUTPUT_MI_THUNK (FILE *FILE, tree
   25961           THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT
   25962           VCALL_OFFSET, tree FUNCTION)
   25963      A function that outputs the assembler code for a thunk function,
   25964      used to implement C++ virtual function calls with multiple
   25965      inheritance.  The thunk acts as a wrapper around a virtual
   25966      function, adjusting the implicit object parameter before handing
   25967      control off to the real function.
   25968 
   25969      First, emit code to add the integer DELTA to the location that
   25970      contains the incoming first argument.  Assume that this argument
   25971      contains a pointer, and is the one used to pass the `this' pointer
   25972      in C++.  This is the incoming argument _before_ the function
   25973      prologue, e.g. `%o0' on a sparc.  The addition must preserve the
   25974      values of all other incoming arguments.
   25975 
   25976      Then, if VCALL_OFFSET is nonzero, an additional adjustment should
   25977      be made after adding `delta'.  In particular, if P is the adjusted
   25978      pointer, the following adjustment should be made:
   25979 
   25980           p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]
   25981 
   25982      After the additions, emit code to jump to FUNCTION, which is a
   25983      `FUNCTION_DECL'.  This is a direct pure jump, not a call, and does
   25984      not touch the return address.  Hence returning from FUNCTION will
   25985      return to whoever called the current `thunk'.
   25986 
   25987      The effect must be as if FUNCTION had been called directly with
   25988      the adjusted first argument.  This macro is responsible for
   25989      emitting all of the code for a thunk function;
   25990      `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE'
   25991      are not invoked.
   25992 
   25993      The THUNK_FNDECL is redundant.  (DELTA and FUNCTION have already
   25994      been extracted from it.)  It might possibly be useful on some
   25995      targets, but probably not.
   25996 
   25997      If you do not define this macro, the target-independent code in
   25998      the C++ front end will generate a less efficient heavyweight thunk
   25999      that calls FUNCTION instead of jumping to it.  The generic
   26000      approach does not support varargs.
   26001 
   26002  -- Target Hook: bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (tree
   26003           THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT
   26004           VCALL_OFFSET, tree FUNCTION)
   26005      A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would
   26006      be able to output the assembler code for the thunk function
   26007      specified by the arguments it is passed, and false otherwise.  In
   26008      the latter case, the generic approach will be used by the C++
   26009      front end, with the limitations previously exposed.
   26010 
   26011 
   26012 File: gccint.info,  Node: Profiling,  Next: Tail Calls,  Prev: Function Entry,  Up: Stack and Calling
   26013 
   26014 15.10.12 Generating Code for Profiling
   26015 --------------------------------------
   26016 
   26017 These macros will help you generate code for profiling.
   26018 
   26019  -- Macro: FUNCTION_PROFILER (FILE, LABELNO)
   26020      A C statement or compound statement to output to FILE some
   26021      assembler code to call the profiling subroutine `mcount'.
   26022 
   26023      The details of how `mcount' expects to be called are determined by
   26024      your operating system environment, not by GCC.  To figure them out,
   26025      compile a small program for profiling using the system's installed
   26026      C compiler and look at the assembler code that results.
   26027 
   26028      Older implementations of `mcount' expect the address of a counter
   26029      variable to be loaded into some register.  The name of this
   26030      variable is `LP' followed by the number LABELNO, so you would
   26031      generate the name using `LP%d' in a `fprintf'.
   26032 
   26033  -- Macro: PROFILE_HOOK
   26034      A C statement or compound statement to output to FILE some assembly
   26035      code to call the profiling subroutine `mcount' even the target does
   26036      not support profiling.
   26037 
   26038  -- Macro: NO_PROFILE_COUNTERS
   26039      Define this macro to be an expression with a nonzero value if the
   26040      `mcount' subroutine on your system does not need a counter variable
   26041      allocated for each function.  This is true for almost all modern
   26042      implementations.  If you define this macro, you must not use the
   26043      LABELNO argument to `FUNCTION_PROFILER'.
   26044 
   26045  -- Macro: PROFILE_BEFORE_PROLOGUE
   26046      Define this macro if the code for function profiling should come
   26047      before the function prologue.  Normally, the profiling code comes
   26048      after.
   26049 
   26050 
   26051 File: gccint.info,  Node: Tail Calls,  Next: Stack Smashing Protection,  Prev: Profiling,  Up: Stack and Calling
   26052 
   26053 15.10.13 Permitting tail calls
   26054 ------------------------------
   26055 
   26056  -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree
   26057           EXP)
   26058      True if it is ok to do sibling call optimization for the specified
   26059      call expression EXP.  DECL will be the called function, or `NULL'
   26060      if this is an indirect call.
   26061 
   26062      It is not uncommon for limitations of calling conventions to
   26063      prevent tail calls to functions outside the current unit of
   26064      translation, or during PIC compilation.  The hook is used to
   26065      enforce these restrictions, as the `sibcall' md pattern can not
   26066      fail, or fall over to a "normal" call.  The criteria for
   26067      successful sibling call optimization may vary greatly between
   26068      different architectures.
   26069 
   26070  -- Target Hook: void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap *REGS)
   26071      Add any hard registers to REGS that are live on entry to the
   26072      function.  This hook only needs to be defined to provide registers
   26073      that cannot be found by examination of FUNCTION_ARG_REGNO_P, the
   26074      callee saved registers, STATIC_CHAIN_INCOMING_REGNUM,
   26075      STATIC_CHAIN_REGNUM, TARGET_STRUCT_VALUE_RTX,
   26076      FRAME_POINTER_REGNUM, EH_USES, FRAME_POINTER_REGNUM,
   26077      ARG_POINTER_REGNUM, and the PIC_OFFSET_TABLE_REGNUM.
   26078 
   26079 
   26080 File: gccint.info,  Node: Stack Smashing Protection,  Prev: Tail Calls,  Up: Stack and Calling
   26081 
   26082 15.10.14 Stack smashing protection
   26083 ----------------------------------
   26084 
   26085  -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void)
   26086      This hook returns a `DECL' node for the external variable to use
   26087      for the stack protection guard.  This variable is initialized by
   26088      the runtime to some random value and is used to initialize the
   26089      guard value that is placed at the top of the local stack frame.
   26090      The type of this variable must be `ptr_type_node'.
   26091 
   26092      The default version of this hook creates a variable called
   26093      `__stack_chk_guard', which is normally defined in `libgcc2.c'.
   26094 
   26095  -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void)
   26096      This hook returns a tree expression that alerts the runtime that
   26097      the stack protect guard variable has been modified.  This
   26098      expression should involve a call to a `noreturn' function.
   26099 
   26100      The default version of this hook invokes a function called
   26101      `__stack_chk_fail', taking no arguments.  This function is
   26102      normally defined in `libgcc2.c'.
   26103 
   26104 
   26105 File: gccint.info,  Node: Varargs,  Next: Trampolines,  Prev: Stack and Calling,  Up: Target Macros
   26106 
   26107 15.11 Implementing the Varargs Macros
   26108 =====================================
   26109 
   26110 GCC comes with an implementation of `<varargs.h>' and `<stdarg.h>' that
   26111 work without change on machines that pass arguments on the stack.
   26112 Other machines require their own implementations of varargs, and the
   26113 two machine independent header files must have conditionals to include
   26114 it.
   26115 
   26116  ISO `<stdarg.h>' differs from traditional `<varargs.h>' mainly in the
   26117 calling convention for `va_start'.  The traditional implementation
   26118 takes just one argument, which is the variable in which to store the
   26119 argument pointer.  The ISO implementation of `va_start' takes an
   26120 additional second argument.  The user is supposed to write the last
   26121 named argument of the function here.
   26122 
   26123  However, `va_start' should not use this argument.  The way to find the
   26124 end of the named arguments is with the built-in functions described
   26125 below.
   26126 
   26127  -- Macro: __builtin_saveregs ()
   26128      Use this built-in function to save the argument registers in
   26129      memory so that the varargs mechanism can access them.  Both ISO
   26130      and traditional versions of `va_start' must use
   26131      `__builtin_saveregs', unless you use
   26132      `TARGET_SETUP_INCOMING_VARARGS' (see below) instead.
   26133 
   26134      On some machines, `__builtin_saveregs' is open-coded under the
   26135      control of the target hook `TARGET_EXPAND_BUILTIN_SAVEREGS'.  On
   26136      other machines, it calls a routine written in assembler language,
   26137      found in `libgcc2.c'.
   26138 
   26139      Code generated for the call to `__builtin_saveregs' appears at the
   26140      beginning of the function, as opposed to where the call to
   26141      `__builtin_saveregs' is written, regardless of what the code is.
   26142      This is because the registers must be saved before the function
   26143      starts to use them for its own purposes.
   26144 
   26145  -- Macro: __builtin_args_info (CATEGORY)
   26146      Use this built-in function to find the first anonymous arguments in
   26147      registers.
   26148 
   26149      In general, a machine may have several categories of registers
   26150      used for arguments, each for a particular category of data types.
   26151      (For example, on some machines, floating-point registers are used
   26152      for floating-point arguments while other arguments are passed in
   26153      the general registers.)  To make non-varargs functions use the
   26154      proper calling convention, you have defined the `CUMULATIVE_ARGS'
   26155      data type to record how many registers in each category have been
   26156      used so far
   26157 
   26158      `__builtin_args_info' accesses the same data structure of type
   26159      `CUMULATIVE_ARGS' after the ordinary argument layout is finished
   26160      with it, with CATEGORY specifying which word to access.  Thus, the
   26161      value indicates the first unused register in a given category.
   26162 
   26163      Normally, you would use `__builtin_args_info' in the implementation
   26164      of `va_start', accessing each category just once and storing the
   26165      value in the `va_list' object.  This is because `va_list' will
   26166      have to update the values, and there is no way to alter the values
   26167      accessed by `__builtin_args_info'.
   26168 
   26169  -- Macro: __builtin_next_arg (LASTARG)
   26170      This is the equivalent of `__builtin_args_info', for stack
   26171      arguments.  It returns the address of the first anonymous stack
   26172      argument, as type `void *'.  If `ARGS_GROW_DOWNWARD', it returns
   26173      the address of the location above the first anonymous stack
   26174      argument.  Use it in `va_start' to initialize the pointer for
   26175      fetching arguments from the stack.  Also use it in `va_start' to
   26176      verify that the second parameter LASTARG is the last named argument
   26177      of the current function.
   26178 
   26179  -- Macro: __builtin_classify_type (OBJECT)
   26180      Since each machine has its own conventions for which data types are
   26181      passed in which kind of register, your implementation of `va_arg'
   26182      has to embody these conventions.  The easiest way to categorize the
   26183      specified data type is to use `__builtin_classify_type' together
   26184      with `sizeof' and `__alignof__'.
   26185 
   26186      `__builtin_classify_type' ignores the value of OBJECT, considering
   26187      only its data type.  It returns an integer describing what kind of
   26188      type that is--integer, floating, pointer, structure, and so on.
   26189 
   26190      The file `typeclass.h' defines an enumeration that you can use to
   26191      interpret the values of `__builtin_classify_type'.
   26192 
   26193  These machine description macros help implement varargs:
   26194 
   26195  -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void)
   26196      If defined, this hook produces the machine-specific code for a
   26197      call to `__builtin_saveregs'.  This code will be moved to the very
   26198      beginning of the function, before any parameter access are made.
   26199      The return value of this function should be an RTX that contains
   26200      the value to use as the return of `__builtin_saveregs'.
   26201 
   26202  -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (CUMULATIVE_ARGS
   26203           *ARGS_SO_FAR, enum machine_mode MODE, tree TYPE, int
   26204           *PRETEND_ARGS_SIZE, int SECOND_TIME)
   26205      This target hook offers an alternative to using
   26206      `__builtin_saveregs' and defining the hook
   26207      `TARGET_EXPAND_BUILTIN_SAVEREGS'.  Use it to store the anonymous
   26208      register arguments into the stack so that all the arguments appear
   26209      to have been passed consecutively on the stack.  Once this is
   26210      done, you can use the standard implementation of varargs that
   26211      works for machines that pass all their arguments on the stack.
   26212 
   26213      The argument ARGS_SO_FAR points to the `CUMULATIVE_ARGS' data
   26214      structure, containing the values that are obtained after
   26215      processing the named arguments.  The arguments MODE and TYPE
   26216      describe the last named argument--its machine mode and its data
   26217      type as a tree node.
   26218 
   26219      The target hook should do two things: first, push onto the stack
   26220      all the argument registers _not_ used for the named arguments, and
   26221      second, store the size of the data thus pushed into the
   26222      `int'-valued variable pointed to by PRETEND_ARGS_SIZE.  The value
   26223      that you store here will serve as additional offset for setting up
   26224      the stack frame.
   26225 
   26226      Because you must generate code to push the anonymous arguments at
   26227      compile time without knowing their data types,
   26228      `TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that
   26229      have just a single category of argument register and use it
   26230      uniformly for all data types.
   26231 
   26232      If the argument SECOND_TIME is nonzero, it means that the
   26233      arguments of the function are being analyzed for the second time.
   26234      This happens for an inline function, which is not actually
   26235      compiled until the end of the source file.  The hook
   26236      `TARGET_SETUP_INCOMING_VARARGS' should not generate any
   26237      instructions in this case.
   26238 
   26239  -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (CUMULATIVE_ARGS
   26240           *CA)
   26241      Define this hook to return `true' if the location where a function
   26242      argument is passed depends on whether or not it is a named
   26243      argument.
   26244 
   26245      This hook controls how the NAMED argument to `FUNCTION_ARG' is set
   26246      for varargs and stdarg functions.  If this hook returns `true',
   26247      the NAMED argument is always true for named arguments, and false
   26248      for unnamed arguments.  If it returns `false', but
   26249      `TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns `true', then all
   26250      arguments are treated as named.  Otherwise, all named arguments
   26251      except the last are treated as named.
   26252 
   26253      You need not define this hook if it always returns zero.
   26254 
   26255  -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED
   26256      If you need to conditionally change ABIs so that one works with
   26257      `TARGET_SETUP_INCOMING_VARARGS', but the other works like neither
   26258      `TARGET_SETUP_INCOMING_VARARGS' nor
   26259      `TARGET_STRICT_ARGUMENT_NAMING' was defined, then define this hook
   26260      to return `true' if `TARGET_SETUP_INCOMING_VARARGS' is used,
   26261      `false' otherwise.  Otherwise, you should not define this hook.
   26262 
   26263 
   26264 File: gccint.info,  Node: Trampolines,  Next: Library Calls,  Prev: Varargs,  Up: Target Macros
   26265 
   26266 15.12 Trampolines for Nested Functions
   26267 ======================================
   26268 
   26269 A "trampoline" is a small piece of code that is created at run time
   26270 when the address of a nested function is taken.  It normally resides on
   26271 the stack, in the stack frame of the containing function.  These macros
   26272 tell GCC how to generate code to allocate and initialize a trampoline.
   26273 
   26274  The instructions in the trampoline must do two things: load a constant
   26275 address into the static chain register, and jump to the real address of
   26276 the nested function.  On CISC machines such as the m68k, this requires
   26277 two instructions, a move immediate and a jump.  Then the two addresses
   26278 exist in the trampoline as word-long immediate operands.  On RISC
   26279 machines, it is often necessary to load each address into a register in
   26280 two parts.  Then pieces of each address form separate immediate
   26281 operands.
   26282 
   26283  The code generated to initialize the trampoline must store the variable
   26284 parts--the static chain value and the function address--into the
   26285 immediate operands of the instructions.  On a CISC machine, this is
   26286 simply a matter of copying each address to a memory reference at the
   26287 proper offset from the start of the trampoline.  On a RISC machine, it
   26288 may be necessary to take out pieces of the address and store them
   26289 separately.
   26290 
   26291  -- Macro: TRAMPOLINE_TEMPLATE (FILE)
   26292      A C statement to output, on the stream FILE, assembler code for a
   26293      block of data that contains the constant parts of a trampoline.
   26294      This code should not include a label--the label is taken care of
   26295      automatically.
   26296 
   26297      If you do not define this macro, it means no template is needed
   26298      for the target.  Do not define this macro on systems where the
   26299      block move code to copy the trampoline into place would be larger
   26300      than the code to generate it on the spot.
   26301 
   26302  -- Macro: TRAMPOLINE_SECTION
   26303      Return the section into which the trampoline template is to be
   26304      placed (*note Sections::).  The default value is
   26305      `readonly_data_section'.
   26306 
   26307  -- Macro: TRAMPOLINE_SIZE
   26308      A C expression for the size in bytes of the trampoline, as an
   26309      integer.
   26310 
   26311  -- Macro: TRAMPOLINE_ALIGNMENT
   26312      Alignment required for trampolines, in bits.
   26313 
   26314      If you don't define this macro, the value of `BIGGEST_ALIGNMENT'
   26315      is used for aligning trampolines.
   26316 
   26317  -- Macro: INITIALIZE_TRAMPOLINE (ADDR, FNADDR, STATIC_CHAIN)
   26318      A C statement to initialize the variable parts of a trampoline.
   26319      ADDR is an RTX for the address of the trampoline; FNADDR is an RTX
   26320      for the address of the nested function; STATIC_CHAIN is an RTX for
   26321      the static chain value that should be passed to the function when
   26322      it is called.
   26323 
   26324  -- Macro: TRAMPOLINE_ADJUST_ADDRESS (ADDR)
   26325      A C statement that should perform any machine-specific adjustment
   26326      in the address of the trampoline.  Its argument contains the
   26327      address that was passed to `INITIALIZE_TRAMPOLINE'.  In case the
   26328      address to be used for a function call should be different from
   26329      the address in which the template was stored, the different
   26330      address should be assigned to ADDR.  If this macro is not defined,
   26331      ADDR will be used for function calls.
   26332 
   26333      If this macro is not defined, by default the trampoline is
   26334      allocated as a stack slot.  This default is right for most
   26335      machines.  The exceptions are machines where it is impossible to
   26336      execute instructions in the stack area.  On such machines, you may
   26337      have to implement a separate stack, using this macro in
   26338      conjunction with `TARGET_ASM_FUNCTION_PROLOGUE' and
   26339      `TARGET_ASM_FUNCTION_EPILOGUE'.
   26340 
   26341      FP points to a data structure, a `struct function', which
   26342      describes the compilation status of the immediate containing
   26343      function of the function which the trampoline is for.  The stack
   26344      slot for the trampoline is in the stack frame of this containing
   26345      function.  Other allocation strategies probably must do something
   26346      analogous with this information.
   26347 
   26348  Implementing trampolines is difficult on many machines because they
   26349 have separate instruction and data caches.  Writing into a stack
   26350 location fails to clear the memory in the instruction cache, so when
   26351 the program jumps to that location, it executes the old contents.
   26352 
   26353  Here are two possible solutions.  One is to clear the relevant parts of
   26354 the instruction cache whenever a trampoline is set up.  The other is to
   26355 make all trampolines identical, by having them jump to a standard
   26356 subroutine.  The former technique makes trampoline execution faster; the
   26357 latter makes initialization faster.
   26358 
   26359  To clear the instruction cache when a trampoline is initialized, define
   26360 the following macro.
   26361 
   26362  -- Macro: CLEAR_INSN_CACHE (BEG, END)
   26363      If defined, expands to a C expression clearing the _instruction
   26364      cache_ in the specified interval.  The definition of this macro
   26365      would typically be a series of `asm' statements.  Both BEG and END
   26366      are both pointer expressions.
   26367 
   26368  The operating system may also require the stack to be made executable
   26369 before calling the trampoline.  To implement this requirement, define
   26370 the following macro.
   26371 
   26372  -- Macro: ENABLE_EXECUTE_STACK
   26373      Define this macro if certain operations must be performed before
   26374      executing code located on the stack.  The macro should expand to a
   26375      series of C file-scope constructs (e.g. functions) and provide a
   26376      unique entry point named `__enable_execute_stack'.  The target is
   26377      responsible for emitting calls to the entry point in the code, for
   26378      example from the `INITIALIZE_TRAMPOLINE' macro.
   26379 
   26380  To use a standard subroutine, define the following macro.  In addition,
   26381 you must make sure that the instructions in a trampoline fill an entire
   26382 cache line with identical instructions, or else ensure that the
   26383 beginning of the trampoline code is always aligned at the same point in
   26384 its cache line.  Look in `m68k.h' as a guide.
   26385 
   26386  -- Macro: TRANSFER_FROM_TRAMPOLINE
   26387      Define this macro if trampolines need a special subroutine to do
   26388      their work.  The macro should expand to a series of `asm'
   26389      statements which will be compiled with GCC.  They go in a library
   26390      function named `__transfer_from_trampoline'.
   26391 
   26392      If you need to avoid executing the ordinary prologue code of a
   26393      compiled C function when you jump to the subroutine, you can do so
   26394      by placing a special label of your own in the assembler code.  Use
   26395      one `asm' statement to generate an assembler label, and another to
   26396      make the label global.  Then trampolines can use that label to
   26397      jump directly to your special assembler code.
   26398 
   26399 
   26400 File: gccint.info,  Node: Library Calls,  Next: Addressing Modes,  Prev: Trampolines,  Up: Target Macros
   26401 
   26402 15.13 Implicit Calls to Library Routines
   26403 ========================================
   26404 
   26405 Here is an explanation of implicit calls to library routines.
   26406 
   26407  -- Macro: DECLARE_LIBRARY_RENAMES
   26408      This macro, if defined, should expand to a piece of C code that
   26409      will get expanded when compiling functions for libgcc.a.  It can
   26410      be used to provide alternate names for GCC's internal library
   26411      functions if there are ABI-mandated names that the compiler should
   26412      provide.
   26413 
   26414  -- Target Hook: void TARGET_INIT_LIBFUNCS (void)
   26415      This hook should declare additional library routines or rename
   26416      existing ones, using the functions `set_optab_libfunc' and
   26417      `init_one_libfunc' defined in `optabs.c'.  `init_optabs' calls
   26418      this macro after initializing all the normal library routines.
   26419 
   26420      The default is to do nothing.  Most ports don't need to define
   26421      this hook.
   26422 
   26423  -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON)
   26424      This macro should return `true' if the library routine that
   26425      implements the floating point comparison operator COMPARISON in
   26426      mode MODE will return a boolean, and FALSE if it will return a
   26427      tristate.
   26428 
   26429      GCC's own floating point libraries return tristates from the
   26430      comparison operators, so the default returns false always.  Most
   26431      ports don't need to define this macro.
   26432 
   26433  -- Macro: TARGET_LIB_INT_CMP_BIASED
   26434      This macro should evaluate to `true' if the integer comparison
   26435      functions (like `__cmpdi2') return 0 to indicate that the first
   26436      operand is smaller than the second, 1 to indicate that they are
   26437      equal, and 2 to indicate that the first operand is greater than
   26438      the second.  If this macro evaluates to `false' the comparison
   26439      functions return -1, 0, and 1 instead of 0, 1, and 2.  If the
   26440      target uses the routines in `libgcc.a', you do not need to define
   26441      this macro.
   26442 
   26443  -- Macro: US_SOFTWARE_GOFAST
   26444      Define this macro if your system C library uses the US Software
   26445      GOFAST library to provide floating point emulation.
   26446 
   26447      In addition to defining this macro, your architecture must set
   26448      `TARGET_INIT_LIBFUNCS' to `gofast_maybe_init_libfuncs', or else
   26449      call that function from its version of that hook.  It is defined
   26450      in `config/gofast.h', which must be included by your
   26451      architecture's `CPU.c' file.  See `sparc/sparc.c' for an example.
   26452 
   26453      If this macro is defined, the
   26454      `TARGET_FLOAT_LIB_COMPARE_RETURNS_BOOL' target hook must return
   26455      false for `SFmode' and `DFmode' comparisons.
   26456 
   26457  -- Macro: TARGET_EDOM
   26458      The value of `EDOM' on the target machine, as a C integer constant
   26459      expression.  If you don't define this macro, GCC does not attempt
   26460      to deposit the value of `EDOM' into `errno' directly.  Look in
   26461      `/usr/include/errno.h' to find the value of `EDOM' on your system.
   26462 
   26463      If you do not define `TARGET_EDOM', then compiled code reports
   26464      domain errors by calling the library function and letting it
   26465      report the error.  If mathematical functions on your system use
   26466      `matherr' when there is an error, then you should leave
   26467      `TARGET_EDOM' undefined so that `matherr' is used normally.
   26468 
   26469  -- Macro: GEN_ERRNO_RTX
   26470      Define this macro as a C expression to create an rtl expression
   26471      that refers to the global "variable" `errno'.  (On certain systems,
   26472      `errno' may not actually be a variable.)  If you don't define this
   26473      macro, a reasonable default is used.
   26474 
   26475  -- Macro: TARGET_C99_FUNCTIONS
   26476      When this macro is nonzero, GCC will implicitly optimize `sin'
   26477      calls into `sinf' and similarly for other functions defined by C99
   26478      standard.  The default is nonzero that should be proper value for
   26479      most modern systems, however number of existing systems lacks
   26480      support for these functions in the runtime so they needs this
   26481      macro to be redefined to 0.
   26482 
   26483  -- Macro: TARGET_HAS_SINCOS
   26484      When this macro is nonzero, GCC will implicitly optimize calls to
   26485      `sin' and `cos' with the same argument to a call to `sincos'.  The
   26486      default is zero.  The target has to provide the following
   26487      functions:
   26488           void sincos(double x, double *sin, double *cos);
   26489           void sincosf(float x, float *sin, float *cos);
   26490           void sincosl(long double x, long double *sin, long double *cos);
   26491 
   26492  -- Macro: NEXT_OBJC_RUNTIME
   26493      Define this macro to generate code for Objective-C message sending
   26494      using the calling convention of the NeXT system.  This calling
   26495      convention involves passing the object, the selector and the
   26496      method arguments all at once to the method-lookup library function.
   26497 
   26498      The default calling convention passes just the object and the
   26499      selector to the lookup function, which returns a pointer to the
   26500      method.
   26501 
   26502 
   26503 File: gccint.info,  Node: Addressing Modes,  Next: Anchored Addresses,  Prev: Library Calls,  Up: Target Macros
   26504 
   26505 15.14 Addressing Modes
   26506 ======================
   26507 
   26508 This is about addressing modes.
   26509 
   26510  -- Macro: HAVE_PRE_INCREMENT
   26511  -- Macro: HAVE_PRE_DECREMENT
   26512  -- Macro: HAVE_POST_INCREMENT
   26513  -- Macro: HAVE_POST_DECREMENT
   26514      A C expression that is nonzero if the machine supports
   26515      pre-increment, pre-decrement, post-increment, or post-decrement
   26516      addressing respectively.
   26517 
   26518  -- Macro: HAVE_PRE_MODIFY_DISP
   26519  -- Macro: HAVE_POST_MODIFY_DISP
   26520      A C expression that is nonzero if the machine supports pre- or
   26521      post-address side-effect generation involving constants other than
   26522      the size of the memory operand.
   26523 
   26524  -- Macro: HAVE_PRE_MODIFY_REG
   26525  -- Macro: HAVE_POST_MODIFY_REG
   26526      A C expression that is nonzero if the machine supports pre- or
   26527      post-address side-effect generation involving a register
   26528      displacement.
   26529 
   26530  -- Macro: CONSTANT_ADDRESS_P (X)
   26531      A C expression that is 1 if the RTX X is a constant which is a
   26532      valid address.  On most machines, this can be defined as
   26533      `CONSTANT_P (X)', but a few machines are more restrictive in which
   26534      constant addresses are supported.
   26535 
   26536  -- Macro: CONSTANT_P (X)
   26537      `CONSTANT_P', which is defined by target-independent code, accepts
   26538      integer-values expressions whose values are not explicitly known,
   26539      such as `symbol_ref', `label_ref', and `high' expressions and
   26540      `const' arithmetic expressions, in addition to `const_int' and
   26541      `const_double' expressions.
   26542 
   26543  -- Macro: MAX_REGS_PER_ADDRESS
   26544      A number, the maximum number of registers that can appear in a
   26545      valid memory address.  Note that it is up to you to specify a
   26546      value equal to the maximum number that `GO_IF_LEGITIMATE_ADDRESS'
   26547      would ever accept.
   26548 
   26549  -- Macro: GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)
   26550      A C compound statement with a conditional `goto LABEL;' executed
   26551      if X (an RTX) is a legitimate memory address on the target machine
   26552      for a memory operand of mode MODE.
   26553 
   26554      It usually pays to define several simpler macros to serve as
   26555      subroutines for this one.  Otherwise it may be too complicated to
   26556      understand.
   26557 
   26558      This macro must exist in two variants: a strict variant and a
   26559      non-strict one.  The strict variant is used in the reload pass.  It
   26560      must be defined so that any pseudo-register that has not been
   26561      allocated a hard register is considered a memory reference.  In
   26562      contexts where some kind of register is required, a pseudo-register
   26563      with no hard register must be rejected.
   26564 
   26565      The non-strict variant is used in other passes.  It must be
   26566      defined to accept all pseudo-registers in every context where some
   26567      kind of register is required.
   26568 
   26569      Compiler source files that want to use the strict variant of this
   26570      macro define the macro `REG_OK_STRICT'.  You should use an `#ifdef
   26571      REG_OK_STRICT' conditional to define the strict variant in that
   26572      case and the non-strict variant otherwise.
   26573 
   26574      Subroutines to check for acceptable registers for various purposes
   26575      (one for base registers, one for index registers, and so on) are
   26576      typically among the subroutines used to define
   26577      `GO_IF_LEGITIMATE_ADDRESS'.  Then only these subroutine macros
   26578      need have two variants; the higher levels of macros may be the
   26579      same whether strict or not.
   26580 
   26581      Normally, constant addresses which are the sum of a `symbol_ref'
   26582      and an integer are stored inside a `const' RTX to mark them as
   26583      constant.  Therefore, there is no need to recognize such sums
   26584      specifically as legitimate addresses.  Normally you would simply
   26585      recognize any `const' as legitimate.
   26586 
   26587      Usually `PRINT_OPERAND_ADDRESS' is not prepared to handle constant
   26588      sums that are not marked with  `const'.  It assumes that a naked
   26589      `plus' indicates indexing.  If so, then you _must_ reject such
   26590      naked constant sums as illegitimate addresses, so that none of
   26591      them will be given to `PRINT_OPERAND_ADDRESS'.
   26592 
   26593      On some machines, whether a symbolic address is legitimate depends
   26594      on the section that the address refers to.  On these machines,
   26595      define the target hook `TARGET_ENCODE_SECTION_INFO' to store the
   26596      information into the `symbol_ref', and then check for it here.
   26597      When you see a `const', you will have to look inside it to find the
   26598      `symbol_ref' in order to determine the section.  *Note Assembler
   26599      Format::.
   26600 
   26601  -- Macro: FIND_BASE_TERM (X)
   26602      A C expression to determine the base term of address X.  This
   26603      macro is used in only one place: `find_base_term' in alias.c.
   26604 
   26605      It is always safe for this macro to not be defined.  It exists so
   26606      that alias analysis can understand machine-dependent addresses.
   26607 
   26608      The typical use of this macro is to handle addresses containing a
   26609      label_ref or symbol_ref within an UNSPEC.
   26610 
   26611  -- Macro: LEGITIMIZE_ADDRESS (X, OLDX, MODE, WIN)
   26612      A C compound statement that attempts to replace X with a valid
   26613      memory address for an operand of mode MODE.  WIN will be a C
   26614      statement label elsewhere in the code; the macro definition may use
   26615 
   26616           GO_IF_LEGITIMATE_ADDRESS (MODE, X, WIN);
   26617 
   26618      to avoid further processing if the address has become legitimate.
   26619 
   26620      X will always be the result of a call to `break_out_memory_refs',
   26621      and OLDX will be the operand that was given to that function to
   26622      produce X.
   26623 
   26624      The code generated by this macro should not alter the substructure
   26625      of X.  If it transforms X into a more legitimate form, it should
   26626      assign X (which will always be a C variable) a new value.
   26627 
   26628      It is not necessary for this macro to come up with a legitimate
   26629      address.  The compiler has standard ways of doing so in all cases.
   26630      In fact, it is safe to omit this macro.  But often a
   26631      machine-dependent strategy can generate better code.
   26632 
   26633  -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS,
   26634           WIN)
   26635      A C compound statement that attempts to replace X, which is an
   26636      address that needs reloading, with a valid memory address for an
   26637      operand of mode MODE.  WIN will be a C statement label elsewhere
   26638      in the code.  It is not necessary to define this macro, but it
   26639      might be useful for performance reasons.
   26640 
   26641      For example, on the i386, it is sometimes possible to use a single
   26642      reload register instead of two by reloading a sum of two pseudo
   26643      registers into a register.  On the other hand, for number of RISC
   26644      processors offsets are limited so that often an intermediate
   26645      address needs to be generated in order to address a stack slot.
   26646      By defining `LEGITIMIZE_RELOAD_ADDRESS' appropriately, the
   26647      intermediate addresses generated for adjacent some stack slots can
   26648      be made identical, and thus be shared.
   26649 
   26650      _Note_: This macro should be used with caution.  It is necessary
   26651      to know something of how reload works in order to effectively use
   26652      this, and it is quite easy to produce macros that build in too
   26653      much knowledge of reload internals.
   26654 
   26655      _Note_: This macro must be able to reload an address created by a
   26656      previous invocation of this macro.  If it fails to handle such
   26657      addresses then the compiler may generate incorrect code or abort.
   26658 
   26659      The macro definition should use `push_reload' to indicate parts
   26660      that need reloading; OPNUM, TYPE and IND_LEVELS are usually
   26661      suitable to be passed unaltered to `push_reload'.
   26662 
   26663      The code generated by this macro must not alter the substructure of
   26664      X.  If it transforms X into a more legitimate form, it should
   26665      assign X (which will always be a C variable) a new value.  This
   26666      also applies to parts that you change indirectly by calling
   26667      `push_reload'.
   26668 
   26669      The macro definition may use `strict_memory_address_p' to test if
   26670      the address has become legitimate.
   26671 
   26672      If you want to change only a part of X, one standard way of doing
   26673      this is to use `copy_rtx'.  Note, however, that it unshares only a
   26674      single level of rtl.  Thus, if the part to be changed is not at the
   26675      top level, you'll need to replace first the top level.  It is not
   26676      necessary for this macro to come up with a legitimate address;
   26677      but often a machine-dependent strategy can generate better code.
   26678 
   26679  -- Macro: GO_IF_MODE_DEPENDENT_ADDRESS (ADDR, LABEL)
   26680      A C statement or compound statement with a conditional `goto
   26681      LABEL;' executed if memory address X (an RTX) can have different
   26682      meanings depending on the machine mode of the memory reference it
   26683      is used for or if the address is valid for some modes but not
   26684      others.
   26685 
   26686      Autoincrement and autodecrement addresses typically have
   26687      mode-dependent effects because the amount of the increment or
   26688      decrement is the size of the operand being addressed.  Some
   26689      machines have other mode-dependent addresses.  Many RISC machines
   26690      have no mode-dependent addresses.
   26691 
   26692      You may assume that ADDR is a valid address for the machine.
   26693 
   26694  -- Macro: LEGITIMATE_CONSTANT_P (X)
   26695      A C expression that is nonzero if X is a legitimate constant for
   26696      an immediate operand on the target machine.  You can assume that X
   26697      satisfies `CONSTANT_P', so you need not check this.  In fact, `1'
   26698      is a suitable definition for this macro on machines where anything
   26699      `CONSTANT_P' is valid.
   26700 
   26701  -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X)
   26702      This hook is used to undo the possibly obfuscating effects of the
   26703      `LEGITIMIZE_ADDRESS' and `LEGITIMIZE_RELOAD_ADDRESS' target
   26704      macros.  Some backend implementations of these macros wrap symbol
   26705      references inside an `UNSPEC' rtx to represent PIC or similar
   26706      addressing modes.  This target hook allows GCC's optimizers to
   26707      understand the semantics of these opaque `UNSPEC's by converting
   26708      them back into their original form.
   26709 
   26710  -- Target Hook: bool TARGET_CANNOT_FORCE_CONST_MEM (rtx X)
   26711      This hook should return true if X is of a form that cannot (or
   26712      should not) be spilled to the constant pool.  The default version
   26713      of this hook returns false.
   26714 
   26715      The primary reason to define this hook is to prevent reload from
   26716      deciding that a non-legitimate constant would be better reloaded
   26717      from the constant pool instead of spilling and reloading a register
   26718      holding the constant.  This restriction is often true of addresses
   26719      of TLS symbols for various targets.
   26720 
   26721  -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (enum
   26722           machine_mode MODE, rtx X)
   26723      This hook should return true if pool entries for constant X can be
   26724      placed in an `object_block' structure.  MODE is the mode of X.
   26725 
   26726      The default version returns false for all constants.
   26727 
   26728  -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (enum tree_code FN,
   26729           bool TM_FN, bool SQRT)
   26730      This hook should return the DECL of a function that implements
   26731      reciprocal of the builtin function with builtin function code FN,
   26732      or `NULL_TREE' if such a function is not available.  TM_FN is true
   26733      when FN is a code of a machine-dependent builtin function.  When
   26734      SQRT is true, additional optimizations that apply only to the
   26735      reciprocal of a square root function are performed, and only
   26736      reciprocals of `sqrt' function are valid.
   26737 
   26738  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void)
   26739      This hook should return the DECL of a function F that given an
   26740      address ADDR as an argument returns a mask M that can be used to
   26741      extract from two vectors the relevant data that resides in ADDR in
   26742      case ADDR is not properly aligned.
   26743 
   26744      The autovectorizer, when vectorizing a load operation from an
   26745      address ADDR that may be unaligned, will generate two vector loads
   26746      from the two aligned addresses around ADDR. It then generates a
   26747      `REALIGN_LOAD' operation to extract the relevant data from the two
   26748      loaded vectors. The first two arguments to `REALIGN_LOAD', V1 and
   26749      V2, are the two vectors, each of size VS, and the third argument,
   26750      OFF, defines how the data will be extracted from these two
   26751      vectors: if OFF is 0, then the returned vector is V2; otherwise,
   26752      the returned vector is composed from the last VS-OFF elements of
   26753      V1 concatenated to the first OFF elements of V2.
   26754 
   26755      If this hook is defined, the autovectorizer will generate a call
   26756      to F (using the DECL tree that this hook returns) and will use the
   26757      return value of F as the argument OFF to `REALIGN_LOAD'.
   26758      Therefore, the mask M returned by F should comply with the
   26759      semantics expected by `REALIGN_LOAD' described above.  If this
   26760      hook is not defined, then ADDR will be used as the argument OFF to
   26761      `REALIGN_LOAD', in which case the low log2(VS)-1 bits of ADDR will
   26762      be considered.
   26763 
   26764  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN (tree X)
   26765      This hook should return the DECL of a function F that implements
   26766      widening multiplication of the even elements of two input vectors
   26767      of type X.
   26768 
   26769      If this hook is defined, the autovectorizer will use it along with
   26770      the `TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD' target hook when
   26771      vectorizing widening multiplication in cases that the order of the
   26772      results does not have to be preserved (e.g. used only by a
   26773      reduction computation). Otherwise, the `widen_mult_hi/lo' idioms
   26774      will be used.
   26775 
   26776  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD (tree X)
   26777      This hook should return the DECL of a function F that implements
   26778      widening multiplication of the odd elements of two input vectors
   26779      of type X.
   26780 
   26781      If this hook is defined, the autovectorizer will use it along with
   26782      the `TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN' target hook when
   26783      vectorizing widening multiplication in cases that the order of the
   26784      results does not have to be preserved (e.g. used only by a
   26785      reduction computation). Otherwise, the `widen_mult_hi/lo' idioms
   26786      will be used.
   26787 
   26788  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_CONVERSION (enum
   26789           tree_code CODE, tree TYPE)
   26790      This hook should return the DECL of a function that implements
   26791      conversion of the input vector of type TYPE.  If TYPE is an
   26792      integral type, the result of the conversion is a vector of
   26793      floating-point type of the same size.  If TYPE is a floating-point
   26794      type, the result of the conversion is a vector of integral type of
   26795      the same size.  CODE specifies how the conversion is to be applied
   26796      (truncation, rounding, etc.).
   26797 
   26798      If this hook is defined, the autovectorizer will use the
   26799      `TARGET_VECTORIZE_BUILTIN_CONVERSION' target hook when vectorizing
   26800      conversion. Otherwise, it will return `NULL_TREE'.
   26801 
   26802  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION
   26803           (enum built_in_function CODE, tree VEC_TYPE_OUT, tree
   26804           VEC_TYPE_IN)
   26805      This hook should return the decl of a function that implements the
   26806      vectorized variant of the builtin function with builtin function
   26807      code CODE or `NULL_TREE' if such a function is not available.  The
   26808      return type of the vectorized function shall be of vector type
   26809      VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN.
   26810 
   26811 
   26812 File: gccint.info,  Node: Anchored Addresses,  Next: Condition Code,  Prev: Addressing Modes,  Up: Target Macros
   26813 
   26814 15.15 Anchored Addresses
   26815 ========================
   26816 
   26817 GCC usually addresses every static object as a separate entity.  For
   26818 example, if we have:
   26819 
   26820      static int a, b, c;
   26821      int foo (void) { return a + b + c; }
   26822 
   26823  the code for `foo' will usually calculate three separate symbolic
   26824 addresses: those of `a', `b' and `c'.  On some targets, it would be
   26825 better to calculate just one symbolic address and access the three
   26826 variables relative to it.  The equivalent pseudocode would be something
   26827 like:
   26828 
   26829      int foo (void)
   26830      {
   26831        register int *xr = &x;
   26832        return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
   26833      }
   26834 
   26835  (which isn't valid C).  We refer to shared addresses like `x' as
   26836 "section anchors".  Their use is controlled by `-fsection-anchors'.
   26837 
   26838  The hooks below describe the target properties that GCC needs to know
   26839 in order to make effective use of section anchors.  It won't use
   26840 section anchors at all unless either `TARGET_MIN_ANCHOR_OFFSET' or
   26841 `TARGET_MAX_ANCHOR_OFFSET' is set to a nonzero value.
   26842 
   26843  -- Variable: Target Hook HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET
   26844      The minimum offset that should be applied to a section anchor.  On
   26845      most targets, it should be the smallest offset that can be applied
   26846      to a base register while still giving a legitimate address for
   26847      every mode.  The default value is 0.
   26848 
   26849  -- Variable: Target Hook HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET
   26850      Like `TARGET_MIN_ANCHOR_OFFSET', but the maximum (inclusive)
   26851      offset that should be applied to section anchors.  The default
   26852      value is 0.
   26853 
   26854  -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X)
   26855      Write the assembly code to define section anchor X, which is a
   26856      `SYMBOL_REF' for which `SYMBOL_REF_ANCHOR_P (X)' is true.  The
   26857      hook is called with the assembly output position set to the
   26858      beginning of `SYMBOL_REF_BLOCK (X)'.
   26859 
   26860      If `ASM_OUTPUT_DEF' is available, the hook's default definition
   26861      uses it to define the symbol as `. + SYMBOL_REF_BLOCK_OFFSET (X)'.
   26862      If `ASM_OUTPUT_DEF' is not available, the hook's default definition
   26863      is `NULL', which disables the use of section anchors altogether.
   26864 
   26865  -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (rtx X)
   26866      Return true if GCC should attempt to use anchors to access
   26867      `SYMBOL_REF' X.  You can assume `SYMBOL_REF_HAS_BLOCK_INFO_P (X)'
   26868      and `!SYMBOL_REF_ANCHOR_P (X)'.
   26869 
   26870      The default version is correct for most targets, but you might
   26871      need to intercept this hook to handle things like target-specific
   26872      attributes or target-specific sections.
   26873 
   26874 
   26875 File: gccint.info,  Node: Condition Code,  Next: Costs,  Prev: Anchored Addresses,  Up: Target Macros
   26876 
   26877 15.16 Condition Code Status
   26878 ===========================
   26879 
   26880 This describes the condition code status.
   26881 
   26882  The file `conditions.h' defines a variable `cc_status' to describe how
   26883 the condition code was computed (in case the interpretation of the
   26884 condition code depends on the instruction that it was set by).  This
   26885 variable contains the RTL expressions on which the condition code is
   26886 currently based, and several standard flags.
   26887 
   26888  Sometimes additional machine-specific flags must be defined in the
   26889 machine description header file.  It can also add additional
   26890 machine-specific information by defining `CC_STATUS_MDEP'.
   26891 
   26892  -- Macro: CC_STATUS_MDEP
   26893      C code for a data type which is used for declaring the `mdep'
   26894      component of `cc_status'.  It defaults to `int'.
   26895 
   26896      This macro is not used on machines that do not use `cc0'.
   26897 
   26898  -- Macro: CC_STATUS_MDEP_INIT
   26899      A C expression to initialize the `mdep' field to "empty".  The
   26900      default definition does nothing, since most machines don't use the
   26901      field anyway.  If you want to use the field, you should probably
   26902      define this macro to initialize it.
   26903 
   26904      This macro is not used on machines that do not use `cc0'.
   26905 
   26906  -- Macro: NOTICE_UPDATE_CC (EXP, INSN)
   26907      A C compound statement to set the components of `cc_status'
   26908      appropriately for an insn INSN whose body is EXP.  It is this
   26909      macro's responsibility to recognize insns that set the condition
   26910      code as a byproduct of other activity as well as those that
   26911      explicitly set `(cc0)'.
   26912 
   26913      This macro is not used on machines that do not use `cc0'.
   26914 
   26915      If there are insns that do not set the condition code but do alter
   26916      other machine registers, this macro must check to see whether they
   26917      invalidate the expressions that the condition code is recorded as
   26918      reflecting.  For example, on the 68000, insns that store in address
   26919      registers do not set the condition code, which means that usually
   26920      `NOTICE_UPDATE_CC' can leave `cc_status' unaltered for such insns.
   26921      But suppose that the previous insn set the condition code based
   26922      on location `a4@(102)' and the current insn stores a new value in
   26923      `a4'.  Although the condition code is not changed by this, it will
   26924      no longer be true that it reflects the contents of `a4@(102)'.
   26925      Therefore, `NOTICE_UPDATE_CC' must alter `cc_status' in this case
   26926      to say that nothing is known about the condition code value.
   26927 
   26928      The definition of `NOTICE_UPDATE_CC' must be prepared to deal with
   26929      the results of peephole optimization: insns whose patterns are
   26930      `parallel' RTXs containing various `reg', `mem' or constants which
   26931      are just the operands.  The RTL structure of these insns is not
   26932      sufficient to indicate what the insns actually do.  What
   26933      `NOTICE_UPDATE_CC' should do when it sees one is just to run
   26934      `CC_STATUS_INIT'.
   26935 
   26936      A possible definition of `NOTICE_UPDATE_CC' is to call a function
   26937      that looks at an attribute (*note Insn Attributes::) named, for
   26938      example, `cc'.  This avoids having detailed information about
   26939      patterns in two places, the `md' file and in `NOTICE_UPDATE_CC'.
   26940 
   26941  -- Macro: SELECT_CC_MODE (OP, X, Y)
   26942      Returns a mode from class `MODE_CC' to be used when comparison
   26943      operation code OP is applied to rtx X and Y.  For example, on the
   26944      SPARC, `SELECT_CC_MODE' is defined as (see *note Jump Patterns::
   26945      for a description of the reason for this definition)
   26946 
   26947           #define SELECT_CC_MODE(OP,X,Y) \
   26948             (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT          \
   26949              ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode)    \
   26950              : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS    \
   26951                  || GET_CODE (X) == NEG) \
   26952                 ? CC_NOOVmode : CCmode))
   26953 
   26954      You should define this macro if and only if you define extra CC
   26955      modes in `MACHINE-modes.def'.
   26956 
   26957  -- Macro: CANONICALIZE_COMPARISON (CODE, OP0, OP1)
   26958      On some machines not all possible comparisons are defined, but you
   26959      can convert an invalid comparison into a valid one.  For example,
   26960      the Alpha does not have a `GT' comparison, but you can use an `LT'
   26961      comparison instead and swap the order of the operands.
   26962 
   26963      On such machines, define this macro to be a C statement to do any
   26964      required conversions.  CODE is the initial comparison code and OP0
   26965      and OP1 are the left and right operands of the comparison,
   26966      respectively.  You should modify CODE, OP0, and OP1 as required.
   26967 
   26968      GCC will not assume that the comparison resulting from this macro
   26969      is valid but will see if the resulting insn matches a pattern in
   26970      the `md' file.
   26971 
   26972      You need not define this macro if it would never change the
   26973      comparison code or operands.
   26974 
   26975  -- Macro: REVERSIBLE_CC_MODE (MODE)
   26976      A C expression whose value is one if it is always safe to reverse a
   26977      comparison whose mode is MODE.  If `SELECT_CC_MODE' can ever
   26978      return MODE for a floating-point inequality comparison, then
   26979      `REVERSIBLE_CC_MODE (MODE)' must be zero.
   26980 
   26981      You need not define this macro if it would always returns zero or
   26982      if the floating-point format is anything other than
   26983      `IEEE_FLOAT_FORMAT'.  For example, here is the definition used on
   26984      the SPARC, where floating-point inequality comparisons are always
   26985      given `CCFPEmode':
   26986 
   26987           #define REVERSIBLE_CC_MODE(MODE)  ((MODE) != CCFPEmode)
   26988 
   26989  -- Macro: REVERSE_CONDITION (CODE, MODE)
   26990      A C expression whose value is reversed condition code of the CODE
   26991      for comparison done in CC_MODE MODE.  The macro is used only in
   26992      case `REVERSIBLE_CC_MODE (MODE)' is nonzero.  Define this macro in
   26993      case machine has some non-standard way how to reverse certain
   26994      conditionals.  For instance in case all floating point conditions
   26995      are non-trapping, compiler may freely convert unordered compares
   26996      to ordered one.  Then definition may look like:
   26997 
   26998           #define REVERSE_CONDITION(CODE, MODE) \
   26999              ((MODE) != CCFPmode ? reverse_condition (CODE) \
   27000               : reverse_condition_maybe_unordered (CODE))
   27001 
   27002  -- Macro: REVERSE_CONDEXEC_PREDICATES_P (OP1, OP2)
   27003      A C expression that returns true if the conditional execution
   27004      predicate OP1, a comparison operation, is the inverse of OP2 and
   27005      vice versa.  Define this to return 0 if the target has conditional
   27006      execution predicates that cannot be reversed safely.  There is no
   27007      need to validate that the arguments of op1 and op2 are the same,
   27008      this is done separately.  If no expansion is specified, this macro
   27009      is defined as follows:
   27010 
   27011           #define REVERSE_CONDEXEC_PREDICATES_P (x, y) \
   27012              (GET_CODE ((x)) == reversed_comparison_code ((y), NULL))
   27013 
   27014  -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int *,
   27015           unsigned int *)
   27016      On targets which do not use `(cc0)', and which use a hard register
   27017      rather than a pseudo-register to hold condition codes, the regular
   27018      CSE passes are often not able to identify cases in which the hard
   27019      register is set to a common value.  Use this hook to enable a
   27020      small pass which optimizes such cases.  This hook should return
   27021      true to enable this pass, and it should set the integers to which
   27022      its arguments point to the hard register numbers used for
   27023      condition codes.  When there is only one such register, as is true
   27024      on most systems, the integer pointed to by the second argument
   27025      should be set to `INVALID_REGNUM'.
   27026 
   27027      The default version of this hook returns false.
   27028 
   27029  -- Target Hook: enum machine_mode TARGET_CC_MODES_COMPATIBLE (enum
   27030           machine_mode, enum machine_mode)
   27031      On targets which use multiple condition code modes in class
   27032      `MODE_CC', it is sometimes the case that a comparison can be
   27033      validly done in more than one mode.  On such a system, define this
   27034      target hook to take two mode arguments and to return a mode in
   27035      which both comparisons may be validly done.  If there is no such
   27036      mode, return `VOIDmode'.
   27037 
   27038      The default version of this hook checks whether the modes are the
   27039      same.  If they are, it returns that mode.  If they are different,
   27040      it returns `VOIDmode'.
   27041 
   27042 
   27043 File: gccint.info,  Node: Costs,  Next: Scheduling,  Prev: Condition Code,  Up: Target Macros
   27044 
   27045 15.17 Describing Relative Costs of Operations
   27046 =============================================
   27047 
   27048 These macros let you describe the relative speed of various operations
   27049 on the target machine.
   27050 
   27051  -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO)
   27052      A C expression for the cost of moving data of mode MODE from a
   27053      register in class FROM to one in class TO.  The classes are
   27054      expressed using the enumeration values such as `GENERAL_REGS'.  A
   27055      value of 2 is the default; other values are interpreted relative to
   27056      that.
   27057 
   27058      It is not required that the cost always equal 2 when FROM is the
   27059      same as TO; on some machines it is expensive to move between
   27060      registers if they are not general registers.
   27061 
   27062      If reload sees an insn consisting of a single `set' between two
   27063      hard registers, and if `REGISTER_MOVE_COST' applied to their
   27064      classes returns a value of 2, reload does not check to ensure that
   27065      the constraints of the insn are met.  Setting a cost of other than
   27066      2 will allow reload to verify that the constraints are met.  You
   27067      should do this if the `movM' pattern's constraints do not allow
   27068      such copying.
   27069 
   27070  -- Macro: MEMORY_MOVE_COST (MODE, CLASS, IN)
   27071      A C expression for the cost of moving data of mode MODE between a
   27072      register of class CLASS and memory; IN is zero if the value is to
   27073      be written to memory, nonzero if it is to be read in.  This cost
   27074      is relative to those in `REGISTER_MOVE_COST'.  If moving between
   27075      registers and memory is more expensive than between two registers,
   27076      you should define this macro to express the relative cost.
   27077 
   27078      If you do not define this macro, GCC uses a default cost of 4 plus
   27079      the cost of copying via a secondary reload register, if one is
   27080      needed.  If your machine requires a secondary reload register to
   27081      copy between memory and a register of CLASS but the reload
   27082      mechanism is more complex than copying via an intermediate, define
   27083      this macro to reflect the actual cost of the move.
   27084 
   27085      GCC defines the function `memory_move_secondary_cost' if secondary
   27086      reloads are needed.  It computes the costs due to copying via a
   27087      secondary register.  If your machine copies from memory using a
   27088      secondary register in the conventional way but the default base
   27089      value of 4 is not correct for your machine, define this macro to
   27090      add some other value to the result of that function.  The
   27091      arguments to that function are the same as to this macro.
   27092 
   27093  -- Macro: BRANCH_COST
   27094      A C expression for the cost of a branch instruction.  A value of 1
   27095      is the default; other values are interpreted relative to that.
   27096 
   27097  Here are additional macros which do not specify precise relative costs,
   27098 but only that certain actions are more expensive than GCC would
   27099 ordinarily expect.
   27100 
   27101  -- Macro: SLOW_BYTE_ACCESS
   27102      Define this macro as a C expression which is nonzero if accessing
   27103      less than a word of memory (i.e. a `char' or a `short') is no
   27104      faster than accessing a word of memory, i.e., if such access
   27105      require more than one instruction or if there is no difference in
   27106      cost between byte and (aligned) word loads.
   27107 
   27108      When this macro is not defined, the compiler will access a field by
   27109      finding the smallest containing object; when it is defined, a
   27110      fullword load will be used if alignment permits.  Unless bytes
   27111      accesses are faster than word accesses, using word accesses is
   27112      preferable since it may eliminate subsequent memory access if
   27113      subsequent accesses occur to other fields in the same word of the
   27114      structure, but to different bytes.
   27115 
   27116  -- Macro: SLOW_UNALIGNED_ACCESS (MODE, ALIGNMENT)
   27117      Define this macro to be the value 1 if memory accesses described
   27118      by the MODE and ALIGNMENT parameters have a cost many times greater
   27119      than aligned accesses, for example if they are emulated in a trap
   27120      handler.
   27121 
   27122      When this macro is nonzero, the compiler will act as if
   27123      `STRICT_ALIGNMENT' were nonzero when generating code for block
   27124      moves.  This can cause significantly more instructions to be
   27125      produced.  Therefore, do not set this macro nonzero if unaligned
   27126      accesses only add a cycle or two to the time for a memory access.
   27127 
   27128      If the value of this macro is always zero, it need not be defined.
   27129      If this macro is defined, it should produce a nonzero value when
   27130      `STRICT_ALIGNMENT' is nonzero.
   27131 
   27132  -- Macro: MOVE_RATIO
   27133      The threshold of number of scalar memory-to-memory move insns,
   27134      _below_ which a sequence of insns should be generated instead of a
   27135      string move insn or a library call.  Increasing the value will
   27136      always make code faster, but eventually incurs high cost in
   27137      increased code size.
   27138 
   27139      Note that on machines where the corresponding move insn is a
   27140      `define_expand' that emits a sequence of insns, this macro counts
   27141      the number of such sequences.
   27142 
   27143      If you don't define this, a reasonable default is used.
   27144 
   27145  -- Macro: MOVE_BY_PIECES_P (SIZE, ALIGNMENT)
   27146      A C expression used to determine whether `move_by_pieces' will be
   27147      used to copy a chunk of memory, or whether some other block move
   27148      mechanism will be used.  Defaults to 1 if `move_by_pieces_ninsns'
   27149      returns less than `MOVE_RATIO'.
   27150 
   27151  -- Macro: MOVE_MAX_PIECES
   27152      A C expression used by `move_by_pieces' to determine the largest
   27153      unit a load or store used to copy memory is.  Defaults to
   27154      `MOVE_MAX'.
   27155 
   27156  -- Macro: CLEAR_RATIO
   27157      The threshold of number of scalar move insns, _below_ which a
   27158      sequence of insns should be generated to clear memory instead of a
   27159      string clear insn or a library call.  Increasing the value will
   27160      always make code faster, but eventually incurs high cost in
   27161      increased code size.
   27162 
   27163      If you don't define this, a reasonable default is used.
   27164 
   27165  -- Macro: CLEAR_BY_PIECES_P (SIZE, ALIGNMENT)
   27166      A C expression used to determine whether `clear_by_pieces' will be
   27167      used to clear a chunk of memory, or whether some other block clear
   27168      mechanism will be used.  Defaults to 1 if `move_by_pieces_ninsns'
   27169      returns less than `CLEAR_RATIO'.
   27170 
   27171  -- Macro: SET_RATIO
   27172      The threshold of number of scalar move insns, _below_ which a
   27173      sequence of insns should be generated to set memory to a constant
   27174      value, instead of a block set insn or a library call.  Increasing
   27175      the value will always make code faster, but eventually incurs high
   27176      cost in increased code size.
   27177 
   27178      If you don't define this, it defaults to the value of `MOVE_RATIO'.
   27179 
   27180  -- Macro: SET_BY_PIECES_P (SIZE, ALIGNMENT)
   27181      A C expression used to determine whether `store_by_pieces' will be
   27182      used to set a chunk of memory to a constant value, or whether some
   27183      other mechanism will be used.  Used by `__builtin_memset' when
   27184      storing values other than constant zero.  Defaults to 1 if
   27185      `move_by_pieces_ninsns' returns less than `SET_RATIO'.
   27186 
   27187  -- Macro: STORE_BY_PIECES_P (SIZE, ALIGNMENT)
   27188      A C expression used to determine whether `store_by_pieces' will be
   27189      used to set a chunk of memory to a constant string value, or
   27190      whether some other mechanism will be used.  Used by
   27191      `__builtin_strcpy' when called with a constant source string.
   27192      Defaults to 1 if `move_by_pieces_ninsns' returns less than
   27193      `MOVE_RATIO'.
   27194 
   27195  -- Macro: USE_LOAD_POST_INCREMENT (MODE)
   27196      A C expression used to determine whether a load postincrement is a
   27197      good thing to use for a given mode.  Defaults to the value of
   27198      `HAVE_POST_INCREMENT'.
   27199 
   27200  -- Macro: USE_LOAD_POST_DECREMENT (MODE)
   27201      A C expression used to determine whether a load postdecrement is a
   27202      good thing to use for a given mode.  Defaults to the value of
   27203      `HAVE_POST_DECREMENT'.
   27204 
   27205  -- Macro: USE_LOAD_PRE_INCREMENT (MODE)
   27206      A C expression used to determine whether a load preincrement is a
   27207      good thing to use for a given mode.  Defaults to the value of
   27208      `HAVE_PRE_INCREMENT'.
   27209 
   27210  -- Macro: USE_LOAD_PRE_DECREMENT (MODE)
   27211      A C expression used to determine whether a load predecrement is a
   27212      good thing to use for a given mode.  Defaults to the value of
   27213      `HAVE_PRE_DECREMENT'.
   27214 
   27215  -- Macro: USE_STORE_POST_INCREMENT (MODE)
   27216      A C expression used to determine whether a store postincrement is
   27217      a good thing to use for a given mode.  Defaults to the value of
   27218      `HAVE_POST_INCREMENT'.
   27219 
   27220  -- Macro: USE_STORE_POST_DECREMENT (MODE)
   27221      A C expression used to determine whether a store postdecrement is
   27222      a good thing to use for a given mode.  Defaults to the value of
   27223      `HAVE_POST_DECREMENT'.
   27224 
   27225  -- Macro: USE_STORE_PRE_INCREMENT (MODE)
   27226      This macro is used to determine whether a store preincrement is a
   27227      good thing to use for a given mode.  Defaults to the value of
   27228      `HAVE_PRE_INCREMENT'.
   27229 
   27230  -- Macro: USE_STORE_PRE_DECREMENT (MODE)
   27231      This macro is used to determine whether a store predecrement is a
   27232      good thing to use for a given mode.  Defaults to the value of
   27233      `HAVE_PRE_DECREMENT'.
   27234 
   27235  -- Macro: NO_FUNCTION_CSE
   27236      Define this macro if it is as good or better to call a constant
   27237      function address than to call an address kept in a register.
   27238 
   27239  -- Macro: RANGE_TEST_NON_SHORT_CIRCUIT
   27240      Define this macro if a non-short-circuit operation produced by
   27241      `fold_range_test ()' is optimal.  This macro defaults to true if
   27242      `BRANCH_COST' is greater than or equal to the value 2.
   27243 
   27244  -- Target Hook: bool TARGET_RTX_COSTS (rtx X, int CODE, int
   27245           OUTER_CODE, int *TOTAL)
   27246      This target hook describes the relative costs of RTL expressions.
   27247 
   27248      The cost may depend on the precise form of the expression, which is
   27249      available for examination in X, and the rtx code of the expression
   27250      in which it is contained, found in OUTER_CODE.  CODE is the
   27251      expression code--redundant, since it can be obtained with
   27252      `GET_CODE (X)'.
   27253 
   27254      In implementing this hook, you can use the construct
   27255      `COSTS_N_INSNS (N)' to specify a cost equal to N fast instructions.
   27256 
   27257      On entry to the hook, `*TOTAL' contains a default estimate for the
   27258      cost of the expression.  The hook should modify this value as
   27259      necessary.  Traditionally, the default costs are `COSTS_N_INSNS
   27260      (5)' for multiplications, `COSTS_N_INSNS (7)' for division and
   27261      modulus operations, and `COSTS_N_INSNS (1)' for all other
   27262      operations.
   27263 
   27264      When optimizing for code size, i.e. when `optimize_size' is
   27265      nonzero, this target hook should be used to estimate the relative
   27266      size cost of an expression, again relative to `COSTS_N_INSNS'.
   27267 
   27268      The hook returns true when all subexpressions of X have been
   27269      processed, and false when `rtx_cost' should recurse.
   27270 
   27271  -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS)
   27272      This hook computes the cost of an addressing mode that contains
   27273      ADDRESS.  If not defined, the cost is computed from the ADDRESS
   27274      expression and the `TARGET_RTX_COST' hook.
   27275 
   27276      For most CISC machines, the default cost is a good approximation
   27277      of the true cost of the addressing mode.  However, on RISC
   27278      machines, all instructions normally have the same length and
   27279      execution time.  Hence all addresses will have equal costs.
   27280 
   27281      In cases where more than one form of an address is known, the form
   27282      with the lowest cost will be used.  If multiple forms have the
   27283      same, lowest, cost, the one that is the most complex will be used.
   27284 
   27285      For example, suppose an address that is equal to the sum of a
   27286      register and a constant is used twice in the same basic block.
   27287      When this macro is not defined, the address will be computed in a
   27288      register and memory references will be indirect through that
   27289      register.  On machines where the cost of the addressing mode
   27290      containing the sum is no higher than that of a simple indirect
   27291      reference, this will produce an additional instruction and
   27292      possibly require an additional register.  Proper specification of
   27293      this macro eliminates this overhead for such machines.
   27294 
   27295      This hook is never called with an invalid address.
   27296 
   27297      On machines where an address involving more than one register is as
   27298      cheap as an address computation involving only one register,
   27299      defining `TARGET_ADDRESS_COST' to reflect this can cause two
   27300      registers to be live over a region of code where only one would
   27301      have been if `TARGET_ADDRESS_COST' were not defined in that
   27302      manner.  This effect should be considered in the definition of
   27303      this macro.  Equivalent costs should probably only be given to
   27304      addresses with different numbers of registers on machines with
   27305      lots of registers.
   27306 
   27307 
   27308 File: gccint.info,  Node: Scheduling,  Next: Sections,  Prev: Costs,  Up: Target Macros
   27309 
   27310 15.18 Adjusting the Instruction Scheduler
   27311 =========================================
   27312 
   27313 The instruction scheduler may need a fair amount of machine-specific
   27314 adjustment in order to produce good code.  GCC provides several target
   27315 hooks for this purpose.  It is usually enough to define just a few of
   27316 them: try the first ones in this list first.
   27317 
   27318  -- Target Hook: int TARGET_SCHED_ISSUE_RATE (void)
   27319      This hook returns the maximum number of instructions that can ever
   27320      issue at the same time on the target machine.  The default is one.
   27321      Although the insn scheduler can define itself the possibility of
   27322      issue an insn on the same cycle, the value can serve as an
   27323      additional constraint to issue insns on the same simulated
   27324      processor cycle (see hooks `TARGET_SCHED_REORDER' and
   27325      `TARGET_SCHED_REORDER2').  This value must be constant over the
   27326      entire compilation.  If you need it to vary depending on what the
   27327      instructions are, you must use `TARGET_SCHED_VARIABLE_ISSUE'.
   27328 
   27329  -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int
   27330           VERBOSE, rtx INSN, int MORE)
   27331      This hook is executed by the scheduler after it has scheduled an
   27332      insn from the ready list.  It should return the number of insns
   27333      which can still be issued in the current cycle.  The default is
   27334      `MORE - 1' for insns other than `CLOBBER' and `USE', which
   27335      normally are not counted against the issue rate.  You should
   27336      define this hook if some insns take more machine resources than
   27337      others, so that fewer insns can follow them in the same cycle.
   27338      FILE is either a null pointer, or a stdio stream to write any
   27339      debug output to.  VERBOSE is the verbose level provided by
   27340      `-fsched-verbose-N'.  INSN is the instruction that was scheduled.
   27341 
   27342  -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx INSN, rtx LINK, rtx
   27343           DEP_INSN, int COST)
   27344      This function corrects the value of COST based on the relationship
   27345      between INSN and DEP_INSN through the dependence LINK.  It should
   27346      return the new value.  The default is to make no adjustment to
   27347      COST.  This can be used for example to specify to the scheduler
   27348      using the traditional pipeline description that an output- or
   27349      anti-dependence does not incur the same cost as a data-dependence.
   27350      If the scheduler using the automaton based pipeline description,
   27351      the cost of anti-dependence is zero and the cost of
   27352      output-dependence is maximum of one and the difference of latency
   27353      times of the first and the second insns.  If these values are not
   27354      acceptable, you could use the hook to modify them too.  See also
   27355      *note Processor pipeline description::.
   27356 
   27357  -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx INSN, int
   27358           PRIORITY)
   27359      This hook adjusts the integer scheduling priority PRIORITY of
   27360      INSN.  It should return the new priority.  Increase the priority to
   27361      execute INSN earlier, reduce the priority to execute INSN later.
   27362      Do not define this hook if you do not need to adjust the
   27363      scheduling priorities of insns.
   27364 
   27365  -- Target Hook: int TARGET_SCHED_REORDER (FILE *FILE, int VERBOSE, rtx
   27366           *READY, int *N_READYP, int CLOCK)
   27367      This hook is executed by the scheduler after it has scheduled the
   27368      ready list, to allow the machine description to reorder it (for
   27369      example to combine two small instructions together on `VLIW'
   27370      machines).  FILE is either a null pointer, or a stdio stream to
   27371      write any debug output to.  VERBOSE is the verbose level provided
   27372      by `-fsched-verbose-N'.  READY is a pointer to the ready list of
   27373      instructions that are ready to be scheduled.  N_READYP is a
   27374      pointer to the number of elements in the ready list.  The scheduler
   27375      reads the ready list in reverse order, starting with
   27376      READY[*N_READYP-1] and going to READY[0].  CLOCK is the timer tick
   27377      of the scheduler.  You may modify the ready list and the number of
   27378      ready insns.  The return value is the number of insns that can
   27379      issue this cycle; normally this is just `issue_rate'.  See also
   27380      `TARGET_SCHED_REORDER2'.
   27381 
   27382  -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE,
   27383           rtx *READY, int *N_READY, CLOCK)
   27384      Like `TARGET_SCHED_REORDER', but called at a different time.  That
   27385      function is called whenever the scheduler starts a new cycle.
   27386      This one is called once per iteration over a cycle, immediately
   27387      after `TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list
   27388      and return the number of insns to be scheduled in the same cycle.
   27389      Defining this hook can be useful if there are frequent situations
   27390      where scheduling one insn causes other insns to become ready in
   27391      the same cycle.  These other insns can then be taken into account
   27392      properly.
   27393 
   27394  -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK (rtx
   27395           HEAD, rtx TAIL)
   27396      This hook is called after evaluation forward dependencies of insns
   27397      in chain given by two parameter values (HEAD and TAIL
   27398      correspondingly) but before insns scheduling of the insn chain.
   27399      For example, it can be used for better insn classification if it
   27400      requires analysis of dependencies.  This hook can use backward and
   27401      forward dependencies of the insn scheduler because they are already
   27402      calculated.
   27403 
   27404  -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int
   27405           MAX_READY)
   27406      This hook is executed by the scheduler at the beginning of each
   27407      block of instructions that are to be scheduled.  FILE is either a
   27408      null pointer, or a stdio stream to write any debug output to.
   27409      VERBOSE is the verbose level provided by `-fsched-verbose-N'.
   27410      MAX_READY is the maximum number of insns in the current scheduling
   27411      region that can be live at the same time.  This can be used to
   27412      allocate scratch space if it is needed, e.g. by
   27413      `TARGET_SCHED_REORDER'.
   27414 
   27415  -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE)
   27416      This hook is executed by the scheduler at the end of each block of
   27417      instructions that are to be scheduled.  It can be used to perform
   27418      cleanup of any actions done by the other scheduling hooks.  FILE
   27419      is either a null pointer, or a stdio stream to write any debug
   27420      output to.  VERBOSE is the verbose level provided by
   27421      `-fsched-verbose-N'.
   27422 
   27423  -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int
   27424           VERBOSE, int OLD_MAX_UID)
   27425      This hook is executed by the scheduler after function level
   27426      initializations.  FILE is either a null pointer, or a stdio stream
   27427      to write any debug output to.  VERBOSE is the verbose level
   27428      provided by `-fsched-verbose-N'.  OLD_MAX_UID is the maximum insn
   27429      uid when scheduling begins.
   27430 
   27431  -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int
   27432           VERBOSE)
   27433      This is the cleanup hook corresponding to
   27434      `TARGET_SCHED_INIT_GLOBAL'.  FILE is either a null pointer, or a
   27435      stdio stream to write any debug output to.  VERBOSE is the verbose
   27436      level provided by `-fsched-verbose-N'.
   27437 
   27438  -- Target Hook: int TARGET_SCHED_DFA_PRE_CYCLE_INSN (void)
   27439      The hook returns an RTL insn.  The automaton state used in the
   27440      pipeline hazard recognizer is changed as if the insn were scheduled
   27441      when the new simulated processor cycle starts.  Usage of the hook
   27442      may simplify the automaton pipeline description for some VLIW
   27443      processors.  If the hook is defined, it is used only for the
   27444      automaton based pipeline description.  The default is not to
   27445      change the state when the new simulated processor cycle starts.
   27446 
   27447  -- Target Hook: void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void)
   27448      The hook can be used to initialize data used by the previous hook.
   27449 
   27450  -- Target Hook: int TARGET_SCHED_DFA_POST_CYCLE_INSN (void)
   27451      The hook is analogous to `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used
   27452      to changed the state as if the insn were scheduled when the new
   27453      simulated processor cycle finishes.
   27454 
   27455  -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void)
   27456      The hook is analogous to `TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but
   27457      used to initialize data used by the previous hook.
   27458 
   27459  -- Target Hook: void TARGET_SCHED_DFA_PRE_CYCLE_ADVANCE (void)
   27460      The hook to notify target that the current simulated cycle is
   27461      about to finish.  The hook is analogous to
   27462      `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used to change the state in
   27463      more complicated situations - e.g., when advancing state on a
   27464      single insn is not enough.
   27465 
   27466  -- Target Hook: void TARGET_SCHED_DFA_POST_CYCLE_ADVANCE (void)
   27467      The hook to notify target that new simulated cycle has just
   27468      started.  The hook is analogous to
   27469      `TARGET_SCHED_DFA_POST_CYCLE_INSN' but used to change the state in
   27470      more complicated situations - e.g., when advancing state on a
   27471      single insn is not enough.
   27472 
   27473  -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
   27474           (void)
   27475      This hook controls better choosing an insn from the ready insn
   27476      queue for the DFA-based insn scheduler.  Usually the scheduler
   27477      chooses the first insn from the queue.  If the hook returns a
   27478      positive value, an additional scheduler code tries all
   27479      permutations of `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
   27480      ()' subsequent ready insns to choose an insn whose issue will
   27481      result in maximal number of issued insns on the same cycle.  For
   27482      the VLIW processor, the code could actually solve the problem of
   27483      packing simple insns into the VLIW insn.  Of course, if the rules
   27484      of VLIW packing are described in the automaton.
   27485 
   27486      This code also could be used for superscalar RISC processors.  Let
   27487      us consider a superscalar RISC processor with 3 pipelines.  Some
   27488      insns can be executed in pipelines A or B, some insns can be
   27489      executed only in pipelines B or C, and one insn can be executed in
   27490      pipeline B.  The processor may issue the 1st insn into A and the
   27491      2nd one into B.  In this case, the 3rd insn will wait for freeing B
   27492      until the next cycle.  If the scheduler issues the 3rd insn the
   27493      first, the processor could issue all 3 insns per cycle.
   27494 
   27495      Actually this code demonstrates advantages of the automaton based
   27496      pipeline hazard recognizer.  We try quickly and easy many insn
   27497      schedules to choose the best one.
   27498 
   27499      The default is no multipass scheduling.
   27500 
   27501  -- Target Hook: int
   27502 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD (rtx)
   27503      This hook controls what insns from the ready insn queue will be
   27504      considered for the multipass insn scheduling.  If the hook returns
   27505      zero for insn passed as the parameter, the insn will be not chosen
   27506      to be issued.
   27507 
   27508      The default is that any ready insns can be chosen to be issued.
   27509 
   27510  -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *, int, rtx, int,
   27511           int, int *)
   27512      This hook is called by the insn scheduler before issuing insn
   27513      passed as the third parameter on given cycle.  If the hook returns
   27514      nonzero, the insn is not issued on given processors cycle.
   27515      Instead of that, the processor cycle is advanced.  If the value
   27516      passed through the last parameter is zero, the insn ready queue is
   27517      not sorted on the new cycle start as usually.  The first parameter
   27518      passes file for debugging output.  The second one passes the
   27519      scheduler verbose level of the debugging output.  The forth and
   27520      the fifth parameter values are correspondingly processor cycle on
   27521      which the previous insn has been issued and the current processor
   27522      cycle.
   27523 
   27524  -- Target Hook: bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct dep_def
   27525           *_DEP, int COST, int DISTANCE)
   27526      This hook is used to define which dependences are considered
   27527      costly by the target, so costly that it is not advisable to
   27528      schedule the insns that are involved in the dependence too close
   27529      to one another.  The parameters to this hook are as follows:  The
   27530      first parameter _DEP is the dependence being evaluated.  The
   27531      second parameter COST is the cost of the dependence, and the third
   27532      parameter DISTANCE is the distance in cycles between the two insns.
   27533      The hook returns `true' if considering the distance between the two
   27534      insns the dependence between them is considered costly by the
   27535      target, and `false' otherwise.
   27536 
   27537      Defining this hook can be useful in multiple-issue out-of-order
   27538      machines, where (a) it's practically hopeless to predict the
   27539      actual data/resource delays, however: (b) there's a better chance
   27540      to predict the actual grouping that will be formed, and (c)
   27541      correctly emulating the grouping can be very important.  In such
   27542      targets one may want to allow issuing dependent insns closer to
   27543      one another--i.e., closer than the dependence distance;  however,
   27544      not in cases of "costly dependences", which this hooks allows to
   27545      define.
   27546 
   27547  -- Target Hook: void TARGET_SCHED_H_I_D_EXTENDED (void)
   27548      This hook is called by the insn scheduler after emitting a new
   27549      instruction to the instruction stream.  The hook notifies a target
   27550      backend to extend its per instruction data structures.
   27551 
   27552  -- Target Hook: int TARGET_SCHED_SPECULATE_INSN (rtx INSN, int
   27553           REQUEST, rtx *NEW_PAT)
   27554      This hook is called by the insn scheduler when INSN has only
   27555      speculative dependencies and therefore can be scheduled
   27556      speculatively.  The hook is used to check if the pattern of INSN
   27557      has a speculative version and, in case of successful check, to
   27558      generate that speculative pattern.  The hook should return 1, if
   27559      the instruction has a speculative form, or -1, if it doesn't.
   27560      REQUEST describes the type of requested speculation.  If the
   27561      return value equals 1 then NEW_PAT is assigned the generated
   27562      speculative pattern.
   27563 
   27564  -- Target Hook: int TARGET_SCHED_NEEDS_BLOCK_P (rtx INSN)
   27565      This hook is called by the insn scheduler during generation of
   27566      recovery code for INSN.  It should return nonzero, if the
   27567      corresponding check instruction should branch to recovery code, or
   27568      zero otherwise.
   27569 
   27570  -- Target Hook: rtx TARGET_SCHED_GEN_CHECK (rtx INSN, rtx LABEL, int
   27571           MUTATE_P)
   27572      This hook is called by the insn scheduler to generate a pattern
   27573      for recovery check instruction.  If MUTATE_P is zero, then INSN is
   27574      a speculative instruction for which the check should be generated.
   27575      LABEL is either a label of a basic block, where recovery code
   27576      should be emitted, or a null pointer, when requested check doesn't
   27577      branch to recovery code (a simple check).  If MUTATE_P is nonzero,
   27578      then a pattern for a branchy check corresponding to a simple check
   27579      denoted by INSN should be generated.  In this case LABEL can't be
   27580      null.
   27581 
   27582  -- Target Hook: int
   27583 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC (rtx INSN)
   27584      This hook is used as a workaround for
   27585      `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD' not being
   27586      called on the first instruction of the ready list.  The hook is
   27587      used to discard speculative instruction that stand first in the
   27588      ready list from being scheduled on the current cycle.  For
   27589      non-speculative instructions, the hook should always return
   27590      nonzero.  For example, in the ia64 backend the hook is used to
   27591      cancel data speculative insns when the ALAT table is nearly full.
   27592 
   27593  -- Target Hook: void TARGET_SCHED_SET_SCHED_FLAGS (unsigned int
   27594           *FLAGS, spec_info_t SPEC_INFO)
   27595      This hook is used by the insn scheduler to find out what features
   27596      should be enabled/used.  FLAGS initially may have either the
   27597      SCHED_RGN or SCHED_EBB bit set.  This denotes the scheduler pass
   27598      for which the data should be provided.  The target backend should
   27599      modify FLAGS by modifying the bits corresponding to the following
   27600      features: USE_DEPS_LIST, USE_GLAT, DETACH_LIFE_INFO, and
   27601      DO_SPECULATION.  For the DO_SPECULATION feature an additional
   27602      structure SPEC_INFO should be filled by the target.  The structure
   27603      describes speculation types that can be used in the scheduler.
   27604 
   27605  -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G)
   27606      This hook is called by the swing modulo scheduler to calculate a
   27607      resource-based lower bound which is based on the resources
   27608      available in the machine and the resources required by each
   27609      instruction.  The target backend can use G to calculate such
   27610      bound.  A very simple lower bound will be used in case this hook
   27611      is not implemented: the total number of instructions divided by
   27612      the issue rate.
   27613 
   27614 
   27615 File: gccint.info,  Node: Sections,  Next: PIC,  Prev: Scheduling,  Up: Target Macros
   27616 
   27617 15.19 Dividing the Output into Sections (Texts, Data, ...)
   27618 ==========================================================
   27619 
   27620 An object file is divided into sections containing different types of
   27621 data.  In the most common case, there are three sections: the "text
   27622 section", which holds instructions and read-only data; the "data
   27623 section", which holds initialized writable data; and the "bss section",
   27624 which holds uninitialized data.  Some systems have other kinds of
   27625 sections.
   27626 
   27627  `varasm.c' provides several well-known sections, such as
   27628 `text_section', `data_section' and `bss_section'.  The normal way of
   27629 controlling a `FOO_section' variable is to define the associated
   27630 `FOO_SECTION_ASM_OP' macro, as described below.  The macros are only
   27631 read once, when `varasm.c' initializes itself, so their values must be
   27632 run-time constants.  They may however depend on command-line flags.
   27633 
   27634  _Note:_ Some run-time files, such `crtstuff.c', also make use of the
   27635 `FOO_SECTION_ASM_OP' macros, and expect them to be string literals.
   27636 
   27637  Some assemblers require a different string to be written every time a
   27638 section is selected.  If your assembler falls into this category, you
   27639 should define the `TARGET_ASM_INIT_SECTIONS' hook and use
   27640 `get_unnamed_section' to set up the sections.
   27641 
   27642  You must always create a `text_section', either by defining
   27643 `TEXT_SECTION_ASM_OP' or by initializing `text_section' in
   27644 `TARGET_ASM_INIT_SECTIONS'.  The same is true of `data_section' and
   27645 `DATA_SECTION_ASM_OP'.  If you do not create a distinct
   27646 `readonly_data_section', the default is to reuse `text_section'.
   27647 
   27648  All the other `varasm.c' sections are optional, and are null if the
   27649 target does not provide them.
   27650 
   27651  -- Macro: TEXT_SECTION_ASM_OP
   27652      A C expression whose value is a string, including spacing,
   27653      containing the assembler operation that should precede
   27654      instructions and read-only data.  Normally `"\t.text"' is right.
   27655 
   27656  -- Macro: HOT_TEXT_SECTION_NAME
   27657      If defined, a C string constant for the name of the section
   27658      containing most frequently executed functions of the program.  If
   27659      not defined, GCC will provide a default definition if the target
   27660      supports named sections.
   27661 
   27662  -- Macro: UNLIKELY_EXECUTED_TEXT_SECTION_NAME
   27663      If defined, a C string constant for the name of the section
   27664      containing unlikely executed functions in the program.
   27665 
   27666  -- Macro: DATA_SECTION_ASM_OP
   27667      A C expression whose value is a string, including spacing,
   27668      containing the assembler operation to identify the following data
   27669      as writable initialized data.  Normally `"\t.data"' is right.
   27670 
   27671  -- Macro: SDATA_SECTION_ASM_OP
   27672      If defined, a C expression whose value is a string, including
   27673      spacing, containing the assembler operation to identify the
   27674      following data as initialized, writable small data.
   27675 
   27676  -- Macro: READONLY_DATA_SECTION_ASM_OP
   27677      A C expression whose value is a string, including spacing,
   27678      containing the assembler operation to identify the following data
   27679      as read-only initialized data.
   27680 
   27681  -- Macro: BSS_SECTION_ASM_OP
   27682      If defined, a C expression whose value is a string, including
   27683      spacing, containing the assembler operation to identify the
   27684      following data as uninitialized global data.  If not defined, and
   27685      neither `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined,
   27686      uninitialized global data will be output in the data section if
   27687      `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be
   27688      used.
   27689 
   27690  -- Macro: SBSS_SECTION_ASM_OP
   27691      If defined, a C expression whose value is a string, including
   27692      spacing, containing the assembler operation to identify the
   27693      following data as uninitialized, writable small data.
   27694 
   27695  -- Macro: INIT_SECTION_ASM_OP
   27696      If defined, a C expression whose value is a string, including
   27697      spacing, containing the assembler operation to identify the
   27698      following data as initialization code.  If not defined, GCC will
   27699      assume such a section does not exist.  This section has no
   27700      corresponding `init_section' variable; it is used entirely in
   27701      runtime code.
   27702 
   27703  -- Macro: FINI_SECTION_ASM_OP
   27704      If defined, a C expression whose value is a string, including
   27705      spacing, containing the assembler operation to identify the
   27706      following data as finalization code.  If not defined, GCC will
   27707      assume such a section does not exist.  This section has no
   27708      corresponding `fini_section' variable; it is used entirely in
   27709      runtime code.
   27710 
   27711  -- Macro: INIT_ARRAY_SECTION_ASM_OP
   27712      If defined, a C expression whose value is a string, including
   27713      spacing, containing the assembler operation to identify the
   27714      following data as part of the `.init_array' (or equivalent)
   27715      section.  If not defined, GCC will assume such a section does not
   27716      exist.  Do not define both this macro and `INIT_SECTION_ASM_OP'.
   27717 
   27718  -- Macro: FINI_ARRAY_SECTION_ASM_OP
   27719      If defined, a C expression whose value is a string, including
   27720      spacing, containing the assembler operation to identify the
   27721      following data as part of the `.fini_array' (or equivalent)
   27722      section.  If not defined, GCC will assume such a section does not
   27723      exist.  Do not define both this macro and `FINI_SECTION_ASM_OP'.
   27724 
   27725  -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION)
   27726      If defined, an ASM statement that switches to a different section
   27727      via SECTION_OP, calls FUNCTION, and switches back to the text
   27728      section.  This is used in `crtstuff.c' if `INIT_SECTION_ASM_OP' or
   27729      `FINI_SECTION_ASM_OP' to calls to initialization and finalization
   27730      functions from the init and fini sections.  By default, this macro
   27731      uses a simple function call.  Some ports need hand-crafted
   27732      assembly code to avoid dependencies on registers initialized in
   27733      the function prologue or to ensure that constant pools don't end
   27734      up too far way in the text section.
   27735 
   27736  -- Macro: TARGET_LIBGCC_SDATA_SECTION
   27737      If defined, a string which names the section into which small
   27738      variables defined in crtstuff and libgcc should go.  This is useful
   27739      when the target has options for optimizing access to small data,
   27740      and you want the crtstuff and libgcc routines to be conservative
   27741      in what they expect of your application yet liberal in what your
   27742      application expects.  For example, for targets with a `.sdata'
   27743      section (like MIPS), you could compile crtstuff with `-G 0' so
   27744      that it doesn't require small data support from your application,
   27745      but use this macro to put small data into `.sdata' so that your
   27746      application can access these variables whether it uses small data
   27747      or not.
   27748 
   27749  -- Macro: FORCE_CODE_SECTION_ALIGN
   27750      If defined, an ASM statement that aligns a code section to some
   27751      arbitrary boundary.  This is used to force all fragments of the
   27752      `.init' and `.fini' sections to have to same alignment and thus
   27753      prevent the linker from having to add any padding.
   27754 
   27755  -- Macro: JUMP_TABLES_IN_TEXT_SECTION
   27756      Define this macro to be an expression with a nonzero value if jump
   27757      tables (for `tablejump' insns) should be output in the text
   27758      section, along with the assembler instructions.  Otherwise, the
   27759      readonly data section is used.
   27760 
   27761      This macro is irrelevant if there is no separate readonly data
   27762      section.
   27763 
   27764  -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void)
   27765      Define this hook if you need to do something special to set up the
   27766      `varasm.c' sections, or if your target has some special sections
   27767      of its own that you need to create.
   27768 
   27769      GCC calls this hook after processing the command line, but before
   27770      writing any assembly code, and before calling any of the
   27771      section-returning hooks described below.
   27772 
   27773  -- Target Hook: TARGET_ASM_RELOC_RW_MASK (void)
   27774      Return a mask describing how relocations should be treated when
   27775      selecting sections.  Bit 1 should be set if global relocations
   27776      should be placed in a read-write section; bit 0 should be set if
   27777      local relocations should be placed in a read-write section.
   27778 
   27779      The default version of this function returns 3 when `-fpic' is in
   27780      effect, and 0 otherwise.  The hook is typically redefined when the
   27781      target cannot support (some kinds of) dynamic relocations in
   27782      read-only sections even in executables.
   27783 
   27784  -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int
   27785           RELOC, unsigned HOST_WIDE_INT ALIGN)
   27786      Return the section into which EXP should be placed.  You can
   27787      assume that EXP is either a `VAR_DECL' node or a constant of some
   27788      sort.  RELOC indicates whether the initial value of EXP requires
   27789      link-time relocations.  Bit 0 is set when variable contains local
   27790      relocations only, while bit 1 is set for global relocations.
   27791      ALIGN is the constant alignment in bits.
   27792 
   27793      The default version of this function takes care of putting
   27794      read-only variables in `readonly_data_section'.
   27795 
   27796      See also USE_SELECT_SECTION_FOR_FUNCTIONS.
   27797 
   27798  -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS
   27799      Define this macro if you wish TARGET_ASM_SELECT_SECTION to be
   27800      called for `FUNCTION_DECL's as well as for variables and constants.
   27801 
   27802      In the case of a `FUNCTION_DECL', RELOC will be zero if the
   27803      function has been determined to be likely to be called, and
   27804      nonzero if it is unlikely to be called.
   27805 
   27806  -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC)
   27807      Build up a unique section name, expressed as a `STRING_CST' node,
   27808      and assign it to `DECL_SECTION_NAME (DECL)'.  As with
   27809      `TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial
   27810      value of EXP requires link-time relocations.
   27811 
   27812      The default version of this function appends the symbol name to the
   27813      ELF section name that would normally be used for the symbol.  For
   27814      example, the function `foo' would be placed in `.text.foo'.
   27815      Whatever the actual target object format, this is often good
   27816      enough.
   27817 
   27818  -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree
   27819           DECL)
   27820      Return the readonly data section associated with
   27821      `DECL_SECTION_NAME (DECL)'.  The default version of this function
   27822      selects `.gnu.linkonce.r.name' if the function's section is
   27823      `.gnu.linkonce.t.name', `.rodata.name' if function is in
   27824      `.text.name', and the normal readonly-data section otherwise.
   27825 
   27826  -- Target Hook: section * TARGET_ASM_SELECT_RTX_SECTION (enum
   27827           machine_mode MODE, rtx X, unsigned HOST_WIDE_INT ALIGN)
   27828      Return the section into which a constant X, of mode MODE, should
   27829      be placed.  You can assume that X is some kind of constant in RTL.
   27830      The argument MODE is redundant except in the case of a
   27831      `const_int' rtx.  ALIGN is the constant alignment in bits.
   27832 
   27833      The default version of this function takes care of putting symbolic
   27834      constants in `flag_pic' mode in `data_section' and everything else
   27835      in `readonly_data_section'.
   27836 
   27837  -- Target Hook: void TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL,
   27838           tree ID)
   27839      Define this hook if you need to postprocess the assembler name
   27840      generated by target-independent code.  The ID provided to this
   27841      hook will be the computed name (e.g., the macro `DECL_NAME' of the
   27842      DECL in C, or the mangled name of the DECL in C++).  The return
   27843      value of the hook is an `IDENTIFIER_NODE' for the appropriate
   27844      mangled name on your target system.  The default implementation of
   27845      this hook just returns the ID provided.
   27846 
   27847  -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL,
   27848           int NEW_DECL_P)
   27849      Define this hook if references to a symbol or a constant must be
   27850      treated differently depending on something about the variable or
   27851      function named by the symbol (such as what section it is in).
   27852 
   27853      The hook is executed immediately after rtl has been created for
   27854      DECL, which may be a variable or function declaration or an entry
   27855      in the constant pool.  In either case, RTL is the rtl in question.
   27856      Do _not_ use `DECL_RTL (DECL)' in this hook; that field may not
   27857      have been initialized yet.
   27858 
   27859      In the case of a constant, it is safe to assume that the rtl is a
   27860      `mem' whose address is a `symbol_ref'.  Most decls will also have
   27861      this form, but that is not guaranteed.  Global register variables,
   27862      for instance, will have a `reg' for their rtl.  (Normally the
   27863      right thing to do with such unusual rtl is leave it alone.)
   27864 
   27865      The NEW_DECL_P argument will be true if this is the first time
   27866      that `TARGET_ENCODE_SECTION_INFO' has been invoked on this decl.
   27867      It will be false for subsequent invocations, which will happen for
   27868      duplicate declarations.  Whether or not anything must be done for
   27869      the duplicate declaration depends on whether the hook examines
   27870      `DECL_ATTRIBUTES'.  NEW_DECL_P is always true when the hook is
   27871      called for a constant.
   27872 
   27873      The usual thing for this hook to do is to record flags in the
   27874      `symbol_ref', using `SYMBOL_REF_FLAG' or `SYMBOL_REF_FLAGS'.
   27875      Historically, the name string was modified if it was necessary to
   27876      encode more than one bit of information, but this practice is now
   27877      discouraged; use `SYMBOL_REF_FLAGS'.
   27878 
   27879      The default definition of this hook, `default_encode_section_info'
   27880      in `varasm.c', sets a number of commonly-useful bits in
   27881      `SYMBOL_REF_FLAGS'.  Check whether the default does what you need
   27882      before overriding it.
   27883 
   27884  -- Target Hook: const char *TARGET_STRIP_NAME_ENCODING (const char
   27885           *name)
   27886      Decode NAME and return the real name part, sans the characters
   27887      that `TARGET_ENCODE_SECTION_INFO' may have added.
   27888 
   27889  -- Target Hook: bool TARGET_IN_SMALL_DATA_P (tree EXP)
   27890      Returns true if EXP should be placed into a "small data" section.
   27891      The default version of this hook always returns false.
   27892 
   27893  -- Variable: Target Hook bool TARGET_HAVE_SRODATA_SECTION
   27894      Contains the value true if the target places read-only "small
   27895      data" into a separate section.  The default value is false.
   27896 
   27897  -- Target Hook: bool TARGET_BINDS_LOCAL_P (tree EXP)
   27898      Returns true if EXP names an object for which name resolution
   27899      rules must resolve to the current "module" (dynamic shared library
   27900      or executable image).
   27901 
   27902      The default version of this hook implements the name resolution
   27903      rules for ELF, which has a looser model of global name binding
   27904      than other currently supported object file formats.
   27905 
   27906  -- Variable: Target Hook bool TARGET_HAVE_TLS
   27907      Contains the value true if the target supports thread-local
   27908      storage.  The default value is false.
   27909 
   27910 
   27911 File: gccint.info,  Node: PIC,  Next: Assembler Format,  Prev: Sections,  Up: Target Macros
   27912 
   27913 15.20 Position Independent Code
   27914 ===============================
   27915 
   27916 This section describes macros that help implement generation of position
   27917 independent code.  Simply defining these macros is not enough to
   27918 generate valid PIC; you must also add support to the macros
   27919 `GO_IF_LEGITIMATE_ADDRESS' and `PRINT_OPERAND_ADDRESS', as well as
   27920 `LEGITIMIZE_ADDRESS'.  You must modify the definition of `movsi' to do
   27921 something appropriate when the source operand contains a symbolic
   27922 address.  You may also need to alter the handling of switch statements
   27923 so that they use relative addresses.
   27924 
   27925  -- Macro: PIC_OFFSET_TABLE_REGNUM
   27926      The register number of the register used to address a table of
   27927      static data addresses in memory.  In some cases this register is
   27928      defined by a processor's "application binary interface" (ABI).
   27929      When this macro is defined, RTL is generated for this register
   27930      once, as with the stack pointer and frame pointer registers.  If
   27931      this macro is not defined, it is up to the machine-dependent files
   27932      to allocate such a register (if necessary).  Note that this
   27933      register must be fixed when in use (e.g.  when `flag_pic' is true).
   27934 
   27935  -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
   27936      Define this macro if the register defined by
   27937      `PIC_OFFSET_TABLE_REGNUM' is clobbered by calls.  Do not define
   27938      this macro if `PIC_OFFSET_TABLE_REGNUM' is not defined.
   27939 
   27940  -- Macro: LEGITIMATE_PIC_OPERAND_P (X)
   27941      A C expression that is nonzero if X is a legitimate immediate
   27942      operand on the target machine when generating position independent
   27943      code.  You can assume that X satisfies `CONSTANT_P', so you need
   27944      not check this.  You can also assume FLAG_PIC is true, so you need
   27945      not check it either.  You need not define this macro if all
   27946      constants (including `SYMBOL_REF') can be immediate operands when
   27947      generating position independent code.
   27948 
   27949 
   27950 File: gccint.info,  Node: Assembler Format,  Next: Debugging Info,  Prev: PIC,  Up: Target Macros
   27951 
   27952 15.21 Defining the Output Assembler Language
   27953 ============================================
   27954 
   27955 This section describes macros whose principal purpose is to describe how
   27956 to write instructions in assembler language--rather than what the
   27957 instructions do.
   27958 
   27959 * Menu:
   27960 
   27961 * File Framework::       Structural information for the assembler file.
   27962 * Data Output::          Output of constants (numbers, strings, addresses).
   27963 * Uninitialized Data::   Output of uninitialized variables.
   27964 * Label Output::         Output and generation of labels.
   27965 * Initialization::       General principles of initialization
   27966 			   and termination routines.
   27967 * Macros for Initialization::
   27968 			 Specific macros that control the handling of
   27969 			   initialization and termination routines.
   27970 * Instruction Output::   Output of actual instructions.
   27971 * Dispatch Tables::      Output of jump tables.
   27972 * Exception Region Output:: Output of exception region code.
   27973 * Alignment Output::     Pseudo ops for alignment and skipping data.
   27974 
   27975 
   27976 File: gccint.info,  Node: File Framework,  Next: Data Output,  Up: Assembler Format
   27977 
   27978 15.21.1 The Overall Framework of an Assembler File
   27979 --------------------------------------------------
   27980 
   27981 This describes the overall framework of an assembly file.
   27982 
   27983  -- Target Hook: void TARGET_ASM_FILE_START ()
   27984      Output to `asm_out_file' any text which the assembler expects to
   27985      find at the beginning of a file.  The default behavior is
   27986      controlled by two flags, documented below.  Unless your target's
   27987      assembler is quite unusual, if you override the default, you
   27988      should call `default_file_start' at some point in your target
   27989      hook.  This lets other target files rely on these variables.
   27990 
   27991  -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF
   27992      If this flag is true, the text of the macro `ASM_APP_OFF' will be
   27993      printed as the very first line in the assembly file, unless
   27994      `-fverbose-asm' is in effect.  (If that macro has been defined to
   27995      the empty string, this variable has no effect.)  With the normal
   27996      definition of `ASM_APP_OFF', the effect is to notify the GNU
   27997      assembler that it need not bother stripping comments or extra
   27998      whitespace from its input.  This allows it to work a bit faster.
   27999 
   28000      The default is false.  You should not set it to true unless you
   28001      have verified that your port does not generate any extra
   28002      whitespace or comments that will cause GAS to issue errors in
   28003      NO_APP mode.
   28004 
   28005  -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE
   28006      If this flag is true, `output_file_directive' will be called for
   28007      the primary source file, immediately after printing `ASM_APP_OFF'
   28008      (if that is enabled).  Most ELF assemblers expect this to be done.
   28009      The default is false.
   28010 
   28011  -- Target Hook: void TARGET_ASM_FILE_END ()
   28012      Output to `asm_out_file' any text which the assembler expects to
   28013      find at the end of a file.  The default is to output nothing.
   28014 
   28015  -- Function: void file_end_indicate_exec_stack ()
   28016      Some systems use a common convention, the `.note.GNU-stack'
   28017      special section, to indicate whether or not an object file relies
   28018      on the stack being executable.  If your system uses this
   28019      convention, you should define `TARGET_ASM_FILE_END' to this
   28020      function.  If you need to do other things in that hook, have your
   28021      hook function call this function.
   28022 
   28023  -- Macro: ASM_COMMENT_START
   28024      A C string constant describing how to begin a comment in the target
   28025      assembler language.  The compiler assumes that the comment will
   28026      end at the end of the line.
   28027 
   28028  -- Macro: ASM_APP_ON
   28029      A C string constant for text to be output before each `asm'
   28030      statement or group of consecutive ones.  Normally this is
   28031      `"#APP"', which is a comment that has no effect on most assemblers
   28032      but tells the GNU assembler that it must check the lines that
   28033      follow for all valid assembler constructs.
   28034 
   28035  -- Macro: ASM_APP_OFF
   28036      A C string constant for text to be output after each `asm'
   28037      statement or group of consecutive ones.  Normally this is
   28038      `"#NO_APP"', which tells the GNU assembler to resume making the
   28039      time-saving assumptions that are valid for ordinary compiler
   28040      output.
   28041 
   28042  -- Macro: ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME)
   28043      A C statement to output COFF information or DWARF debugging
   28044      information which indicates that filename NAME is the current
   28045      source file to the stdio stream STREAM.
   28046 
   28047      This macro need not be defined if the standard form of output for
   28048      the file format in use is appropriate.
   28049 
   28050  -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING)
   28051      A C statement to output the string STRING to the stdio stream
   28052      STREAM.  If you do not call the function `output_quoted_string' in
   28053      your config files, GCC will only call it to output filenames to
   28054      the assembler source.  So you can use it to canonicalize the format
   28055      of the filename using this macro.
   28056 
   28057  -- Macro: ASM_OUTPUT_IDENT (STREAM, STRING)
   28058      A C statement to output something to the assembler file to handle a
   28059      `#ident' directive containing the text STRING.  If this macro is
   28060      not defined, nothing is output for a `#ident' directive.
   28061 
   28062  -- Target Hook: void TARGET_ASM_NAMED_SECTION (const char *NAME,
   28063           unsigned int FLAGS, unsigned int ALIGN)
   28064      Output assembly directives to switch to section NAME.  The section
   28065      should have attributes as specified by FLAGS, which is a bit mask
   28066      of the `SECTION_*' flags defined in `output.h'.  If ALIGN is
   28067      nonzero, it contains an alignment in bytes to be used for the
   28068      section, otherwise some target default should be used.  Only
   28069      targets that must specify an alignment within the section
   28070      directive need pay attention to ALIGN - we will still use
   28071      `ASM_OUTPUT_ALIGN'.
   28072 
   28073  -- Target Hook: bool TARGET_HAVE_NAMED_SECTIONS
   28074      This flag is true if the target supports
   28075      `TARGET_ASM_NAMED_SECTION'.
   28076 
   28077  -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS
   28078      This flag is true if we can create zeroed data by switching to a
   28079      BSS section and then using `ASM_OUTPUT_SKIP' to allocate the space.
   28080      This is true on most ELF targets.
   28081 
   28082  -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL,
   28083           const char *NAME, int RELOC)
   28084      Choose a set of section attributes for use by
   28085      `TARGET_ASM_NAMED_SECTION' based on a variable or function decl, a
   28086      section name, and whether or not the declaration's initializer may
   28087      contain runtime relocations.  DECL may be  null, in which case
   28088      read-write data should be assumed.
   28089 
   28090      The default version of this function handles choosing code vs data,
   28091      read-only vs read-write data, and `flag_pic'.  You should only
   28092      need to override this if your target has special flags that might
   28093      be set via `__attribute__'.
   28094 
   28095  -- Target Hook: int TARGET_ASM_RECORD_GCC_SWITCHES (print_switch_type
   28096           TYPE, const char * TEXT)
   28097      Provides the target with the ability to record the gcc command line
   28098      switches that have been passed to the compiler, and options that
   28099      are enabled.  The TYPE argument specifies what is being recorded.
   28100      It can take the following values:
   28101 
   28102     `SWITCH_TYPE_PASSED'
   28103           TEXT is a command line switch that has been set by the user.
   28104 
   28105     `SWITCH_TYPE_ENABLED'
   28106           TEXT is an option which has been enabled.  This might be as a
   28107           direct result of a command line switch, or because it is
   28108           enabled by default or because it has been enabled as a side
   28109           effect of a different command line switch.  For example, the
   28110           `-O2' switch enables various different individual
   28111           optimization passes.
   28112 
   28113     `SWITCH_TYPE_DESCRIPTIVE'
   28114           TEXT is either NULL or some descriptive text which should be
   28115           ignored.  If TEXT is NULL then it is being used to warn the
   28116           target hook that either recording is starting or ending.  The
   28117           first time TYPE is SWITCH_TYPE_DESCRIPTIVE and TEXT is NULL,
   28118           the warning is for start up and the second time the warning
   28119           is for wind down.  This feature is to allow the target hook
   28120           to make any necessary preparations before it starts to record
   28121           switches and to perform any necessary tidying up after it has
   28122           finished recording switches.
   28123 
   28124     `SWITCH_TYPE_LINE_START'
   28125           This option can be ignored by this target hook.
   28126 
   28127     `SWITCH_TYPE_LINE_END'
   28128           This option can be ignored by this target hook.
   28129 
   28130      The hook's return value must be zero.  Other return values may be
   28131      supported in the future.
   28132 
   28133      By default this hook is set to NULL, but an example implementation
   28134      is provided for ELF based targets.  Called ELF_RECORD_GCC_SWITCHES,
   28135      it records the switches as ASCII text inside a new, string
   28136      mergeable section in the assembler output file.  The name of the
   28137      new section is provided by the
   28138      `TARGET_ASM_RECORD_GCC_SWITCHES_SECTION' target hook.
   28139 
   28140  -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION
   28141      This is the name of the section that will be created by the example
   28142      ELF implementation of the `TARGET_ASM_RECORD_GCC_SWITCHES' target
   28143      hook.
   28144 
   28145 
   28146 File: gccint.info,  Node: Data Output,  Next: Uninitialized Data,  Prev: File Framework,  Up: Assembler Format
   28147 
   28148 15.21.2 Output of Data
   28149 ----------------------
   28150 
   28151  -- Target Hook: const char * TARGET_ASM_BYTE_OP
   28152  -- Target Hook: const char * TARGET_ASM_ALIGNED_HI_OP
   28153  -- Target Hook: const char * TARGET_ASM_ALIGNED_SI_OP
   28154  -- Target Hook: const char * TARGET_ASM_ALIGNED_DI_OP
   28155  -- Target Hook: const char * TARGET_ASM_ALIGNED_TI_OP
   28156  -- Target Hook: const char * TARGET_ASM_UNALIGNED_HI_OP
   28157  -- Target Hook: const char * TARGET_ASM_UNALIGNED_SI_OP
   28158  -- Target Hook: const char * TARGET_ASM_UNALIGNED_DI_OP
   28159  -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP
   28160      These hooks specify assembly directives for creating certain kinds
   28161      of integer object.  The `TARGET_ASM_BYTE_OP' directive creates a
   28162      byte-sized object, the `TARGET_ASM_ALIGNED_HI_OP' one creates an
   28163      aligned two-byte object, and so on.  Any of the hooks may be
   28164      `NULL', indicating that no suitable directive is available.
   28165 
   28166      The compiler will print these strings at the start of a new line,
   28167      followed immediately by the object's initial value.  In most cases,
   28168      the string should contain a tab, a pseudo-op, and then another tab.
   28169 
   28170  -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int
   28171           ALIGNED_P)
   28172      The `assemble_integer' function uses this hook to output an
   28173      integer object.  X is the object's value, SIZE is its size in
   28174      bytes and ALIGNED_P indicates whether it is aligned.  The function
   28175      should return `true' if it was able to output the object.  If it
   28176      returns false, `assemble_integer' will try to split the object
   28177      into smaller parts.
   28178 
   28179      The default implementation of this hook will use the
   28180      `TARGET_ASM_BYTE_OP' family of strings, returning `false' when the
   28181      relevant string is `NULL'.
   28182 
   28183  -- Macro: OUTPUT_ADDR_CONST_EXTRA (STREAM, X, FAIL)
   28184      A C statement to recognize RTX patterns that `output_addr_const'
   28185      can't deal with, and output assembly code to STREAM corresponding
   28186      to the pattern X.  This may be used to allow machine-dependent
   28187      `UNSPEC's to appear within constants.
   28188 
   28189      If `OUTPUT_ADDR_CONST_EXTRA' fails to recognize a pattern, it must
   28190      `goto fail', so that a standard error message is printed.  If it
   28191      prints an error message itself, by calling, for example,
   28192      `output_operand_lossage', it may just complete normally.
   28193 
   28194  -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN)
   28195      A C statement to output to the stdio stream STREAM an assembler
   28196      instruction to assemble a string constant containing the LEN bytes
   28197      at PTR.  PTR will be a C expression of type `char *' and LEN a C
   28198      expression of type `int'.
   28199 
   28200      If the assembler has a `.ascii' pseudo-op as found in the Berkeley
   28201      Unix assembler, do not define the macro `ASM_OUTPUT_ASCII'.
   28202 
   28203  -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N)
   28204      A C statement to output word N of a function descriptor for DECL.
   28205      This must be defined if `TARGET_VTABLE_USES_DESCRIPTORS' is
   28206      defined, and is otherwise unused.
   28207 
   28208  -- Macro: CONSTANT_POOL_BEFORE_FUNCTION
   28209      You may define this macro as a C expression.  You should define the
   28210      expression to have a nonzero value if GCC should output the
   28211      constant pool for a function before the code for the function, or
   28212      a zero value if GCC should output the constant pool after the
   28213      function.  If you do not define this macro, the usual case, GCC
   28214      will output the constant pool before the function.
   28215 
   28216  -- Macro: ASM_OUTPUT_POOL_PROLOGUE (FILE, FUNNAME, FUNDECL, SIZE)
   28217      A C statement to output assembler commands to define the start of
   28218      the constant pool for a function.  FUNNAME is a string giving the
   28219      name of the function.  Should the return type of the function be
   28220      required, it can be obtained via FUNDECL.  SIZE is the size, in
   28221      bytes, of the constant pool that will be written immediately after
   28222      this call.
   28223 
   28224      If no constant-pool prefix is required, the usual case, this macro
   28225      need not be defined.
   28226 
   28227  -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN,
   28228           LABELNO, JUMPTO)
   28229      A C statement (with or without semicolon) to output a constant in
   28230      the constant pool, if it needs special treatment.  (This macro
   28231      need not do anything for RTL expressions that can be output
   28232      normally.)
   28233 
   28234      The argument FILE is the standard I/O stream to output the
   28235      assembler code on.  X is the RTL expression for the constant to
   28236      output, and MODE is the machine mode (in case X is a `const_int').
   28237      ALIGN is the required alignment for the value X; you should
   28238      output an assembler directive to force this much alignment.
   28239 
   28240      The argument LABELNO is a number to use in an internal label for
   28241      the address of this pool entry.  The definition of this macro is
   28242      responsible for outputting the label definition at the proper
   28243      place.  Here is how to do this:
   28244 
   28245           `(*targetm.asm_out.internal_label)' (FILE, "LC", LABELNO);
   28246 
   28247      When you output a pool entry specially, you should end with a
   28248      `goto' to the label JUMPTO.  This will prevent the same pool entry
   28249      from being output a second time in the usual manner.
   28250 
   28251      You need not define this macro if it would do nothing.
   28252 
   28253  -- Macro: ASM_OUTPUT_POOL_EPILOGUE (FILE FUNNAME FUNDECL SIZE)
   28254      A C statement to output assembler commands to at the end of the
   28255      constant pool for a function.  FUNNAME is a string giving the name
   28256      of the function.  Should the return type of the function be
   28257      required, you can obtain it via FUNDECL.  SIZE is the size, in
   28258      bytes, of the constant pool that GCC wrote immediately before this
   28259      call.
   28260 
   28261      If no constant-pool epilogue is required, the usual case, you need
   28262      not define this macro.
   28263 
   28264  -- Macro: IS_ASM_LOGICAL_LINE_SEPARATOR (C, STR)
   28265      Define this macro as a C expression which is nonzero if C is used
   28266      as a logical line separator by the assembler.  STR points to the
   28267      position in the string where C was found; this can be used if a
   28268      line separator uses multiple characters.
   28269 
   28270      If you do not define this macro, the default is that only the
   28271      character `;' is treated as a logical line separator.
   28272 
   28273  -- Target Hook: const char * TARGET_ASM_OPEN_PAREN
   28274  -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN
   28275      These target hooks are C string constants, describing the syntax
   28276      in the assembler for grouping arithmetic expressions.  If not
   28277      overridden, they default to normal parentheses, which is correct
   28278      for most assemblers.
   28279 
   28280  These macros are provided by `real.h' for writing the definitions of
   28281 `ASM_OUTPUT_DOUBLE' and the like:
   28282 
   28283  -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L)
   28284  -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L)
   28285  -- Macro: REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L)
   28286  -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L)
   28287  -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L)
   28288  -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L)
   28289      These translate X, of type `REAL_VALUE_TYPE', to the target's
   28290      floating point representation, and store its bit pattern in the
   28291      variable L.  For `REAL_VALUE_TO_TARGET_SINGLE' and
   28292      `REAL_VALUE_TO_TARGET_DECIMAL32', this variable should be a simple
   28293      `long int'.  For the others, it should be an array of `long int'.
   28294      The number of elements in this array is determined by the size of
   28295      the desired target floating point data type: 32 bits of it go in
   28296      each `long int' array element.  Each array element holds 32 bits
   28297      of the result, even if `long int' is wider than 32 bits on the
   28298      host machine.
   28299 
   28300      The array element values are designed so that you can print them
   28301      out using `fprintf' in the order they should appear in the target
   28302      machine's memory.
   28303 
   28304 
   28305 File: gccint.info,  Node: Uninitialized Data,  Next: Label Output,  Prev: Data Output,  Up: Assembler Format
   28306 
   28307 15.21.3 Output of Uninitialized Variables
   28308 -----------------------------------------
   28309 
   28310 Each of the macros in this section is used to do the whole job of
   28311 outputting a single uninitialized variable.
   28312 
   28313  -- Macro: ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED)
   28314      A C statement (sans semicolon) to output to the stdio stream
   28315      STREAM the assembler definition of a common-label named NAME whose
   28316      size is SIZE bytes.  The variable ROUNDED is the size rounded up
   28317      to whatever alignment the caller wants.
   28318 
   28319      Use the expression `assemble_name (STREAM, NAME)' to output the
   28320      name itself; before and after that, output the additional
   28321      assembler syntax for defining the name, and a newline.
   28322 
   28323      This macro controls how the assembler definitions of uninitialized
   28324      common global variables are output.
   28325 
   28326  -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT)
   28327      Like `ASM_OUTPUT_COMMON' except takes the required alignment as a
   28328      separate, explicit argument.  If you define this macro, it is used
   28329      in place of `ASM_OUTPUT_COMMON', and gives you more flexibility in
   28330      handling the required alignment of the variable.  The alignment is
   28331      specified as the number of bits.
   28332 
   28333  -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE,
   28334           ALIGNMENT)
   28335      Like `ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable
   28336      to be output, if there is one, or `NULL_TREE' if there is no
   28337      corresponding variable.  If you define this macro, GCC will use it
   28338      in place of both `ASM_OUTPUT_COMMON' and
   28339      `ASM_OUTPUT_ALIGNED_COMMON'.  Define this macro when you need to
   28340      see the variable's decl in order to chose what to output.
   28341 
   28342  -- Macro: ASM_OUTPUT_BSS (STREAM, DECL, NAME, SIZE, ROUNDED)
   28343      A C statement (sans semicolon) to output to the stdio stream
   28344      STREAM the assembler definition of uninitialized global DECL named
   28345      NAME whose size is SIZE bytes.  The variable ROUNDED is the size
   28346      rounded up to whatever alignment the caller wants.
   28347 
   28348      Try to use function `asm_output_bss' defined in `varasm.c' when
   28349      defining this macro.  If unable, use the expression `assemble_name
   28350      (STREAM, NAME)' to output the name itself; before and after that,
   28351      output the additional assembler syntax for defining the name, and
   28352      a newline.
   28353 
   28354      There are two ways of handling global BSS.  One is to define either
   28355      this macro or its aligned counterpart, `ASM_OUTPUT_ALIGNED_BSS'.
   28356      The other is to have `TARGET_ASM_SELECT_SECTION' return a
   28357      switchable BSS section (*note
   28358      TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::).  You do not need to do
   28359      both.
   28360 
   28361      Some languages do not have `common' data, and require a non-common
   28362      form of global BSS in order to handle uninitialized globals
   28363      efficiently.  C++ is one example of this.  However, if the target
   28364      does not support global BSS, the front end may choose to make
   28365      globals common in order to save space in the object file.
   28366 
   28367  -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT)
   28368      Like `ASM_OUTPUT_BSS' except takes the required alignment as a
   28369      separate, explicit argument.  If you define this macro, it is used
   28370      in place of `ASM_OUTPUT_BSS', and gives you more flexibility in
   28371      handling the required alignment of the variable.  The alignment is
   28372      specified as the number of bits.
   28373 
   28374      Try to use function `asm_output_aligned_bss' defined in file
   28375      `varasm.c' when defining this macro.
   28376 
   28377  -- Macro: ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED)
   28378      A C statement (sans semicolon) to output to the stdio stream
   28379      STREAM the assembler definition of a local-common-label named NAME
   28380      whose size is SIZE bytes.  The variable ROUNDED is the size
   28381      rounded up to whatever alignment the caller wants.
   28382 
   28383      Use the expression `assemble_name (STREAM, NAME)' to output the
   28384      name itself; before and after that, output the additional
   28385      assembler syntax for defining the name, and a newline.
   28386 
   28387      This macro controls how the assembler definitions of uninitialized
   28388      static variables are output.
   28389 
   28390  -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT)
   28391      Like `ASM_OUTPUT_LOCAL' except takes the required alignment as a
   28392      separate, explicit argument.  If you define this macro, it is used
   28393      in place of `ASM_OUTPUT_LOCAL', and gives you more flexibility in
   28394      handling the required alignment of the variable.  The alignment is
   28395      specified as the number of bits.
   28396 
   28397  -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE,
   28398           ALIGNMENT)
   28399      Like `ASM_OUTPUT_ALIGNED_DECL' except that DECL of the variable to
   28400      be output, if there is one, or `NULL_TREE' if there is no
   28401      corresponding variable.  If you define this macro, GCC will use it
   28402      in place of both `ASM_OUTPUT_DECL' and `ASM_OUTPUT_ALIGNED_DECL'.
   28403      Define this macro when you need to see the variable's decl in
   28404      order to chose what to output.
   28405 
   28406 
   28407 File: gccint.info,  Node: Label Output,  Next: Initialization,  Prev: Uninitialized Data,  Up: Assembler Format
   28408 
   28409 15.21.4 Output and Generation of Labels
   28410 ---------------------------------------
   28411 
   28412 This is about outputting labels.
   28413 
   28414  -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME)
   28415      A C statement (sans semicolon) to output to the stdio stream
   28416      STREAM the assembler definition of a label named NAME.  Use the
   28417      expression `assemble_name (STREAM, NAME)' to output the name
   28418      itself; before and after that, output the additional assembler
   28419      syntax for defining the name, and a newline.  A default definition
   28420      of this macro is provided which is correct for most systems.
   28421 
   28422  -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME)
   28423      Identical to `ASM_OUTPUT_LABEL', except that NAME is known to
   28424      refer to a compiler-generated label.  The default definition uses
   28425      `assemble_name_raw', which is like `assemble_name' except that it
   28426      is more efficient.
   28427 
   28428  -- Macro: SIZE_ASM_OP
   28429      A C string containing the appropriate assembler directive to
   28430      specify the size of a symbol, without any arguments.  On systems
   28431      that use ELF, the default (in `config/elfos.h') is `"\t.size\t"';
   28432      on other systems, the default is not to define this macro.
   28433 
   28434      Define this macro only if it is correct to use the default
   28435      definitions of `ASM_OUTPUT_SIZE_DIRECTIVE' and
   28436      `ASM_OUTPUT_MEASURED_SIZE' for your system.  If you need your own
   28437      custom definitions of those macros, or if you do not need explicit
   28438      symbol sizes at all, do not define this macro.
   28439 
   28440  -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE)
   28441      A C statement (sans semicolon) to output to the stdio stream
   28442      STREAM a directive telling the assembler that the size of the
   28443      symbol NAME is SIZE.  SIZE is a `HOST_WIDE_INT'.  If you define
   28444      `SIZE_ASM_OP', a default definition of this macro is provided.
   28445 
   28446  -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME)
   28447      A C statement (sans semicolon) to output to the stdio stream
   28448      STREAM a directive telling the assembler to calculate the size of
   28449      the symbol NAME by subtracting its address from the current
   28450      address.
   28451 
   28452      If you define `SIZE_ASM_OP', a default definition of this macro is
   28453      provided.  The default assumes that the assembler recognizes a
   28454      special `.' symbol as referring to the current address, and can
   28455      calculate the difference between this and another symbol.  If your
   28456      assembler does not recognize `.' or cannot do calculations with
   28457      it, you will need to redefine `ASM_OUTPUT_MEASURED_SIZE' to use
   28458      some other technique.
   28459 
   28460  -- Macro: TYPE_ASM_OP
   28461      A C string containing the appropriate assembler directive to
   28462      specify the type of a symbol, without any arguments.  On systems
   28463      that use ELF, the default (in `config/elfos.h') is `"\t.type\t"';
   28464      on other systems, the default is not to define this macro.
   28465 
   28466      Define this macro only if it is correct to use the default
   28467      definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
   28468      need your own custom definition of this macro, or if you do not
   28469      need explicit symbol types at all, do not define this macro.
   28470 
   28471  -- Macro: TYPE_OPERAND_FMT
   28472      A C string which specifies (using `printf' syntax) the format of
   28473      the second operand to `TYPE_ASM_OP'.  On systems that use ELF, the
   28474      default (in `config/elfos.h') is `"@%s"'; on other systems, the
   28475      default is not to define this macro.
   28476 
   28477      Define this macro only if it is correct to use the default
   28478      definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
   28479      need your own custom definition of this macro, or if you do not
   28480      need explicit symbol types at all, do not define this macro.
   28481 
   28482  -- Macro: ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, TYPE)
   28483      A C statement (sans semicolon) to output to the stdio stream
   28484      STREAM a directive telling the assembler that the type of the
   28485      symbol NAME is TYPE.  TYPE is a C string; currently, that string
   28486      is always either `"function"' or `"object"', but you should not
   28487      count on this.
   28488 
   28489      If you define `TYPE_ASM_OP' and `TYPE_OPERAND_FMT', a default
   28490      definition of this macro is provided.
   28491 
   28492  -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)
   28493      A C statement (sans semicolon) to output to the stdio stream
   28494      STREAM any text necessary for declaring the name NAME of a
   28495      function which is being defined.  This macro is responsible for
   28496      outputting the label definition (perhaps using
   28497      `ASM_OUTPUT_LABEL').  The argument DECL is the `FUNCTION_DECL'
   28498      tree node representing the function.
   28499 
   28500      If this macro is not defined, then the function name is defined in
   28501      the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
   28502 
   28503      You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
   28504      of this macro.
   28505 
   28506  -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL)
   28507      A C statement (sans semicolon) to output to the stdio stream
   28508      STREAM any text necessary for declaring the size of a function
   28509      which is being defined.  The argument NAME is the name of the
   28510      function.  The argument DECL is the `FUNCTION_DECL' tree node
   28511      representing the function.
   28512 
   28513      If this macro is not defined, then the function size is not
   28514      defined.
   28515 
   28516      You may wish to use `ASM_OUTPUT_MEASURED_SIZE' in the definition
   28517      of this macro.
   28518 
   28519  -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL)
   28520      A C statement (sans semicolon) to output to the stdio stream
   28521      STREAM any text necessary for declaring the name NAME of an
   28522      initialized variable which is being defined.  This macro must
   28523      output the label definition (perhaps using `ASM_OUTPUT_LABEL').
   28524      The argument DECL is the `VAR_DECL' tree node representing the
   28525      variable.
   28526 
   28527      If this macro is not defined, then the variable name is defined in
   28528      the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
   28529 
   28530      You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' and/or
   28531      `ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro.
   28532 
   28533  -- Macro: ASM_DECLARE_CONSTANT_NAME (STREAM, NAME, EXP, SIZE)
   28534      A C statement (sans semicolon) to output to the stdio stream
   28535      STREAM any text necessary for declaring the name NAME of a
   28536      constant which is being defined.  This macro is responsible for
   28537      outputting the label definition (perhaps using
   28538      `ASM_OUTPUT_LABEL').  The argument EXP is the value of the
   28539      constant, and SIZE is the size of the constant in bytes.  NAME
   28540      will be an internal label.
   28541 
   28542      If this macro is not defined, then the NAME is defined in the
   28543      usual manner as a label (by means of `ASM_OUTPUT_LABEL').
   28544 
   28545      You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
   28546      of this macro.
   28547 
   28548  -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME)
   28549      A C statement (sans semicolon) to output to the stdio stream
   28550      STREAM any text necessary for claiming a register REGNO for a
   28551      global variable DECL with name NAME.
   28552 
   28553      If you don't define this macro, that is equivalent to defining it
   28554      to do nothing.
   28555 
   28556  -- Macro: ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND)
   28557      A C statement (sans semicolon) to finish up declaring a variable
   28558      name once the compiler has processed its initializer fully and
   28559      thus has had a chance to determine the size of an array when
   28560      controlled by an initializer.  This is used on systems where it's
   28561      necessary to declare something about the size of the object.
   28562 
   28563      If you don't define this macro, that is equivalent to defining it
   28564      to do nothing.
   28565 
   28566      You may wish to use `ASM_OUTPUT_SIZE_DIRECTIVE' and/or
   28567      `ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro.
   28568 
   28569  -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const
   28570           char *NAME)
   28571      This target hook is a function to output to the stdio stream
   28572      STREAM some commands that will make the label NAME global; that
   28573      is, available for reference from other files.
   28574 
   28575      The default implementation relies on a proper definition of
   28576      `GLOBAL_ASM_OP'.
   28577 
   28578  -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM,
   28579           tree DECL)
   28580      This target hook is a function to output to the stdio stream
   28581      STREAM some commands that will make the name associated with DECL
   28582      global; that is, available for reference from other files.
   28583 
   28584      The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL
   28585      target hook.
   28586 
   28587  -- Macro: ASM_WEAKEN_LABEL (STREAM, NAME)
   28588      A C statement (sans semicolon) to output to the stdio stream
   28589      STREAM some commands that will make the label NAME weak; that is,
   28590      available for reference from other files but only used if no other
   28591      definition is available.  Use the expression `assemble_name
   28592      (STREAM, NAME)' to output the name itself; before and after that,
   28593      output the additional assembler syntax for making that name weak,
   28594      and a newline.
   28595 
   28596      If you don't define this macro or `ASM_WEAKEN_DECL', GCC will not
   28597      support weak symbols and you should not define the `SUPPORTS_WEAK'
   28598      macro.
   28599 
   28600  -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE)
   28601      Combines (and replaces) the function of `ASM_WEAKEN_LABEL' and
   28602      `ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function
   28603      or variable decl.  If VALUE is not `NULL', this C statement should
   28604      output to the stdio stream STREAM assembler code which defines
   28605      (equates) the weak symbol NAME to have the value VALUE.  If VALUE
   28606      is `NULL', it should output commands to make NAME weak.
   28607 
   28608  -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE)
   28609      Outputs a directive that enables NAME to be used to refer to
   28610      symbol VALUE with weak-symbol semantics.  `decl' is the
   28611      declaration of `name'.
   28612 
   28613  -- Macro: SUPPORTS_WEAK
   28614      A C expression which evaluates to true if the target supports weak
   28615      symbols.
   28616 
   28617      If you don't define this macro, `defaults.h' provides a default
   28618      definition.  If either `ASM_WEAKEN_LABEL' or `ASM_WEAKEN_DECL' is
   28619      defined, the default definition is `1'; otherwise, it is `0'.
   28620      Define this macro if you want to control weak symbol support with
   28621      a compiler flag such as `-melf'.
   28622 
   28623  -- Macro: MAKE_DECL_ONE_ONLY (DECL)
   28624      A C statement (sans semicolon) to mark DECL to be emitted as a
   28625      public symbol such that extra copies in multiple translation units
   28626      will be discarded by the linker.  Define this macro if your object
   28627      file format provides support for this concept, such as the `COMDAT'
   28628      section flags in the Microsoft Windows PE/COFF format, and this
   28629      support requires changes to DECL, such as putting it in a separate
   28630      section.
   28631 
   28632  -- Macro: SUPPORTS_ONE_ONLY
   28633      A C expression which evaluates to true if the target supports
   28634      one-only semantics.
   28635 
   28636      If you don't define this macro, `varasm.c' provides a default
   28637      definition.  If `MAKE_DECL_ONE_ONLY' is defined, the default
   28638      definition is `1'; otherwise, it is `0'.  Define this macro if you
   28639      want to control one-only symbol support with a compiler flag, or if
   28640      setting the `DECL_ONE_ONLY' flag is enough to mark a declaration to
   28641      be emitted as one-only.
   28642 
   28643  -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, const
   28644           char *VISIBILITY)
   28645      This target hook is a function to output to ASM_OUT_FILE some
   28646      commands that will make the symbol(s) associated with DECL have
   28647      hidden, protected or internal visibility as specified by
   28648      VISIBILITY.
   28649 
   28650  -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC
   28651      A C expression that evaluates to true if the target's linker
   28652      expects that weak symbols do not appear in a static archive's
   28653      table of contents.  The default is `0'.
   28654 
   28655      Leaving weak symbols out of an archive's table of contents means
   28656      that, if a symbol will only have a definition in one translation
   28657      unit and will have undefined references from other translation
   28658      units, that symbol should not be weak.  Defining this macro to be
   28659      nonzero will thus have the effect that certain symbols that would
   28660      normally be weak (explicit template instantiations, and vtables
   28661      for polymorphic classes with noninline key methods) will instead
   28662      be nonweak.
   28663 
   28664      The C++ ABI requires this macro to be zero.  Define this macro for
   28665      targets where full C++ ABI compliance is impossible and where
   28666      linker restrictions require weak symbols to be left out of a
   28667      static archive's table of contents.
   28668 
   28669  -- Macro: ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME)
   28670      A C statement (sans semicolon) to output to the stdio stream
   28671      STREAM any text necessary for declaring the name of an external
   28672      symbol named NAME which is referenced in this compilation but not
   28673      defined.  The value of DECL is the tree node for the declaration.
   28674 
   28675      This macro need not be defined if it does not need to output
   28676      anything.  The GNU assembler and most Unix assemblers don't
   28677      require anything.
   28678 
   28679  -- Target Hook: void TARGET_ASM_EXTERNAL_LIBCALL (rtx SYMREF)
   28680      This target hook is a function to output to ASM_OUT_FILE an
   28681      assembler pseudo-op to declare a library function name external.
   28682      The name of the library function is given by SYMREF, which is a
   28683      `symbol_ref'.
   28684 
   28685  -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (tree DECL)
   28686      This target hook is a function to output to ASM_OUT_FILE an
   28687      assembler directive to annotate used symbol.  Darwin target use
   28688      .no_dead_code_strip directive.
   28689 
   28690  -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME)
   28691      A C statement (sans semicolon) to output to the stdio stream
   28692      STREAM a reference in assembler syntax to a label named NAME.
   28693      This should add `_' to the front of the name, if that is customary
   28694      on your operating system, as it is in most Berkeley Unix systems.
   28695      This macro is used in `assemble_name'.
   28696 
   28697  -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM)
   28698      A C statement (sans semicolon) to output a reference to
   28699      `SYMBOL_REF' SYM.  If not defined, `assemble_name' will be used to
   28700      output the name of the symbol.  This macro may be used to modify
   28701      the way a symbol is referenced depending on information encoded by
   28702      `TARGET_ENCODE_SECTION_INFO'.
   28703 
   28704  -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF)
   28705      A C statement (sans semicolon) to output a reference to BUF, the
   28706      result of `ASM_GENERATE_INTERNAL_LABEL'.  If not defined,
   28707      `assemble_name' will be used to output the name of the symbol.
   28708      This macro is not used by `output_asm_label', or the `%l'
   28709      specifier that calls it; the intention is that this macro should
   28710      be set when it is necessary to output a label differently when its
   28711      address is being taken.
   28712 
   28713  -- Target Hook: void TARGET_ASM_INTERNAL_LABEL (FILE *STREAM, const
   28714           char *PREFIX, unsigned long LABELNO)
   28715      A function to output to the stdio stream STREAM a label whose name
   28716      is made from the string PREFIX and the number LABELNO.
   28717 
   28718      It is absolutely essential that these labels be distinct from the
   28719      labels used for user-level functions and variables.  Otherwise,
   28720      certain programs will have name conflicts with internal labels.
   28721 
   28722      It is desirable to exclude internal labels from the symbol table
   28723      of the object file.  Most assemblers have a naming convention for
   28724      labels that should be excluded; on many systems, the letter `L' at
   28725      the beginning of a label has this effect.  You should find out what
   28726      convention your system uses, and follow it.
   28727 
   28728      The default version of this function utilizes
   28729      `ASM_GENERATE_INTERNAL_LABEL'.
   28730 
   28731  -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM)
   28732      A C statement to output to the stdio stream STREAM a debug info
   28733      label whose name is made from the string PREFIX and the number
   28734      NUM.  This is useful for VLIW targets, where debug info labels may
   28735      need to be treated differently than branch target labels.  On some
   28736      systems, branch target labels must be at the beginning of
   28737      instruction bundles, but debug info labels can occur in the middle
   28738      of instruction bundles.
   28739 
   28740      If this macro is not defined, then
   28741      `(*targetm.asm_out.internal_label)' will be used.
   28742 
   28743  -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)
   28744      A C statement to store into the string STRING a label whose name
   28745      is made from the string PREFIX and the number NUM.
   28746 
   28747      This string, when output subsequently by `assemble_name', should
   28748      produce the output that `(*targetm.asm_out.internal_label)' would
   28749      produce with the same PREFIX and NUM.
   28750 
   28751      If the string begins with `*', then `assemble_name' will output
   28752      the rest of the string unchanged.  It is often convenient for
   28753      `ASM_GENERATE_INTERNAL_LABEL' to use `*' in this way.  If the
   28754      string doesn't start with `*', then `ASM_OUTPUT_LABELREF' gets to
   28755      output the string, and may change it.  (Of course,
   28756      `ASM_OUTPUT_LABELREF' is also part of your machine description, so
   28757      you should know what it does on your machine.)
   28758 
   28759  -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)
   28760      A C expression to assign to OUTVAR (which is a variable of type
   28761      `char *') a newly allocated string made from the string NAME and
   28762      the number NUMBER, with some suitable punctuation added.  Use
   28763      `alloca' to get space for the string.
   28764 
   28765      The string will be used as an argument to `ASM_OUTPUT_LABELREF' to
   28766      produce an assembler label for an internal static variable whose
   28767      name is NAME.  Therefore, the string must be such as to result in
   28768      valid assembler code.  The argument NUMBER is different each time
   28769      this macro is executed; it prevents conflicts between
   28770      similarly-named internal static variables in different scopes.
   28771 
   28772      Ideally this string should not be a valid C identifier, to prevent
   28773      any conflict with the user's own symbols.  Most assemblers allow
   28774      periods or percent signs in assembler symbols; putting at least
   28775      one of these between the name and the number will suffice.
   28776 
   28777      If this macro is not defined, a default definition will be provided
   28778      which is correct for most systems.
   28779 
   28780  -- Macro: ASM_OUTPUT_DEF (STREAM, NAME, VALUE)
   28781      A C statement to output to the stdio stream STREAM assembler code
   28782      which defines (equates) the symbol NAME to have the value VALUE.
   28783 
   28784      If `SET_ASM_OP' is defined, a default definition is provided which
   28785      is correct for most systems.
   28786 
   28787  -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME,
   28788           DECL_OF_VALUE)
   28789      A C statement to output to the stdio stream STREAM assembler code
   28790      which defines (equates) the symbol whose tree node is DECL_OF_NAME
   28791      to have the value of the tree node DECL_OF_VALUE.  This macro will
   28792      be used in preference to `ASM_OUTPUT_DEF' if it is defined and if
   28793      the tree nodes are available.
   28794 
   28795      If `SET_ASM_OP' is defined, a default definition is provided which
   28796      is correct for most systems.
   28797 
   28798  -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE)
   28799      A C statement that evaluates to true if the assembler code which
   28800      defines (equates) the symbol whose tree node is DECL_OF_NAME to
   28801      have the value of the tree node DECL_OF_VALUE should be emitted
   28802      near the end of the current compilation unit.  The default is to
   28803      not defer output of defines.  This macro affects defines output by
   28804      `ASM_OUTPUT_DEF' and `ASM_OUTPUT_DEF_FROM_DECLS'.
   28805 
   28806  -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE)
   28807      A C statement to output to the stdio stream STREAM assembler code
   28808      which defines (equates) the weak symbol NAME to have the value
   28809      VALUE.  If VALUE is `NULL', it defines NAME as an undefined weak
   28810      symbol.
   28811 
   28812      Define this macro if the target only supports weak aliases; define
   28813      `ASM_OUTPUT_DEF' instead if possible.
   28814 
   28815  -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME,
   28816           SEL_NAME)
   28817      Define this macro to override the default assembler names used for
   28818      Objective-C methods.
   28819 
   28820      The default name is a unique method number followed by the name of
   28821      the class (e.g. `_1_Foo').  For methods in categories, the name of
   28822      the category is also included in the assembler name (e.g.
   28823      `_1_Foo_Bar').
   28824 
   28825      These names are safe on most systems, but make debugging difficult
   28826      since the method's selector is not present in the name.
   28827      Therefore, particular systems define other ways of computing names.
   28828 
   28829      BUF is an expression of type `char *' which gives you a buffer in
   28830      which to store the name; its length is as long as CLASS_NAME,
   28831      CAT_NAME and SEL_NAME put together, plus 50 characters extra.
   28832 
   28833      The argument IS_INST specifies whether the method is an instance
   28834      method or a class method; CLASS_NAME is the name of the class;
   28835      CAT_NAME is the name of the category (or `NULL' if the method is
   28836      not in a category); and SEL_NAME is the name of the selector.
   28837 
   28838      On systems where the assembler can handle quoted names, you can
   28839      use this macro to provide more human-readable names.
   28840 
   28841  -- Macro: ASM_DECLARE_CLASS_REFERENCE (STREAM, NAME)
   28842      A C statement (sans semicolon) to output to the stdio stream
   28843      STREAM commands to declare that the label NAME is an Objective-C
   28844      class reference.  This is only needed for targets whose linkers
   28845      have special support for NeXT-style runtimes.
   28846 
   28847  -- Macro: ASM_DECLARE_UNRESOLVED_REFERENCE (STREAM, NAME)
   28848      A C statement (sans semicolon) to output to the stdio stream
   28849      STREAM commands to declare that the label NAME is an unresolved
   28850      Objective-C class reference.  This is only needed for targets
   28851      whose linkers have special support for NeXT-style runtimes.
   28852 
   28853 
   28854 File: gccint.info,  Node: Initialization,  Next: Macros for Initialization,  Prev: Label Output,  Up: Assembler Format
   28855 
   28856 15.21.5 How Initialization Functions Are Handled
   28857 ------------------------------------------------
   28858 
   28859 The compiled code for certain languages includes "constructors" (also
   28860 called "initialization routines")--functions to initialize data in the
   28861 program when the program is started.  These functions need to be called
   28862 before the program is "started"--that is to say, before `main' is
   28863 called.
   28864 
   28865  Compiling some languages generates "destructors" (also called
   28866 "termination routines") that should be called when the program
   28867 terminates.
   28868 
   28869  To make the initialization and termination functions work, the compiler
   28870 must output something in the assembler code to cause those functions to
   28871 be called at the appropriate time.  When you port the compiler to a new
   28872 system, you need to specify how to do this.
   28873 
   28874  There are two major ways that GCC currently supports the execution of
   28875 initialization and termination functions.  Each way has two variants.
   28876 Much of the structure is common to all four variations.
   28877 
   28878  The linker must build two lists of these functions--a list of
   28879 initialization functions, called `__CTOR_LIST__', and a list of
   28880 termination functions, called `__DTOR_LIST__'.
   28881 
   28882  Each list always begins with an ignored function pointer (which may
   28883 hold 0, -1, or a count of the function pointers after it, depending on
   28884 the environment).  This is followed by a series of zero or more function
   28885 pointers to constructors (or destructors), followed by a function
   28886 pointer containing zero.
   28887 
   28888  Depending on the operating system and its executable file format,
   28889 either `crtstuff.c' or `libgcc2.c' traverses these lists at startup
   28890 time and exit time.  Constructors are called in reverse order of the
   28891 list; destructors in forward order.
   28892 
   28893  The best way to handle static constructors works only for object file
   28894 formats which provide arbitrarily-named sections.  A section is set
   28895 aside for a list of constructors, and another for a list of destructors.
   28896 Traditionally these are called `.ctors' and `.dtors'.  Each object file
   28897 that defines an initialization function also puts a word in the
   28898 constructor section to point to that function.  The linker accumulates
   28899 all these words into one contiguous `.ctors' section.  Termination
   28900 functions are handled similarly.
   28901 
   28902  This method will be chosen as the default by `target-def.h' if
   28903 `TARGET_ASM_NAMED_SECTION' is defined.  A target that does not support
   28904 arbitrary sections, but does support special designated constructor and
   28905 destructor sections may define `CTORS_SECTION_ASM_OP' and
   28906 `DTORS_SECTION_ASM_OP' to achieve the same effect.
   28907 
   28908  When arbitrary sections are available, there are two variants,
   28909 depending upon how the code in `crtstuff.c' is called.  On systems that
   28910 support a ".init" section which is executed at program startup, parts
   28911 of `crtstuff.c' are compiled into that section.  The program is linked
   28912 by the `gcc' driver like this:
   28913 
   28914      ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o
   28915 
   28916  The prologue of a function (`__init') appears in the `.init' section
   28917 of `crti.o'; the epilogue appears in `crtn.o'.  Likewise for the
   28918 function `__fini' in the ".fini" section.  Normally these files are
   28919 provided by the operating system or by the GNU C library, but are
   28920 provided by GCC for a few targets.
   28921 
   28922  The objects `crtbegin.o' and `crtend.o' are (for most targets)
   28923 compiled from `crtstuff.c'.  They contain, among other things, code
   28924 fragments within the `.init' and `.fini' sections that branch to
   28925 routines in the `.text' section.  The linker will pull all parts of a
   28926 section together, which results in a complete `__init' function that
   28927 invokes the routines we need at startup.
   28928 
   28929  To use this variant, you must define the `INIT_SECTION_ASM_OP' macro
   28930 properly.
   28931 
   28932  If no init section is available, when GCC compiles any function called
   28933 `main' (or more accurately, any function designated as a program entry
   28934 point by the language front end calling `expand_main_function'), it
   28935 inserts a procedure call to `__main' as the first executable code after
   28936 the function prologue.  The `__main' function is defined in `libgcc2.c'
   28937 and runs the global constructors.
   28938 
   28939  In file formats that don't support arbitrary sections, there are again
   28940 two variants.  In the simplest variant, the GNU linker (GNU `ld') and
   28941 an `a.out' format must be used.  In this case, `TARGET_ASM_CONSTRUCTOR'
   28942 is defined to produce a `.stabs' entry of type `N_SETT', referencing
   28943 the name `__CTOR_LIST__', and with the address of the void function
   28944 containing the initialization code as its value.  The GNU linker
   28945 recognizes this as a request to add the value to a "set"; the values
   28946 are accumulated, and are eventually placed in the executable as a
   28947 vector in the format described above, with a leading (ignored) count
   28948 and a trailing zero element.  `TARGET_ASM_DESTRUCTOR' is handled
   28949 similarly.  Since no init section is available, the absence of
   28950 `INIT_SECTION_ASM_OP' causes the compilation of `main' to call `__main'
   28951 as above, starting the initialization process.
   28952 
   28953  The last variant uses neither arbitrary sections nor the GNU linker.
   28954 This is preferable when you want to do dynamic linking and when using
   28955 file formats which the GNU linker does not support, such as `ECOFF'.  In
   28956 this case, `TARGET_HAVE_CTORS_DTORS' is false, initialization and
   28957 termination functions are recognized simply by their names.  This
   28958 requires an extra program in the linkage step, called `collect2'.  This
   28959 program pretends to be the linker, for use with GCC; it does its job by
   28960 running the ordinary linker, but also arranges to include the vectors of
   28961 initialization and termination functions.  These functions are called
   28962 via `__main' as described above.  In order to use this method,
   28963 `use_collect2' must be defined in the target in `config.gcc'.
   28964 
   28965  The following section describes the specific macros that control and
   28966 customize the handling of initialization and termination functions.
   28967 
   28968 
   28969 File: gccint.info,  Node: Macros for Initialization,  Next: Instruction Output,  Prev: Initialization,  Up: Assembler Format
   28970 
   28971 15.21.6 Macros Controlling Initialization Routines
   28972 --------------------------------------------------
   28973 
   28974 Here are the macros that control how the compiler handles initialization
   28975 and termination functions:
   28976 
   28977  -- Macro: INIT_SECTION_ASM_OP
   28978      If defined, a C string constant, including spacing, for the
   28979      assembler operation to identify the following data as
   28980      initialization code.  If not defined, GCC will assume such a
   28981      section does not exist.  When you are using special sections for
   28982      initialization and termination functions, this macro also controls
   28983      how `crtstuff.c' and `libgcc2.c' arrange to run the initialization
   28984      functions.
   28985 
   28986  -- Macro: HAS_INIT_SECTION
   28987      If defined, `main' will not call `__main' as described above.
   28988      This macro should be defined for systems that control start-up code
   28989      on a symbol-by-symbol basis, such as OSF/1, and should not be
   28990      defined explicitly for systems that support `INIT_SECTION_ASM_OP'.
   28991 
   28992  -- Macro: LD_INIT_SWITCH
   28993      If defined, a C string constant for a switch that tells the linker
   28994      that the following symbol is an initialization routine.
   28995 
   28996  -- Macro: LD_FINI_SWITCH
   28997      If defined, a C string constant for a switch that tells the linker
   28998      that the following symbol is a finalization routine.
   28999 
   29000  -- Macro: COLLECT_SHARED_INIT_FUNC (STREAM, FUNC)
   29001      If defined, a C statement that will write a function that can be
   29002      automatically called when a shared library is loaded.  The function
   29003      should call FUNC, which takes no arguments.  If not defined, and
   29004      the object format requires an explicit initialization function,
   29005      then a function called `_GLOBAL__DI' will be generated.
   29006 
   29007      This function and the following one are used by collect2 when
   29008      linking a shared library that needs constructors or destructors,
   29009      or has DWARF2 exception tables embedded in the code.
   29010 
   29011  -- Macro: COLLECT_SHARED_FINI_FUNC (STREAM, FUNC)
   29012      If defined, a C statement that will write a function that can be
   29013      automatically called when a shared library is unloaded.  The
   29014      function should call FUNC, which takes no arguments.  If not
   29015      defined, and the object format requires an explicit finalization
   29016      function, then a function called `_GLOBAL__DD' will be generated.
   29017 
   29018  -- Macro: INVOKE__main
   29019      If defined, `main' will call `__main' despite the presence of
   29020      `INIT_SECTION_ASM_OP'.  This macro should be defined for systems
   29021      where the init section is not actually run automatically, but is
   29022      still useful for collecting the lists of constructors and
   29023      destructors.
   29024 
   29025  -- Macro: SUPPORTS_INIT_PRIORITY
   29026      If nonzero, the C++ `init_priority' attribute is supported and the
   29027      compiler should emit instructions to control the order of
   29028      initialization of objects.  If zero, the compiler will issue an
   29029      error message upon encountering an `init_priority' attribute.
   29030 
   29031  -- Target Hook: bool TARGET_HAVE_CTORS_DTORS
   29032      This value is true if the target supports some "native" method of
   29033      collecting constructors and destructors to be run at startup and
   29034      exit.  It is false if we must use `collect2'.
   29035 
   29036  -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY)
   29037      If defined, a function that outputs assembler code to arrange to
   29038      call the function referenced by SYMBOL at initialization time.
   29039 
   29040      Assume that SYMBOL is a `SYMBOL_REF' for a function taking no
   29041      arguments and with no return value.  If the target supports
   29042      initialization priorities, PRIORITY is a value between 0 and
   29043      `MAX_INIT_PRIORITY'; otherwise it must be `DEFAULT_INIT_PRIORITY'.
   29044 
   29045      If this macro is not defined by the target, a suitable default will
   29046      be chosen if (1) the target supports arbitrary section names, (2)
   29047      the target defines `CTORS_SECTION_ASM_OP', or (3) `USE_COLLECT2'
   29048      is not defined.
   29049 
   29050  -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY)
   29051      This is like `TARGET_ASM_CONSTRUCTOR' but used for termination
   29052      functions rather than initialization functions.
   29053 
   29054  If `TARGET_HAVE_CTORS_DTORS' is true, the initialization routine
   29055 generated for the generated object file will have static linkage.
   29056 
   29057  If your system uses `collect2' as the means of processing
   29058 constructors, then that program normally uses `nm' to scan an object
   29059 file for constructor functions to be called.
   29060 
   29061  On certain kinds of systems, you can define this macro to make
   29062 `collect2' work faster (and, in some cases, make it work at all):
   29063 
   29064  -- Macro: OBJECT_FORMAT_COFF
   29065      Define this macro if the system uses COFF (Common Object File
   29066      Format) object files, so that `collect2' can assume this format
   29067      and scan object files directly for dynamic constructor/destructor
   29068      functions.
   29069 
   29070      This macro is effective only in a native compiler; `collect2' as
   29071      part of a cross compiler always uses `nm' for the target machine.
   29072 
   29073  -- Macro: REAL_NM_FILE_NAME
   29074      Define this macro as a C string constant containing the file name
   29075      to use to execute `nm'.  The default is to search the path
   29076      normally for `nm'.
   29077 
   29078      If your system supports shared libraries and has a program to list
   29079      the dynamic dependencies of a given library or executable, you can
   29080      define these macros to enable support for running initialization
   29081      and termination functions in shared libraries:
   29082 
   29083  -- Macro: LDD_SUFFIX
   29084      Define this macro to a C string constant containing the name of
   29085      the program which lists dynamic dependencies, like `"ldd"' under
   29086      SunOS 4.
   29087 
   29088  -- Macro: PARSE_LDD_OUTPUT (PTR)
   29089      Define this macro to be C code that extracts filenames from the
   29090      output of the program denoted by `LDD_SUFFIX'.  PTR is a variable
   29091      of type `char *' that points to the beginning of a line of output
   29092      from `LDD_SUFFIX'.  If the line lists a dynamic dependency, the
   29093      code must advance PTR to the beginning of the filename on that
   29094      line.  Otherwise, it must set PTR to `NULL'.
   29095 
   29096  -- Macro: SHLIB_SUFFIX
   29097      Define this macro to a C string constant containing the default
   29098      shared library extension of the target (e.g., `".so"').  `collect2'
   29099      strips version information after this suffix when generating global
   29100      constructor and destructor names.  This define is only needed on
   29101      targets that use `collect2' to process constructors and
   29102      destructors.
   29103 
   29104 
   29105 File: gccint.info,  Node: Instruction Output,  Next: Dispatch Tables,  Prev: Macros for Initialization,  Up: Assembler Format
   29106 
   29107 15.21.7 Output of Assembler Instructions
   29108 ----------------------------------------
   29109 
   29110 This describes assembler instruction output.
   29111 
   29112  -- Macro: REGISTER_NAMES
   29113      A C initializer containing the assembler's names for the machine
   29114      registers, each one as a C string constant.  This is what
   29115      translates register numbers in the compiler into assembler
   29116      language.
   29117 
   29118  -- Macro: ADDITIONAL_REGISTER_NAMES
   29119      If defined, a C initializer for an array of structures containing
   29120      a name and a register number.  This macro defines additional names
   29121      for hard registers, thus allowing the `asm' option in declarations
   29122      to refer to registers using alternate names.
   29123 
   29124  -- Macro: ASM_OUTPUT_OPCODE (STREAM, PTR)
   29125      Define this macro if you are using an unusual assembler that
   29126      requires different names for the machine instructions.
   29127 
   29128      The definition is a C statement or statements which output an
   29129      assembler instruction opcode to the stdio stream STREAM.  The
   29130      macro-operand PTR is a variable of type `char *' which points to
   29131      the opcode name in its "internal" form--the form that is written
   29132      in the machine description.  The definition should output the
   29133      opcode name to STREAM, performing any translation you desire, and
   29134      increment the variable PTR to point at the end of the opcode so
   29135      that it will not be output twice.
   29136 
   29137      In fact, your macro definition may process less than the entire
   29138      opcode name, or more than the opcode name; but if you want to
   29139      process text that includes `%'-sequences to substitute operands,
   29140      you must take care of the substitution yourself.  Just be sure to
   29141      increment PTR over whatever text should not be output normally.
   29142 
   29143      If you need to look at the operand values, they can be found as the
   29144      elements of `recog_data.operand'.
   29145 
   29146      If the macro definition does nothing, the instruction is output in
   29147      the usual way.
   29148 
   29149  -- Macro: FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)
   29150      If defined, a C statement to be executed just prior to the output
   29151      of assembler code for INSN, to modify the extracted operands so
   29152      they will be output differently.
   29153 
   29154      Here the argument OPVEC is the vector containing the operands
   29155      extracted from INSN, and NOPERANDS is the number of elements of
   29156      the vector which contain meaningful data for this insn.  The
   29157      contents of this vector are what will be used to convert the insn
   29158      template into assembler code, so you can change the assembler
   29159      output by changing the contents of the vector.
   29160 
   29161      This macro is useful when various assembler syntaxes share a single
   29162      file of instruction patterns; by defining this macro differently,
   29163      you can cause a large class of instructions to be output
   29164      differently (such as with rearranged operands).  Naturally,
   29165      variations in assembler syntax affecting individual insn patterns
   29166      ought to be handled by writing conditional output routines in
   29167      those patterns.
   29168 
   29169      If this macro is not defined, it is equivalent to a null statement.
   29170 
   29171  -- Macro: PRINT_OPERAND (STREAM, X, CODE)
   29172      A C compound statement to output to stdio stream STREAM the
   29173      assembler syntax for an instruction operand X.  X is an RTL
   29174      expression.
   29175 
   29176      CODE is a value that can be used to specify one of several ways of
   29177      printing the operand.  It is used when identical operands must be
   29178      printed differently depending on the context.  CODE comes from the
   29179      `%' specification that was used to request printing of the
   29180      operand.  If the specification was just `%DIGIT' then CODE is 0;
   29181      if the specification was `%LTR DIGIT' then CODE is the ASCII code
   29182      for LTR.
   29183 
   29184      If X is a register, this macro should print the register's name.
   29185      The names can be found in an array `reg_names' whose type is `char
   29186      *[]'.  `reg_names' is initialized from `REGISTER_NAMES'.
   29187 
   29188      When the machine description has a specification `%PUNCT' (a `%'
   29189      followed by a punctuation character), this macro is called with a
   29190      null pointer for X and the punctuation character for CODE.
   29191 
   29192  -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE)
   29193      A C expression which evaluates to true if CODE is a valid
   29194      punctuation character for use in the `PRINT_OPERAND' macro.  If
   29195      `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no
   29196      punctuation characters (except for the standard one, `%') are used
   29197      in this way.
   29198 
   29199  -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X)
   29200      A C compound statement to output to stdio stream STREAM the
   29201      assembler syntax for an instruction operand that is a memory
   29202      reference whose address is X.  X is an RTL expression.
   29203 
   29204      On some machines, the syntax for a symbolic address depends on the
   29205      section that the address refers to.  On these machines, define the
   29206      hook `TARGET_ENCODE_SECTION_INFO' to store the information into the
   29207      `symbol_ref', and then check for it here.  *Note Assembler
   29208      Format::.
   29209 
   29210  -- Macro: DBR_OUTPUT_SEQEND (FILE)
   29211      A C statement, to be executed after all slot-filler instructions
   29212      have been output.  If necessary, call `dbr_sequence_length' to
   29213      determine the number of slots filled in a sequence (zero if not
   29214      currently outputting a sequence), to decide how many no-ops to
   29215      output, or whatever.
   29216 
   29217      Don't define this macro if it has nothing to do, but it is helpful
   29218      in reading assembly output if the extent of the delay sequence is
   29219      made explicit (e.g. with white space).
   29220 
   29221  Note that output routines for instructions with delay slots must be
   29222 prepared to deal with not being output as part of a sequence (i.e. when
   29223 the scheduling pass is not run, or when no slot fillers could be
   29224 found.)  The variable `final_sequence' is null when not processing a
   29225 sequence, otherwise it contains the `sequence' rtx being output.
   29226 
   29227  -- Macro: REGISTER_PREFIX
   29228  -- Macro: LOCAL_LABEL_PREFIX
   29229  -- Macro: USER_LABEL_PREFIX
   29230  -- Macro: IMMEDIATE_PREFIX
   29231      If defined, C string expressions to be used for the `%R', `%L',
   29232      `%U', and `%I' options of `asm_fprintf' (see `final.c').  These
   29233      are useful when a single `md' file must support multiple assembler
   29234      formats.  In that case, the various `tm.h' files can define these
   29235      macros differently.
   29236 
   29237  -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT)
   29238      If defined this macro should expand to a series of `case'
   29239      statements which will be parsed inside the `switch' statement of
   29240      the `asm_fprintf' function.  This allows targets to define extra
   29241      printf formats which may useful when generating their assembler
   29242      statements.  Note that uppercase letters are reserved for future
   29243      generic extensions to asm_fprintf, and so are not available to
   29244      target specific code.  The output file is given by the parameter
   29245      FILE.  The varargs input pointer is ARGPTR and the rest of the
   29246      format string, starting the character after the one that is being
   29247      switched upon, is pointed to by FORMAT.
   29248 
   29249  -- Macro: ASSEMBLER_DIALECT
   29250      If your target supports multiple dialects of assembler language
   29251      (such as different opcodes), define this macro as a C expression
   29252      that gives the numeric index of the assembler language dialect to
   29253      use, with zero as the first variant.
   29254 
   29255      If this macro is defined, you may use constructs of the form
   29256           `{option0|option1|option2...}'
   29257      in the output templates of patterns (*note Output Template::) or
   29258      in the first argument of `asm_fprintf'.  This construct outputs
   29259      `option0', `option1', `option2', etc., if the value of
   29260      `ASSEMBLER_DIALECT' is zero, one, two, etc.  Any special characters
   29261      within these strings retain their usual meaning.  If there are
   29262      fewer alternatives within the braces than the value of
   29263      `ASSEMBLER_DIALECT', the construct outputs nothing.
   29264 
   29265      If you do not define this macro, the characters `{', `|' and `}'
   29266      do not have any special meaning when used in templates or operands
   29267      to `asm_fprintf'.
   29268 
   29269      Define the macros `REGISTER_PREFIX', `LOCAL_LABEL_PREFIX',
   29270      `USER_LABEL_PREFIX' and `IMMEDIATE_PREFIX' if you can express the
   29271      variations in assembler language syntax with that mechanism.
   29272      Define `ASSEMBLER_DIALECT' and use the `{option0|option1}' syntax
   29273      if the syntax variant are larger and involve such things as
   29274      different opcodes or operand order.
   29275 
   29276  -- Macro: ASM_OUTPUT_REG_PUSH (STREAM, REGNO)
   29277      A C expression to output to STREAM some assembler code which will
   29278      push hard register number REGNO onto the stack.  The code need not
   29279      be optimal, since this macro is used only when profiling.
   29280 
   29281  -- Macro: ASM_OUTPUT_REG_POP (STREAM, REGNO)
   29282      A C expression to output to STREAM some assembler code which will
   29283      pop hard register number REGNO off of the stack.  The code need
   29284      not be optimal, since this macro is used only when profiling.
   29285 
   29286 
   29287 File: gccint.info,  Node: Dispatch Tables,  Next: Exception Region Output,  Prev: Instruction Output,  Up: Assembler Format
   29288 
   29289 15.21.8 Output of Dispatch Tables
   29290 ---------------------------------
   29291 
   29292 This concerns dispatch tables.
   29293 
   29294  -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL)
   29295      A C statement to output to the stdio stream STREAM an assembler
   29296      pseudo-instruction to generate a difference between two labels.
   29297      VALUE and REL are the numbers of two internal labels.  The
   29298      definitions of these labels are output using
   29299      `(*targetm.asm_out.internal_label)', and they must be printed in
   29300      the same way here.  For example,
   29301 
   29302           fprintf (STREAM, "\t.word L%d-L%d\n",
   29303                    VALUE, REL)
   29304 
   29305      You must provide this macro on machines where the addresses in a
   29306      dispatch table are relative to the table's own address.  If
   29307      defined, GCC will also use this macro on all machines when
   29308      producing PIC.  BODY is the body of the `ADDR_DIFF_VEC'; it is
   29309      provided so that the mode and flags can be read.
   29310 
   29311  -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)
   29312      This macro should be provided on machines where the addresses in a
   29313      dispatch table are absolute.
   29314 
   29315      The definition should be a C statement to output to the stdio
   29316      stream STREAM an assembler pseudo-instruction to generate a
   29317      reference to a label.  VALUE is the number of an internal label
   29318      whose definition is output using
   29319      `(*targetm.asm_out.internal_label)'.  For example,
   29320 
   29321           fprintf (STREAM, "\t.word L%d\n", VALUE)
   29322 
   29323  -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)
   29324      Define this if the label before a jump-table needs to be output
   29325      specially.  The first three arguments are the same as for
   29326      `(*targetm.asm_out.internal_label)'; the fourth argument is the
   29327      jump-table which follows (a `jump_insn' containing an `addr_vec'
   29328      or `addr_diff_vec').
   29329 
   29330      This feature is used on system V to output a `swbeg' statement for
   29331      the table.
   29332 
   29333      If this macro is not defined, these labels are output with
   29334      `(*targetm.asm_out.internal_label)'.
   29335 
   29336  -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)
   29337      Define this if something special must be output at the end of a
   29338      jump-table.  The definition should be a C statement to be executed
   29339      after the assembler code for the table is written.  It should write
   29340      the appropriate code to stdio stream STREAM.  The argument TABLE
   29341      is the jump-table insn, and NUM is the label-number of the
   29342      preceding label.
   29343 
   29344      If this macro is not defined, nothing special is output at the end
   29345      of the jump-table.
   29346 
   29347  -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (STREAM, DECL,
   29348           FOR_EH, EMPTY)
   29349      This target hook emits a label at the beginning of each FDE.  It
   29350      should be defined on targets where FDEs need special labels, and it
   29351      should write the appropriate label, for the FDE associated with the
   29352      function declaration DECL, to the stdio stream STREAM.  The third
   29353      argument, FOR_EH, is a boolean: true if this is for an exception
   29354      table.  The fourth argument, EMPTY, is a boolean: true if this is
   29355      a placeholder label for an omitted FDE.
   29356 
   29357      The default is that FDEs are not given nonlocal labels.
   29358 
   29359  -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (STREAM)
   29360      This target hook emits a label at the beginning of the exception
   29361      table.  It should be defined on targets where it is desirable for
   29362      the table to be broken up according to function.
   29363 
   29364      The default is that no label is emitted.
   29365 
   29366  -- Target Hook: void TARGET_UNWIND_EMIT (FILE * STREAM, rtx INSN)
   29367      This target hook emits and assembly directives required to unwind
   29368      the given instruction.  This is only used when TARGET_UNWIND_INFO
   29369      is set.
   29370 
   29371 
   29372 File: gccint.info,  Node: Exception Region Output,  Next: Alignment Output,  Prev: Dispatch Tables,  Up: Assembler Format
   29373 
   29374 15.21.9 Assembler Commands for Exception Regions
   29375 ------------------------------------------------
   29376 
   29377 This describes commands marking the start and the end of an exception
   29378 region.
   29379 
   29380  -- Macro: EH_FRAME_SECTION_NAME
   29381      If defined, a C string constant for the name of the section
   29382      containing exception handling frame unwind information.  If not
   29383      defined, GCC will provide a default definition if the target
   29384      supports named sections.  `crtstuff.c' uses this macro to switch
   29385      to the appropriate section.
   29386 
   29387      You should define this symbol if your target supports DWARF 2 frame
   29388      unwind information and the default definition does not work.
   29389 
   29390  -- Macro: EH_FRAME_IN_DATA_SECTION
   29391      If defined, DWARF 2 frame unwind information will be placed in the
   29392      data section even though the target supports named sections.  This
   29393      might be necessary, for instance, if the system linker does garbage
   29394      collection and sections cannot be marked as not to be collected.
   29395 
   29396      Do not define this macro unless `TARGET_ASM_NAMED_SECTION' is also
   29397      defined.
   29398 
   29399  -- Macro: EH_TABLES_CAN_BE_READ_ONLY
   29400      Define this macro to 1 if your target is such that no frame unwind
   29401      information encoding used with non-PIC code will ever require a
   29402      runtime relocation, but the linker may not support merging
   29403      read-only and read-write sections into a single read-write section.
   29404 
   29405  -- Macro: MASK_RETURN_ADDR
   29406      An rtx used to mask the return address found via
   29407      `RETURN_ADDR_RTX', so that it does not contain any extraneous set
   29408      bits in it.
   29409 
   29410  -- Macro: DWARF2_UNWIND_INFO
   29411      Define this macro to 0 if your target supports DWARF 2 frame unwind
   29412      information, but it does not yet work with exception handling.
   29413      Otherwise, if your target supports this information (if it defines
   29414      `INCOMING_RETURN_ADDR_RTX' and either `UNALIGNED_INT_ASM_OP' or
   29415      `OBJECT_FORMAT_ELF'), GCC will provide a default definition of 1.
   29416 
   29417      If `TARGET_UNWIND_INFO' is defined, the target specific unwinder
   29418      will be used in all cases.  Defining this macro will enable the
   29419      generation of DWARF 2 frame debugging information.
   29420 
   29421      If `TARGET_UNWIND_INFO' is not defined, and this macro is defined
   29422      to 1, the DWARF 2 unwinder will be the default exception handling
   29423      mechanism; otherwise, the `setjmp'/`longjmp'-based scheme will be
   29424      used by default.
   29425 
   29426  -- Macro: TARGET_UNWIND_INFO
   29427      Define this macro if your target has ABI specified unwind tables.
   29428      Usually these will be output by `TARGET_UNWIND_EMIT'.
   29429 
   29430  -- Variable: Target Hook bool TARGET_UNWIND_TABLES_DEFAULT
   29431      This variable should be set to `true' if the target ABI requires
   29432      unwinding tables even when exceptions are not used.
   29433 
   29434  -- Macro: MUST_USE_SJLJ_EXCEPTIONS
   29435      This macro need only be defined if `DWARF2_UNWIND_INFO' is
   29436      runtime-variable.  In that case, `except.h' cannot correctly
   29437      determine the corresponding definition of
   29438      `MUST_USE_SJLJ_EXCEPTIONS', so the target must provide it directly.
   29439 
   29440  -- Macro: DONT_USE_BUILTIN_SETJMP
   29441      Define this macro to 1 if the `setjmp'/`longjmp'-based scheme
   29442      should use the `setjmp'/`longjmp' functions from the C library
   29443      instead of the `__builtin_setjmp'/`__builtin_longjmp' machinery.
   29444 
   29445  -- Macro: DWARF_CIE_DATA_ALIGNMENT
   29446      This macro need only be defined if the target might save registers
   29447      in the function prologue at an offset to the stack pointer that is
   29448      not aligned to `UNITS_PER_WORD'.  The definition should be the
   29449      negative minimum alignment if `STACK_GROWS_DOWNWARD' is defined,
   29450      and the positive minimum alignment otherwise.  *Note SDB and
   29451      DWARF::.  Only applicable if the target supports DWARF 2 frame
   29452      unwind information.
   29453 
   29454  -- Variable: Target Hook bool TARGET_TERMINATE_DW2_EH_FRAME_INFO
   29455      Contains the value true if the target should add a zero word onto
   29456      the end of a Dwarf-2 frame info section when used for exception
   29457      handling.  Default value is false if `EH_FRAME_SECTION_NAME' is
   29458      defined, and true otherwise.
   29459 
   29460  -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG)
   29461      Given a register, this hook should return a parallel of registers
   29462      to represent where to find the register pieces.  Define this hook
   29463      if the register and its mode are represented in Dwarf in
   29464      non-contiguous locations, or if the register should be represented
   29465      in more than one register in Dwarf.  Otherwise, this hook should
   29466      return `NULL_RTX'.  If not defined, the default is to return
   29467      `NULL_RTX'.
   29468 
   29469  -- Target Hook: void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree ADDRESS)
   29470      If some registers are represented in Dwarf-2 unwind information in
   29471      multiple pieces, define this hook to fill in information about the
   29472      sizes of those pieces in the table used by the unwinder at runtime.
   29473      It will be called by `expand_builtin_init_dwarf_reg_sizes' after
   29474      filling in a single size corresponding to each hard register;
   29475      ADDRESS is the address of the table.
   29476 
   29477  -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM)
   29478      This hook is used to output a reference from a frame unwinding
   29479      table to the type_info object identified by SYM.  It should return
   29480      `true' if the reference was output.  Returning `false' will cause
   29481      the reference to be output using the normal Dwarf2 routines.
   29482 
   29483  -- Target Hook: bool TARGET_ARM_EABI_UNWINDER
   29484      This hook should be set to `true' on targets that use an ARM EABI
   29485      based unwinding library, and `false' on other targets.  This
   29486      effects the format of unwinding tables, and how the unwinder in
   29487      entered after running a cleanup.  The default is `false'.
   29488 
   29489 
   29490 File: gccint.info,  Node: Alignment Output,  Prev: Exception Region Output,  Up: Assembler Format
   29491 
   29492 15.21.10 Assembler Commands for Alignment
   29493 -----------------------------------------
   29494 
   29495 This describes commands for alignment.
   29496 
   29497  -- Macro: JUMP_ALIGN (LABEL)
   29498      The alignment (log base 2) to put in front of LABEL, which is a
   29499      common destination of jumps and has no fallthru incoming edge.
   29500 
   29501      This macro need not be defined if you don't want any special
   29502      alignment to be done at such a time.  Most machine descriptions do
   29503      not currently define the macro.
   29504 
   29505      Unless it's necessary to inspect the LABEL parameter, it is better
   29506      to set the variable ALIGN_JUMPS in the target's
   29507      `OVERRIDE_OPTIONS'.  Otherwise, you should try to honor the user's
   29508      selection in ALIGN_JUMPS in a `JUMP_ALIGN' implementation.
   29509 
   29510  -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL)
   29511      The alignment (log base 2) to put in front of LABEL, which follows
   29512      a `BARRIER'.
   29513 
   29514      This macro need not be defined if you don't want any special
   29515      alignment to be done at such a time.  Most machine descriptions do
   29516      not currently define the macro.
   29517 
   29518  -- Macro: LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP
   29519      The maximum number of bytes to skip when applying
   29520      `LABEL_ALIGN_AFTER_BARRIER'.  This works only if
   29521      `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
   29522 
   29523  -- Macro: LOOP_ALIGN (LABEL)
   29524      The alignment (log base 2) to put in front of LABEL, which follows
   29525      a `NOTE_INSN_LOOP_BEG' note.
   29526 
   29527      This macro need not be defined if you don't want any special
   29528      alignment to be done at such a time.  Most machine descriptions do
   29529      not currently define the macro.
   29530 
   29531      Unless it's necessary to inspect the LABEL parameter, it is better
   29532      to set the variable `align_loops' in the target's
   29533      `OVERRIDE_OPTIONS'.  Otherwise, you should try to honor the user's
   29534      selection in `align_loops' in a `LOOP_ALIGN' implementation.
   29535 
   29536  -- Macro: LOOP_ALIGN_MAX_SKIP
   29537      The maximum number of bytes to skip when applying `LOOP_ALIGN'.
   29538      This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
   29539 
   29540  -- Macro: LABEL_ALIGN (LABEL)
   29541      The alignment (log base 2) to put in front of LABEL.  If
   29542      `LABEL_ALIGN_AFTER_BARRIER' / `LOOP_ALIGN' specify a different
   29543      alignment, the maximum of the specified values is used.
   29544 
   29545      Unless it's necessary to inspect the LABEL parameter, it is better
   29546      to set the variable `align_labels' in the target's
   29547      `OVERRIDE_OPTIONS'.  Otherwise, you should try to honor the user's
   29548      selection in `align_labels' in a `LABEL_ALIGN' implementation.
   29549 
   29550  -- Macro: LABEL_ALIGN_MAX_SKIP
   29551      The maximum number of bytes to skip when applying `LABEL_ALIGN'.
   29552      This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
   29553 
   29554  -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES)
   29555      A C statement to output to the stdio stream STREAM an assembler
   29556      instruction to advance the location counter by NBYTES bytes.
   29557      Those bytes should be zero when loaded.  NBYTES will be a C
   29558      expression of type `unsigned HOST_WIDE_INT'.
   29559 
   29560  -- Macro: ASM_NO_SKIP_IN_TEXT
   29561      Define this macro if `ASM_OUTPUT_SKIP' should not be used in the
   29562      text section because it fails to put zeros in the bytes that are
   29563      skipped.  This is true on many Unix systems, where the pseudo-op
   29564      to skip bytes produces no-op instructions rather than zeros when
   29565      used in the text section.
   29566 
   29567  -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER)
   29568      A C statement to output to the stdio stream STREAM an assembler
   29569      command to advance the location counter to a multiple of 2 to the
   29570      POWER bytes.  POWER will be a C expression of type `int'.
   29571 
   29572  -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER)
   29573      Like `ASM_OUTPUT_ALIGN', except that the "nop" instruction is used
   29574      for padding, if necessary.
   29575 
   29576  -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP)
   29577      A C statement to output to the stdio stream STREAM an assembler
   29578      command to advance the location counter to a multiple of 2 to the
   29579      POWER bytes, but only if MAX_SKIP or fewer bytes are needed to
   29580      satisfy the alignment request.  POWER and MAX_SKIP will be a C
   29581      expression of type `int'.
   29582 
   29583 
   29584 File: gccint.info,  Node: Debugging Info,  Next: Floating Point,  Prev: Assembler Format,  Up: Target Macros
   29585 
   29586 15.22 Controlling Debugging Information Format
   29587 ==============================================
   29588 
   29589 This describes how to specify debugging information.
   29590 
   29591 * Menu:
   29592 
   29593 * All Debuggers::      Macros that affect all debugging formats uniformly.
   29594 * DBX Options::        Macros enabling specific options in DBX format.
   29595 * DBX Hooks::          Hook macros for varying DBX format.
   29596 * File Names and DBX:: Macros controlling output of file names in DBX format.
   29597 * SDB and DWARF::      Macros for SDB (COFF) and DWARF formats.
   29598 * VMS Debug::          Macros for VMS debug format.
   29599 
   29600 
   29601 File: gccint.info,  Node: All Debuggers,  Next: DBX Options,  Up: Debugging Info
   29602 
   29603 15.22.1 Macros Affecting All Debugging Formats
   29604 ----------------------------------------------
   29605 
   29606 These macros affect all debugging formats.
   29607 
   29608  -- Macro: DBX_REGISTER_NUMBER (REGNO)
   29609      A C expression that returns the DBX register number for the
   29610      compiler register number REGNO.  In the default macro provided,
   29611      the value of this expression will be REGNO itself.  But sometimes
   29612      there are some registers that the compiler knows about and DBX
   29613      does not, or vice versa.  In such cases, some register may need to
   29614      have one number in the compiler and another for DBX.
   29615 
   29616      If two registers have consecutive numbers inside GCC, and they can
   29617      be used as a pair to hold a multiword value, then they _must_ have
   29618      consecutive numbers after renumbering with `DBX_REGISTER_NUMBER'.
   29619      Otherwise, debuggers will be unable to access such a pair, because
   29620      they expect register pairs to be consecutive in their own
   29621      numbering scheme.
   29622 
   29623      If you find yourself defining `DBX_REGISTER_NUMBER' in way that
   29624      does not preserve register pairs, then what you must do instead is
   29625      redefine the actual register numbering scheme.
   29626 
   29627  -- Macro: DEBUGGER_AUTO_OFFSET (X)
   29628      A C expression that returns the integer offset value for an
   29629      automatic variable having address X (an RTL expression).  The
   29630      default computation assumes that X is based on the frame-pointer
   29631      and gives the offset from the frame-pointer.  This is required for
   29632      targets that produce debugging output for DBX or COFF-style
   29633      debugging output for SDB and allow the frame-pointer to be
   29634      eliminated when the `-g' options is used.
   29635 
   29636  -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X)
   29637      A C expression that returns the integer offset value for an
   29638      argument having address X (an RTL expression).  The nominal offset
   29639      is OFFSET.
   29640 
   29641  -- Macro: PREFERRED_DEBUGGING_TYPE
   29642      A C expression that returns the type of debugging output GCC should
   29643      produce when the user specifies just `-g'.  Define this if you
   29644      have arranged for GCC to support more than one format of debugging
   29645      output.  Currently, the allowable values are `DBX_DEBUG',
   29646      `SDB_DEBUG', `DWARF_DEBUG', `DWARF2_DEBUG', `XCOFF_DEBUG',
   29647      `VMS_DEBUG', and `VMS_AND_DWARF2_DEBUG'.
   29648 
   29649      When the user specifies `-ggdb', GCC normally also uses the value
   29650      of this macro to select the debugging output format, but with two
   29651      exceptions.  If `DWARF2_DEBUGGING_INFO' is defined, GCC uses the
   29652      value `DWARF2_DEBUG'.  Otherwise, if `DBX_DEBUGGING_INFO' is
   29653      defined, GCC uses `DBX_DEBUG'.
   29654 
   29655      The value of this macro only affects the default debugging output;
   29656      the user can always get a specific type of output by using
   29657      `-gstabs', `-gcoff', `-gdwarf-2', `-gxcoff', or `-gvms'.
   29658 
   29659 
   29660 File: gccint.info,  Node: DBX Options,  Next: DBX Hooks,  Prev: All Debuggers,  Up: Debugging Info
   29661 
   29662 15.22.2 Specific Options for DBX Output
   29663 ---------------------------------------
   29664 
   29665 These are specific options for DBX output.
   29666 
   29667  -- Macro: DBX_DEBUGGING_INFO
   29668      Define this macro if GCC should produce debugging output for DBX
   29669      in response to the `-g' option.
   29670 
   29671  -- Macro: XCOFF_DEBUGGING_INFO
   29672      Define this macro if GCC should produce XCOFF format debugging
   29673      output in response to the `-g' option.  This is a variant of DBX
   29674      format.
   29675 
   29676  -- Macro: DEFAULT_GDB_EXTENSIONS
   29677      Define this macro to control whether GCC should by default generate
   29678      GDB's extended version of DBX debugging information (assuming
   29679      DBX-format debugging information is enabled at all).  If you don't
   29680      define the macro, the default is 1: always generate the extended
   29681      information if there is any occasion to.
   29682 
   29683  -- Macro: DEBUG_SYMS_TEXT
   29684      Define this macro if all `.stabs' commands should be output while
   29685      in the text section.
   29686 
   29687  -- Macro: ASM_STABS_OP
   29688      A C string constant, including spacing, naming the assembler
   29689      pseudo op to use instead of `"\t.stabs\t"' to define an ordinary
   29690      debugging symbol.  If you don't define this macro, `"\t.stabs\t"'
   29691      is used.  This macro applies only to DBX debugging information
   29692      format.
   29693 
   29694  -- Macro: ASM_STABD_OP
   29695      A C string constant, including spacing, naming the assembler
   29696      pseudo op to use instead of `"\t.stabd\t"' to define a debugging
   29697      symbol whose value is the current location.  If you don't define
   29698      this macro, `"\t.stabd\t"' is used.  This macro applies only to
   29699      DBX debugging information format.
   29700 
   29701  -- Macro: ASM_STABN_OP
   29702      A C string constant, including spacing, naming the assembler
   29703      pseudo op to use instead of `"\t.stabn\t"' to define a debugging
   29704      symbol with no name.  If you don't define this macro,
   29705      `"\t.stabn\t"' is used.  This macro applies only to DBX debugging
   29706      information format.
   29707 
   29708  -- Macro: DBX_NO_XREFS
   29709      Define this macro if DBX on your system does not support the
   29710      construct `xsTAGNAME'.  On some systems, this construct is used to
   29711      describe a forward reference to a structure named TAGNAME.  On
   29712      other systems, this construct is not supported at all.
   29713 
   29714  -- Macro: DBX_CONTIN_LENGTH
   29715      A symbol name in DBX-format debugging information is normally
   29716      continued (split into two separate `.stabs' directives) when it
   29717      exceeds a certain length (by default, 80 characters).  On some
   29718      operating systems, DBX requires this splitting; on others,
   29719      splitting must not be done.  You can inhibit splitting by defining
   29720      this macro with the value zero.  You can override the default
   29721      splitting-length by defining this macro as an expression for the
   29722      length you desire.
   29723 
   29724  -- Macro: DBX_CONTIN_CHAR
   29725      Normally continuation is indicated by adding a `\' character to
   29726      the end of a `.stabs' string when a continuation follows.  To use
   29727      a different character instead, define this macro as a character
   29728      constant for the character you want to use.  Do not define this
   29729      macro if backslash is correct for your system.
   29730 
   29731  -- Macro: DBX_STATIC_STAB_DATA_SECTION
   29732      Define this macro if it is necessary to go to the data section
   29733      before outputting the `.stabs' pseudo-op for a non-global static
   29734      variable.
   29735 
   29736  -- Macro: DBX_TYPE_DECL_STABS_CODE
   29737      The value to use in the "code" field of the `.stabs' directive for
   29738      a typedef.  The default is `N_LSYM'.
   29739 
   29740  -- Macro: DBX_STATIC_CONST_VAR_CODE
   29741      The value to use in the "code" field of the `.stabs' directive for
   29742      a static variable located in the text section.  DBX format does not
   29743      provide any "right" way to do this.  The default is `N_FUN'.
   29744 
   29745  -- Macro: DBX_REGPARM_STABS_CODE
   29746      The value to use in the "code" field of the `.stabs' directive for
   29747      a parameter passed in registers.  DBX format does not provide any
   29748      "right" way to do this.  The default is `N_RSYM'.
   29749 
   29750  -- Macro: DBX_REGPARM_STABS_LETTER
   29751      The letter to use in DBX symbol data to identify a symbol as a
   29752      parameter passed in registers.  DBX format does not customarily
   29753      provide any way to do this.  The default is `'P''.
   29754 
   29755  -- Macro: DBX_FUNCTION_FIRST
   29756      Define this macro if the DBX information for a function and its
   29757      arguments should precede the assembler code for the function.
   29758      Normally, in DBX format, the debugging information entirely
   29759      follows the assembler code.
   29760 
   29761  -- Macro: DBX_BLOCKS_FUNCTION_RELATIVE
   29762      Define this macro, with value 1, if the value of a symbol
   29763      describing the scope of a block (`N_LBRAC' or `N_RBRAC') should be
   29764      relative to the start of the enclosing function.  Normally, GCC
   29765      uses an absolute address.
   29766 
   29767  -- Macro: DBX_LINES_FUNCTION_RELATIVE
   29768      Define this macro, with value 1, if the value of a symbol
   29769      indicating the current line number (`N_SLINE') should be relative
   29770      to the start of the enclosing function.  Normally, GCC uses an
   29771      absolute address.
   29772 
   29773  -- Macro: DBX_USE_BINCL
   29774      Define this macro if GCC should generate `N_BINCL' and `N_EINCL'
   29775      stabs for included header files, as on Sun systems.  This macro
   29776      also directs GCC to output a type number as a pair of a file
   29777      number and a type number within the file.  Normally, GCC does not
   29778      generate `N_BINCL' or `N_EINCL' stabs, and it outputs a single
   29779      number for a type number.
   29780 
   29781 
   29782 File: gccint.info,  Node: DBX Hooks,  Next: File Names and DBX,  Prev: DBX Options,  Up: Debugging Info
   29783 
   29784 15.22.3 Open-Ended Hooks for DBX Format
   29785 ---------------------------------------
   29786 
   29787 These are hooks for DBX format.
   29788 
   29789  -- Macro: DBX_OUTPUT_LBRAC (STREAM, NAME)
   29790      Define this macro to say how to output to STREAM the debugging
   29791      information for the start of a scope level for variable names.  The
   29792      argument NAME is the name of an assembler symbol (for use with
   29793      `assemble_name') whose value is the address where the scope begins.
   29794 
   29795  -- Macro: DBX_OUTPUT_RBRAC (STREAM, NAME)
   29796      Like `DBX_OUTPUT_LBRAC', but for the end of a scope level.
   29797 
   29798  -- Macro: DBX_OUTPUT_NFUN (STREAM, LSCOPE_LABEL, DECL)
   29799      Define this macro if the target machine requires special handling
   29800      to output an `N_FUN' entry for the function DECL.
   29801 
   29802  -- Macro: DBX_OUTPUT_SOURCE_LINE (STREAM, LINE, COUNTER)
   29803      A C statement to output DBX debugging information before code for
   29804      line number LINE of the current source file to the stdio stream
   29805      STREAM.  COUNTER is the number of time the macro was invoked,
   29806      including the current invocation; it is intended to generate
   29807      unique labels in the assembly output.
   29808 
   29809      This macro should not be defined if the default output is correct,
   29810      or if it can be made correct by defining
   29811      `DBX_LINES_FUNCTION_RELATIVE'.
   29812 
   29813  -- Macro: NO_DBX_FUNCTION_END
   29814      Some stabs encapsulation formats (in particular ECOFF), cannot
   29815      handle the `.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx
   29816      extension construct.  On those machines, define this macro to turn
   29817      this feature off without disturbing the rest of the gdb extensions.
   29818 
   29819  -- Macro: NO_DBX_BNSYM_ENSYM
   29820      Some assemblers cannot handle the `.stabd BNSYM/ENSYM,0,0' gdb dbx
   29821      extension construct.  On those machines, define this macro to turn
   29822      this feature off without disturbing the rest of the gdb extensions.
   29823 
   29824 
   29825 File: gccint.info,  Node: File Names and DBX,  Next: SDB and DWARF,  Prev: DBX Hooks,  Up: Debugging Info
   29826 
   29827 15.22.4 File Names in DBX Format
   29828 --------------------------------
   29829 
   29830 This describes file names in DBX format.
   29831 
   29832  -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME)
   29833      A C statement to output DBX debugging information to the stdio
   29834      stream STREAM, which indicates that file NAME is the main source
   29835      file--the file specified as the input file for compilation.  This
   29836      macro is called only once, at the beginning of compilation.
   29837 
   29838      This macro need not be defined if the standard form of output for
   29839      DBX debugging information is appropriate.
   29840 
   29841      It may be necessary to refer to a label equal to the beginning of
   29842      the text section.  You can use `assemble_name (stream,
   29843      ltext_label_name)' to do so.  If you do this, you must also set
   29844      the variable USED_LTEXT_LABEL_NAME to `true'.
   29845 
   29846  -- Macro: NO_DBX_MAIN_SOURCE_DIRECTORY
   29847      Define this macro, with value 1, if GCC should not emit an
   29848      indication of the current directory for compilation and current
   29849      source language at the beginning of the file.
   29850 
   29851  -- Macro: NO_DBX_GCC_MARKER
   29852      Define this macro, with value 1, if GCC should not emit an
   29853      indication that this object file was compiled by GCC.  The default
   29854      is to emit an `N_OPT' stab at the beginning of every source file,
   29855      with `gcc2_compiled.' for the string and value 0.
   29856 
   29857  -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME)
   29858      A C statement to output DBX debugging information at the end of
   29859      compilation of the main source file NAME.  Output should be
   29860      written to the stdio stream STREAM.
   29861 
   29862      If you don't define this macro, nothing special is output at the
   29863      end of compilation, which is correct for most machines.
   29864 
   29865  -- Macro: DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END
   29866      Define this macro _instead of_ defining
   29867      `DBX_OUTPUT_MAIN_SOURCE_FILE_END', if what needs to be output at
   29868      the end of compilation is a `N_SO' stab with an empty string,
   29869      whose value is the highest absolute text address in the file.
   29870 
   29871 
   29872 File: gccint.info,  Node: SDB and DWARF,  Next: VMS Debug,  Prev: File Names and DBX,  Up: Debugging Info
   29873 
   29874 15.22.5 Macros for SDB and DWARF Output
   29875 ---------------------------------------
   29876 
   29877 Here are macros for SDB and DWARF output.
   29878 
   29879  -- Macro: SDB_DEBUGGING_INFO
   29880      Define this macro if GCC should produce COFF-style debugging output
   29881      for SDB in response to the `-g' option.
   29882 
   29883  -- Macro: DWARF2_DEBUGGING_INFO
   29884      Define this macro if GCC should produce dwarf version 2 format
   29885      debugging output in response to the `-g' option.
   29886 
   29887       -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (tree
   29888                FUNCTION)
   29889           Define this to enable the dwarf attribute
   29890           `DW_AT_calling_convention' to be emitted for each function.
   29891           Instead of an integer return the enum value for the `DW_CC_'
   29892           tag.
   29893 
   29894      To support optional call frame debugging information, you must also
   29895      define `INCOMING_RETURN_ADDR_RTX' and either set
   29896      `RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the
   29897      prologue, or call `dwarf2out_def_cfa' and `dwarf2out_reg_save' as
   29898      appropriate from `TARGET_ASM_FUNCTION_PROLOGUE' if you don't.
   29899 
   29900  -- Macro: DWARF2_FRAME_INFO
   29901      Define this macro to a nonzero value if GCC should always output
   29902      Dwarf 2 frame information.  If `DWARF2_UNWIND_INFO' (*note
   29903      Exception Region Output:: is nonzero, GCC will output this
   29904      information not matter how you define `DWARF2_FRAME_INFO'.
   29905 
   29906  -- Macro: DWARF2_ASM_LINE_DEBUG_INFO
   29907      Define this macro to be a nonzero value if the assembler can
   29908      generate Dwarf 2 line debug info sections.  This will result in
   29909      much more compact line number tables, and hence is desirable if it
   29910      works.
   29911 
   29912  -- Macro: ASM_OUTPUT_DWARF_DELTA (STREAM, SIZE, LABEL1, LABEL2)
   29913      A C statement to issue assembly directives that create a difference
   29914      LAB1 minus LAB2, using an integer of the given SIZE.
   29915 
   29916  -- Macro: ASM_OUTPUT_DWARF_OFFSET (STREAM, SIZE, LABEL, SECTION)
   29917      A C statement to issue assembly directives that create a
   29918      section-relative reference to the given LABEL, using an integer of
   29919      the given SIZE.  The label is known to be defined in the given
   29920      SECTION.
   29921 
   29922  -- Macro: ASM_OUTPUT_DWARF_PCREL (STREAM, SIZE, LABEL)
   29923      A C statement to issue assembly directives that create a
   29924      self-relative reference to the given LABEL, using an integer of
   29925      the given SIZE.
   29926 
   29927  -- Target Hook: void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *FILE, int
   29928           SIZE, rtx X)
   29929      If defined, this target hook is a function which outputs a
   29930      DTP-relative reference to the given TLS symbol of the specified
   29931      size.
   29932 
   29933  -- Macro: PUT_SDB_...
   29934      Define these macros to override the assembler syntax for the
   29935      special SDB assembler directives.  See `sdbout.c' for a list of
   29936      these macros and their arguments.  If the standard syntax is used,
   29937      you need not define them yourself.
   29938 
   29939  -- Macro: SDB_DELIM
   29940      Some assemblers do not support a semicolon as a delimiter, even
   29941      between SDB assembler directives.  In that case, define this macro
   29942      to be the delimiter to use (usually `\n').  It is not necessary to
   29943      define a new set of `PUT_SDB_OP' macros if this is the only change
   29944      required.
   29945 
   29946  -- Macro: SDB_ALLOW_UNKNOWN_REFERENCES
   29947      Define this macro to allow references to unknown structure, union,
   29948      or enumeration tags to be emitted.  Standard COFF does not allow
   29949      handling of unknown references, MIPS ECOFF has support for it.
   29950 
   29951  -- Macro: SDB_ALLOW_FORWARD_REFERENCES
   29952      Define this macro to allow references to structure, union, or
   29953      enumeration tags that have not yet been seen to be handled.  Some
   29954      assemblers choke if forward tags are used, while some require it.
   29955 
   29956  -- Macro: SDB_OUTPUT_SOURCE_LINE (STREAM, LINE)
   29957      A C statement to output SDB debugging information before code for
   29958      line number LINE of the current source file to the stdio stream
   29959      STREAM.  The default is to emit an `.ln' directive.
   29960 
   29961 
   29962 File: gccint.info,  Node: VMS Debug,  Prev: SDB and DWARF,  Up: Debugging Info
   29963 
   29964 15.22.6 Macros for VMS Debug Format
   29965 -----------------------------------
   29966 
   29967 Here are macros for VMS debug format.
   29968 
   29969  -- Macro: VMS_DEBUGGING_INFO
   29970      Define this macro if GCC should produce debugging output for VMS
   29971      in response to the `-g' option.  The default behavior for VMS is
   29972      to generate minimal debug info for a traceback in the absence of
   29973      `-g' unless explicitly overridden with `-g0'.  This behavior is
   29974      controlled by `OPTIMIZATION_OPTIONS' and `OVERRIDE_OPTIONS'.
   29975 
   29976 
   29977 File: gccint.info,  Node: Floating Point,  Next: Mode Switching,  Prev: Debugging Info,  Up: Target Macros
   29978 
   29979 15.23 Cross Compilation and Floating Point
   29980 ==========================================
   29981 
   29982 While all modern machines use twos-complement representation for
   29983 integers, there are a variety of representations for floating point
   29984 numbers.  This means that in a cross-compiler the representation of
   29985 floating point numbers in the compiled program may be different from
   29986 that used in the machine doing the compilation.
   29987 
   29988  Because different representation systems may offer different amounts of
   29989 range and precision, all floating point constants must be represented in
   29990 the target machine's format.  Therefore, the cross compiler cannot
   29991 safely use the host machine's floating point arithmetic; it must emulate
   29992 the target's arithmetic.  To ensure consistency, GCC always uses
   29993 emulation to work with floating point values, even when the host and
   29994 target floating point formats are identical.
   29995 
   29996  The following macros are provided by `real.h' for the compiler to use.
   29997 All parts of the compiler which generate or optimize floating-point
   29998 calculations must use these macros.  They may evaluate their operands
   29999 more than once, so operands must not have side effects.
   30000 
   30001  -- Macro: REAL_VALUE_TYPE
   30002      The C data type to be used to hold a floating point value in the
   30003      target machine's format.  Typically this is a `struct' containing
   30004      an array of `HOST_WIDE_INT', but all code should treat it as an
   30005      opaque quantity.
   30006 
   30007  -- Macro: int REAL_VALUES_EQUAL (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
   30008      Compares for equality the two values, X and Y.  If the target
   30009      floating point format supports negative zeroes and/or NaNs,
   30010      `REAL_VALUES_EQUAL (-0.0, 0.0)' is true, and `REAL_VALUES_EQUAL
   30011      (NaN, NaN)' is false.
   30012 
   30013  -- Macro: int REAL_VALUES_LESS (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
   30014      Tests whether X is less than Y.
   30015 
   30016  -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X)
   30017      Truncates X to a signed integer, rounding toward zero.
   30018 
   30019  -- Macro: unsigned HOST_WIDE_INT REAL_VALUE_UNSIGNED_FIX
   30020           (REAL_VALUE_TYPE X)
   30021      Truncates X to an unsigned integer, rounding toward zero.  If X is
   30022      negative, returns zero.
   30023 
   30024  -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING, enum
   30025           machine_mode MODE)
   30026      Converts STRING into a floating point number in the target
   30027      machine's representation for mode MODE.  This routine can handle
   30028      both decimal and hexadecimal floating point constants, using the
   30029      syntax defined by the C language for both.
   30030 
   30031  -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X)
   30032      Returns 1 if X is negative (including negative zero), 0 otherwise.
   30033 
   30034  -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X)
   30035      Determines whether X represents infinity (positive or negative).
   30036 
   30037  -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X)
   30038      Determines whether X represents a "NaN" (not-a-number).
   30039 
   30040  -- Macro: void REAL_ARITHMETIC (REAL_VALUE_TYPE OUTPUT, enum tree_code
   30041           CODE, REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
   30042      Calculates an arithmetic operation on the two floating point values
   30043      X and Y, storing the result in OUTPUT (which must be a variable).
   30044 
   30045      The operation to be performed is specified by CODE.  Only the
   30046      following codes are supported: `PLUS_EXPR', `MINUS_EXPR',
   30047      `MULT_EXPR', `RDIV_EXPR', `MAX_EXPR', `MIN_EXPR'.
   30048 
   30049      If `REAL_ARITHMETIC' is asked to evaluate division by zero and the
   30050      target's floating point format cannot represent infinity, it will
   30051      call `abort'.  Callers should check for this situation first, using
   30052      `MODE_HAS_INFINITIES'.  *Note Storage Layout::.
   30053 
   30054  -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X)
   30055      Returns the negative of the floating point value X.
   30056 
   30057  -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X)
   30058      Returns the absolute value of X.
   30059 
   30060  -- Macro: REAL_VALUE_TYPE REAL_VALUE_TRUNCATE (REAL_VALUE_TYPE MODE,
   30061           enum machine_mode X)
   30062      Truncates the floating point value X to fit in MODE.  The return
   30063      value is still a full-size `REAL_VALUE_TYPE', but it has an
   30064      appropriate bit pattern to be output as a floating constant whose
   30065      precision accords with mode MODE.
   30066 
   30067  -- Macro: void REAL_VALUE_TO_INT (HOST_WIDE_INT LOW, HOST_WIDE_INT
   30068           HIGH, REAL_VALUE_TYPE X)
   30069      Converts a floating point value X into a double-precision integer
   30070      which is then stored into LOW and HIGH.  If the value is not
   30071      integral, it is truncated.
   30072 
   30073  -- Macro: void REAL_VALUE_FROM_INT (REAL_VALUE_TYPE X, HOST_WIDE_INT
   30074           LOW, HOST_WIDE_INT HIGH, enum machine_mode MODE)
   30075      Converts a double-precision integer found in LOW and HIGH, into a
   30076      floating point value which is then stored into X.  The value is
   30077      truncated to fit in mode MODE.
   30078 
   30079 
   30080 File: gccint.info,  Node: Mode Switching,  Next: Target Attributes,  Prev: Floating Point,  Up: Target Macros
   30081 
   30082 15.24 Mode Switching Instructions
   30083 =================================
   30084 
   30085 The following macros control mode switching optimizations:
   30086 
   30087  -- Macro: OPTIMIZE_MODE_SWITCHING (ENTITY)
   30088      Define this macro if the port needs extra instructions inserted
   30089      for mode switching in an optimizing compilation.
   30090 
   30091      For an example, the SH4 can perform both single and double
   30092      precision floating point operations, but to perform a single
   30093      precision operation, the FPSCR PR bit has to be cleared, while for
   30094      a double precision operation, this bit has to be set.  Changing
   30095      the PR bit requires a general purpose register as a scratch
   30096      register, hence these FPSCR sets have to be inserted before
   30097      reload, i.e. you can't put this into instruction emitting or
   30098      `TARGET_MACHINE_DEPENDENT_REORG'.
   30099 
   30100      You can have multiple entities that are mode-switched, and select
   30101      at run time which entities actually need it.
   30102      `OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY
   30103      that needs mode-switching.  If you define this macro, you also
   30104      have to define `NUM_MODES_FOR_MODE_SWITCHING', `MODE_NEEDED',
   30105      `MODE_PRIORITY_TO_MODE' and `EMIT_MODE_SET'.  `MODE_AFTER',
   30106      `MODE_ENTRY', and `MODE_EXIT' are optional.
   30107 
   30108  -- Macro: NUM_MODES_FOR_MODE_SWITCHING
   30109      If you define `OPTIMIZE_MODE_SWITCHING', you have to define this as
   30110      initializer for an array of integers.  Each initializer element N
   30111      refers to an entity that needs mode switching, and specifies the
   30112      number of different modes that might need to be set for this
   30113      entity.  The position of the initializer in the
   30114      initializer--starting counting at zero--determines the integer
   30115      that is used to refer to the mode-switched entity in question.  In
   30116      macros that take mode arguments / yield a mode result, modes are
   30117      represented as numbers 0 ... N - 1.  N is used to specify that no
   30118      mode switch is needed / supplied.
   30119 
   30120  -- Macro: MODE_NEEDED (ENTITY, INSN)
   30121      ENTITY is an integer specifying a mode-switched entity.  If
   30122      `OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to
   30123      return an integer value not larger than the corresponding element
   30124      in `NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY
   30125      must be switched into prior to the execution of INSN.
   30126 
   30127  -- Macro: MODE_AFTER (MODE, INSN)
   30128      If this macro is defined, it is evaluated for every INSN during
   30129      mode switching.  It determines the mode that an insn results in (if
   30130      different from the incoming mode).
   30131 
   30132  -- Macro: MODE_ENTRY (ENTITY)
   30133      If this macro is defined, it is evaluated for every ENTITY that
   30134      needs mode switching.  It should evaluate to an integer, which is
   30135      a mode that ENTITY is assumed to be switched to at function entry.
   30136      If `MODE_ENTRY' is defined then `MODE_EXIT' must be defined.
   30137 
   30138  -- Macro: MODE_EXIT (ENTITY)
   30139      If this macro is defined, it is evaluated for every ENTITY that
   30140      needs mode switching.  It should evaluate to an integer, which is
   30141      a mode that ENTITY is assumed to be switched to at function exit.
   30142      If `MODE_EXIT' is defined then `MODE_ENTRY' must be defined.
   30143 
   30144  -- Macro: MODE_PRIORITY_TO_MODE (ENTITY, N)
   30145      This macro specifies the order in which modes for ENTITY are
   30146      processed.  0 is the highest priority,
   30147      `NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest.  The value
   30148      of the macro should be an integer designating a mode for ENTITY.
   30149      For any fixed ENTITY, `mode_priority_to_mode' (ENTITY, N) shall be
   30150      a bijection in 0 ...  `num_modes_for_mode_switching[ENTITY] - 1'.
   30151 
   30152  -- Macro: EMIT_MODE_SET (ENTITY, MODE, HARD_REGS_LIVE)
   30153      Generate one or more insns to set ENTITY to MODE.  HARD_REG_LIVE
   30154      is the set of hard registers live at the point where the insn(s)
   30155      are to be inserted.
   30156 
   30157 
   30158 File: gccint.info,  Node: Target Attributes,  Next: MIPS Coprocessors,  Prev: Mode Switching,  Up: Target Macros
   30159 
   30160 15.25 Defining target-specific uses of `__attribute__'
   30161 ======================================================
   30162 
   30163 Target-specific attributes may be defined for functions, data and types.
   30164 These are described using the following target hooks; they also need to
   30165 be documented in `extend.texi'.
   30166 
   30167  -- Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE
   30168      If defined, this target hook points to an array of `struct
   30169      attribute_spec' (defined in `tree.h') specifying the machine
   30170      specific attributes for this target and some of the restrictions
   30171      on the entities to which these attributes are applied and the
   30172      arguments they take.
   30173 
   30174  -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (tree TYPE1, tree
   30175           TYPE2)
   30176      If defined, this target hook is a function which returns zero if
   30177      the attributes on TYPE1 and TYPE2 are incompatible, one if they
   30178      are compatible, and two if they are nearly compatible (which
   30179      causes a warning to be generated).  If this is not defined,
   30180      machine-specific attributes are supposed always to be compatible.
   30181 
   30182  -- Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE)
   30183      If defined, this target hook is a function which assigns default
   30184      attributes to newly defined TYPE.
   30185 
   30186  -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree
   30187           TYPE2)
   30188      Define this target hook if the merging of type attributes needs
   30189      special handling.  If defined, the result is a list of the combined
   30190      `TYPE_ATTRIBUTES' of TYPE1 and TYPE2.  It is assumed that
   30191      `comptypes' has already been called and returned 1.  This function
   30192      may call `merge_attributes' to handle machine-independent merging.
   30193 
   30194  -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree
   30195           NEWDECL)
   30196      Define this target hook if the merging of decl attributes needs
   30197      special handling.  If defined, the result is a list of the combined
   30198      `DECL_ATTRIBUTES' of OLDDECL and NEWDECL.  NEWDECL is a duplicate
   30199      declaration of OLDDECL.  Examples of when this is needed are when
   30200      one attribute overrides another, or when an attribute is nullified
   30201      by a subsequent definition.  This function may call
   30202      `merge_attributes' to handle machine-independent merging.
   30203 
   30204      If the only target-specific handling you require is `dllimport'
   30205      for Microsoft Windows targets, you should define the macro
   30206      `TARGET_DLLIMPORT_DECL_ATTRIBUTES' to `1'.  The compiler will then
   30207      define a function called `merge_dllimport_decl_attributes' which
   30208      can then be defined as the expansion of
   30209      `TARGET_MERGE_DECL_ATTRIBUTES'.  You can also add
   30210      `handle_dll_attribute' in the attribute table for your port to
   30211      perform initial processing of the `dllimport' and `dllexport'
   30212      attributes.  This is done in `i386/cygwin.h' and `i386/i386.c',
   30213      for example.
   30214 
   30215  -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (tree DECL)
   30216      DECL is a variable or function with `__attribute__((dllimport))'
   30217      specified. Use this hook if the target needs to add extra
   30218      validation checks to `handle_dll_attribute'.
   30219 
   30220  -- Macro: TARGET_DECLSPEC
   30221      Define this macro to a nonzero value if you want to treat
   30222      `__declspec(X)' as equivalent to `__attribute((X))'.  By default,
   30223      this behavior is enabled only for targets that define
   30224      `TARGET_DLLIMPORT_DECL_ATTRIBUTES'.  The current implementation of
   30225      `__declspec' is via a built-in macro, but you should not rely on
   30226      this implementation detail.
   30227 
   30228  -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree
   30229           *ATTR_PTR)
   30230      Define this target hook if you want to be able to add attributes
   30231      to a decl when it is being created.  This is normally useful for
   30232      back ends which wish to implement a pragma by using the attributes
   30233      which correspond to the pragma's effect.  The NODE argument is the
   30234      decl which is being created.  The ATTR_PTR argument is a pointer
   30235      to the attribute list for this decl.  The list itself should not
   30236      be modified, since it may be shared with other decls, but
   30237      attributes may be chained on the head of the list and `*ATTR_PTR'
   30238      modified to point to the new attributes, or a copy of the list may
   30239      be made if further changes are needed.
   30240 
   30241  -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (tree
   30242           FNDECL)
   30243      This target hook returns `true' if it is ok to inline FNDECL into
   30244      the current function, despite its having target-specific
   30245      attributes, `false' otherwise.  By default, if a function has a
   30246      target specific attribute attached to it, it will not be inlined.
   30247 
   30248 
   30249 File: gccint.info,  Node: MIPS Coprocessors,  Next: PCH Target,  Prev: Target Attributes,  Up: Target Macros
   30250 
   30251 15.26 Defining coprocessor specifics for MIPS targets.
   30252 ======================================================
   30253 
   30254 The MIPS specification allows MIPS implementations to have as many as 4
   30255 coprocessors, each with as many as 32 private registers.  GCC supports
   30256 accessing these registers and transferring values between the registers
   30257 and memory using asm-ized variables.  For example:
   30258 
   30259        register unsigned int cp0count asm ("c0r1");
   30260        unsigned int d;
   30261 
   30262        d = cp0count + 3;
   30263 
   30264  ("c0r1" is the default name of register 1 in coprocessor 0; alternate
   30265 names may be added as described below, or the default names may be
   30266 overridden entirely in `SUBTARGET_CONDITIONAL_REGISTER_USAGE'.)
   30267 
   30268  Coprocessor registers are assumed to be epilogue-used; sets to them
   30269 will be preserved even if it does not appear that the register is used
   30270 again later in the function.
   30271 
   30272  Another note: according to the MIPS spec, coprocessor 1 (if present) is
   30273 the FPU.  One accesses COP1 registers through standard mips
   30274 floating-point support; they are not included in this mechanism.
   30275 
   30276  There is one macro used in defining the MIPS coprocessor interface
   30277 which you may want to override in subtargets; it is described below.
   30278 
   30279  -- Macro: ALL_COP_ADDITIONAL_REGISTER_NAMES
   30280      A comma-separated list (with leading comma) of pairs describing the
   30281      alternate names of coprocessor registers.  The format of each
   30282      entry should be
   30283           { ALTERNATENAME, REGISTER_NUMBER}
   30284      Default: empty.
   30285 
   30286 
   30287 File: gccint.info,  Node: PCH Target,  Next: C++ ABI,  Prev: MIPS Coprocessors,  Up: Target Macros
   30288 
   30289 15.27 Parameters for Precompiled Header Validity Checking
   30290 =========================================================
   30291 
   30292  -- Target Hook: void *TARGET_GET_PCH_VALIDITY (size_t *SZ)
   30293      This hook returns the data needed by `TARGET_PCH_VALID_P' and sets
   30294      `*SZ' to the size of the data in bytes.
   30295 
   30296  -- Target Hook: const char *TARGET_PCH_VALID_P (const void *DATA,
   30297           size_t SZ)
   30298      This hook checks whether the options used to create a PCH file are
   30299      compatible with the current settings.  It returns `NULL' if so and
   30300      a suitable error message if not.  Error messages will be presented
   30301      to the user and must be localized using `_(MSG)'.
   30302 
   30303      DATA is the data that was returned by `TARGET_GET_PCH_VALIDITY'
   30304      when the PCH file was created and SZ is the size of that data in
   30305      bytes.  It's safe to assume that the data was created by the same
   30306      version of the compiler, so no format checking is needed.
   30307 
   30308      The default definition of `default_pch_valid_p' should be suitable
   30309      for most targets.
   30310 
   30311  -- Target Hook: const char *TARGET_CHECK_PCH_TARGET_FLAGS (int
   30312           PCH_FLAGS)
   30313      If this hook is nonnull, the default implementation of
   30314      `TARGET_PCH_VALID_P' will use it to check for compatible values of
   30315      `target_flags'.  PCH_FLAGS specifies the value that `target_flags'
   30316      had when the PCH file was created.  The return value is the same
   30317      as for `TARGET_PCH_VALID_P'.
   30318 
   30319 
   30320 File: gccint.info,  Node: C++ ABI,  Next: Misc,  Prev: PCH Target,  Up: Target Macros
   30321 
   30322 15.28 C++ ABI parameters
   30323 ========================
   30324 
   30325  -- Target Hook: tree TARGET_CXX_GUARD_TYPE (void)
   30326      Define this hook to override the integer type used for guard
   30327      variables.  These are used to implement one-time construction of
   30328      static objects.  The default is long_long_integer_type_node.
   30329 
   30330  -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void)
   30331      This hook determines how guard variables are used.  It should
   30332      return `false' (the default) if first byte should be used.  A
   30333      return value of `true' indicates the least significant bit should
   30334      be used.
   30335 
   30336  -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE)
   30337      This hook returns the size of the cookie to use when allocating an
   30338      array whose elements have the indicated TYPE.  Assumes that it is
   30339      already known that a cookie is needed.  The default is `max(sizeof
   30340      (size_t), alignof(type))', as defined in section 2.7 of the
   30341      IA64/Generic C++ ABI.
   30342 
   30343  -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void)
   30344      This hook should return `true' if the element size should be
   30345      stored in array cookies.  The default is to return `false'.
   30346 
   30347  -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int
   30348           IMPORT_EXPORT)
   30349      If defined by a backend this hook allows the decision made to
   30350      export class TYPE to be overruled.  Upon entry IMPORT_EXPORT will
   30351      contain 1 if the class is going to be exported, -1 if it is going
   30352      to be imported and 0 otherwise.  This function should return the
   30353      modified value and perform any other actions necessary to support
   30354      the backend's targeted operating system.
   30355 
   30356  -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void)
   30357      This hook should return `true' if constructors and destructors
   30358      return the address of the object created/destroyed.  The default
   30359      is to return `false'.
   30360 
   30361  -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void)
   30362      This hook returns true if the key method for a class (i.e., the
   30363      method which, if defined in the current translation unit, causes
   30364      the virtual table to be emitted) may be an inline function.  Under
   30365      the standard Itanium C++ ABI the key method may be an inline
   30366      function so long as the function is not declared inline in the
   30367      class definition.  Under some variants of the ABI, an inline
   30368      function can never be the key method.  The default is to return
   30369      `true'.
   30370 
   30371  -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree
   30372           DECL)
   30373      DECL is a virtual table, virtual table table, typeinfo object, or
   30374      other similar implicit class data object that will be emitted with
   30375      external linkage in this translation unit.  No ELF visibility has
   30376      been explicitly specified.  If the target needs to specify a
   30377      visibility other than that of the containing class, use this hook
   30378      to set `DECL_VISIBILITY' and `DECL_VISIBILITY_SPECIFIED'.
   30379 
   30380  -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void)
   30381      This hook returns true (the default) if virtual tables and other
   30382      similar implicit class data objects are always COMDAT if they have
   30383      external linkage.  If this hook returns false, then class data for
   30384      classes whose virtual table will be emitted in only one translation
   30385      unit will not be COMDAT.
   30386 
   30387  -- Target Hook: bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void)
   30388      This hook returns true (the default) if the RTTI information for
   30389      the basic types which is defined in the C++ runtime should always
   30390      be COMDAT, false if it should not be COMDAT.
   30391 
   30392  -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void)
   30393      This hook returns true if `__aeabi_atexit' (as defined by the ARM
   30394      EABI) should be used to register static destructors when
   30395      `-fuse-cxa-atexit' is in effect.  The default is to return false
   30396      to use `__cxa_atexit'.
   30397 
   30398  -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void)
   30399      This hook returns true if the target `atexit' function can be used
   30400      in the same manner as `__cxa_atexit' to register C++ static
   30401      destructors. This requires that `atexit'-registered functions in
   30402      shared libraries are run in the correct order when the libraries
   30403      are unloaded. The default is to return false.
   30404 
   30405  -- Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree TYPE)
   30406      TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has
   30407      just been defined.  Use this hook to make adjustments to the class
   30408      (eg, tweak visibility or perform any other required target
   30409      modifications).
   30410 
   30411 
   30412 File: gccint.info,  Node: Misc,  Prev: C++ ABI,  Up: Target Macros
   30413 
   30414 15.29 Miscellaneous Parameters
   30415 ==============================
   30416 
   30417 Here are several miscellaneous parameters.
   30418 
   30419  -- Macro: HAS_LONG_COND_BRANCH
   30420      Define this boolean macro to indicate whether or not your
   30421      architecture has conditional branches that can span all of memory.
   30422      It is used in conjunction with an optimization that partitions
   30423      hot and cold basic blocks into separate sections of the
   30424      executable.  If this macro is set to false, gcc will convert any
   30425      conditional branches that attempt to cross between sections into
   30426      unconditional branches or indirect jumps.
   30427 
   30428  -- Macro: HAS_LONG_UNCOND_BRANCH
   30429      Define this boolean macro to indicate whether or not your
   30430      architecture has unconditional branches that can span all of
   30431      memory.  It is used in conjunction with an optimization that
   30432      partitions hot and cold basic blocks into separate sections of the
   30433      executable.  If this macro is set to false, gcc will convert any
   30434      unconditional branches that attempt to cross between sections into
   30435      indirect jumps.
   30436 
   30437  -- Macro: CASE_VECTOR_MODE
   30438      An alias for a machine mode name.  This is the machine mode that
   30439      elements of a jump-table should have.
   30440 
   30441  -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY)
   30442      Optional: return the preferred mode for an `addr_diff_vec' when
   30443      the minimum and maximum offset are known.  If you define this, it
   30444      enables extra code in branch shortening to deal with
   30445      `addr_diff_vec'.  To make this work, you also have to define
   30446      `INSN_ALIGN' and make the alignment for `addr_diff_vec' explicit.
   30447      The BODY argument is provided so that the offset_unsigned and scale
   30448      flags can be updated.
   30449 
   30450  -- Macro: CASE_VECTOR_PC_RELATIVE
   30451      Define this macro to be a C expression to indicate when jump-tables
   30452      should contain relative addresses.  You need not define this macro
   30453      if jump-tables never contain relative addresses, or jump-tables
   30454      should contain relative addresses only when `-fPIC' or `-fPIC' is
   30455      in effect.
   30456 
   30457  -- Macro: CASE_VALUES_THRESHOLD
   30458      Define this to be the smallest number of different values for
   30459      which it is best to use a jump-table instead of a tree of
   30460      conditional branches.  The default is four for machines with a
   30461      `casesi' instruction and five otherwise.  This is best for most
   30462      machines.
   30463 
   30464  -- Macro: CASE_USE_BIT_TESTS
   30465      Define this macro to be a C expression to indicate whether C switch
   30466      statements may be implemented by a sequence of bit tests.  This is
   30467      advantageous on processors that can efficiently implement left
   30468      shift of 1 by the number of bits held in a register, but
   30469      inappropriate on targets that would require a loop.  By default,
   30470      this macro returns `true' if the target defines an `ashlsi3'
   30471      pattern, and `false' otherwise.
   30472 
   30473  -- Macro: WORD_REGISTER_OPERATIONS
   30474      Define this macro if operations between registers with integral
   30475      mode smaller than a word are always performed on the entire
   30476      register.  Most RISC machines have this property and most CISC
   30477      machines do not.
   30478 
   30479  -- Macro: LOAD_EXTEND_OP (MEM_MODE)
   30480      Define this macro to be a C expression indicating when insns that
   30481      read memory in MEM_MODE, an integral mode narrower than a word,
   30482      set the bits outside of MEM_MODE to be either the sign-extension
   30483      or the zero-extension of the data read.  Return `SIGN_EXTEND' for
   30484      values of MEM_MODE for which the insn sign-extends, `ZERO_EXTEND'
   30485      for which it zero-extends, and `UNKNOWN' for other modes.
   30486 
   30487      This macro is not called with MEM_MODE non-integral or with a width
   30488      greater than or equal to `BITS_PER_WORD', so you may return any
   30489      value in this case.  Do not define this macro if it would always
   30490      return `UNKNOWN'.  On machines where this macro is defined, you
   30491      will normally define it as the constant `SIGN_EXTEND' or
   30492      `ZERO_EXTEND'.
   30493 
   30494      You may return a non-`UNKNOWN' value even if for some hard
   30495      registers the sign extension is not performed, if for the
   30496      `REGNO_REG_CLASS' of these hard registers
   30497      `CANNOT_CHANGE_MODE_CLASS' returns nonzero when the FROM mode is
   30498      MEM_MODE and the TO mode is any integral mode larger than this but
   30499      not larger than `word_mode'.
   30500 
   30501      You must return `UNKNOWN' if for some hard registers that allow
   30502      this mode, `CANNOT_CHANGE_MODE_CLASS' says that they cannot change
   30503      to `word_mode', but that they can change to another integral mode
   30504      that is larger then MEM_MODE but still smaller than `word_mode'.
   30505 
   30506  -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND
   30507      Define this macro if loading short immediate values into registers
   30508      sign extends.
   30509 
   30510  -- Macro: FIXUNS_TRUNC_LIKE_FIX_TRUNC
   30511      Define this macro if the same instructions that convert a floating
   30512      point number to a signed fixed point number also convert validly
   30513      to an unsigned one.
   30514 
   30515  -- Target Hook: int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL (enum
   30516           machine_mode MODE)
   30517      When `-ffast-math' is in effect, GCC tries to optimize divisions
   30518      by the same divisor, by turning them into multiplications by the
   30519      reciprocal.  This target hook specifies the minimum number of
   30520      divisions that should be there for GCC to perform the optimization
   30521      for a variable of mode MODE.  The default implementation returns 3
   30522      if the machine has an instruction for the division, and 2 if it
   30523      does not.
   30524 
   30525  -- Macro: MOVE_MAX
   30526      The maximum number of bytes that a single instruction can move
   30527      quickly between memory and registers or between two memory
   30528      locations.
   30529 
   30530  -- Macro: MAX_MOVE_MAX
   30531      The maximum number of bytes that a single instruction can move
   30532      quickly between memory and registers or between two memory
   30533      locations.  If this is undefined, the default is `MOVE_MAX'.
   30534      Otherwise, it is the constant value that is the largest value that
   30535      `MOVE_MAX' can have at run-time.
   30536 
   30537  -- Macro: SHIFT_COUNT_TRUNCATED
   30538      A C expression that is nonzero if on this machine the number of
   30539      bits actually used for the count of a shift operation is equal to
   30540      the number of bits needed to represent the size of the object
   30541      being shifted.  When this macro is nonzero, the compiler will
   30542      assume that it is safe to omit a sign-extend, zero-extend, and
   30543      certain bitwise `and' instructions that truncates the count of a
   30544      shift operation.  On machines that have instructions that act on
   30545      bit-fields at variable positions, which may include `bit test'
   30546      instructions, a nonzero `SHIFT_COUNT_TRUNCATED' also enables
   30547      deletion of truncations of the values that serve as arguments to
   30548      bit-field instructions.
   30549 
   30550      If both types of instructions truncate the count (for shifts) and
   30551      position (for bit-field operations), or if no variable-position
   30552      bit-field instructions exist, you should define this macro.
   30553 
   30554      However, on some machines, such as the 80386 and the 680x0,
   30555      truncation only applies to shift operations and not the (real or
   30556      pretended) bit-field operations.  Define `SHIFT_COUNT_TRUNCATED'
   30557      to be zero on such machines.  Instead, add patterns to the `md'
   30558      file that include the implied truncation of the shift instructions.
   30559 
   30560      You need not define this macro if it would always have the value
   30561      of zero.
   30562 
   30563  -- Target Hook: int TARGET_SHIFT_TRUNCATION_MASK (enum machine_mode
   30564           MODE)
   30565      This function describes how the standard shift patterns for MODE
   30566      deal with shifts by negative amounts or by more than the width of
   30567      the mode.  *Note shift patterns::.
   30568 
   30569      On many machines, the shift patterns will apply a mask M to the
   30570      shift count, meaning that a fixed-width shift of X by Y is
   30571      equivalent to an arbitrary-width shift of X by Y & M.  If this is
   30572      true for mode MODE, the function should return M, otherwise it
   30573      should return 0.  A return value of 0 indicates that no particular
   30574      behavior is guaranteed.
   30575 
   30576      Note that, unlike `SHIFT_COUNT_TRUNCATED', this function does
   30577      _not_ apply to general shift rtxes; it applies only to instructions
   30578      that are generated by the named shift patterns.
   30579 
   30580      The default implementation of this function returns
   30581      `GET_MODE_BITSIZE (MODE) - 1' if `SHIFT_COUNT_TRUNCATED' and 0
   30582      otherwise.  This definition is always safe, but if
   30583      `SHIFT_COUNT_TRUNCATED' is false, and some shift patterns
   30584      nevertheless truncate the shift count, you may get better code by
   30585      overriding it.
   30586 
   30587  -- Macro: TRULY_NOOP_TRUNCATION (OUTPREC, INPREC)
   30588      A C expression which is nonzero if on this machine it is safe to
   30589      "convert" an integer of INPREC bits to one of OUTPREC bits (where
   30590      OUTPREC is smaller than INPREC) by merely operating on it as if it
   30591      had only OUTPREC bits.
   30592 
   30593      On many machines, this expression can be 1.
   30594 
   30595      When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for
   30596      modes for which `MODES_TIEABLE_P' is 0, suboptimal code can result.
   30597      If this is the case, making `TRULY_NOOP_TRUNCATION' return 0 in
   30598      such cases may improve things.
   30599 
   30600  -- Target Hook: int TARGET_MODE_REP_EXTENDED (enum machine_mode MODE,
   30601           enum machine_mode REP_MODE)
   30602      The representation of an integral mode can be such that the values
   30603      are always extended to a wider integral mode.  Return
   30604      `SIGN_EXTEND' if values of MODE are represented in sign-extended
   30605      form to REP_MODE.  Return `UNKNOWN' otherwise.  (Currently, none
   30606      of the targets use zero-extended representation this way so unlike
   30607      `LOAD_EXTEND_OP', `TARGET_MODE_REP_EXTENDED' is expected to return
   30608      either `SIGN_EXTEND' or `UNKNOWN'.  Also no target extends MODE to
   30609      MODE_REP so that MODE_REP is not the next widest integral mode and
   30610      currently we take advantage of this fact.)
   30611 
   30612      Similarly to `LOAD_EXTEND_OP' you may return a non-`UNKNOWN' value
   30613      even if the extension is not performed on certain hard registers
   30614      as long as for the `REGNO_REG_CLASS' of these hard registers
   30615      `CANNOT_CHANGE_MODE_CLASS' returns nonzero.
   30616 
   30617      Note that `TARGET_MODE_REP_EXTENDED' and `LOAD_EXTEND_OP' describe
   30618      two related properties.  If you define `TARGET_MODE_REP_EXTENDED
   30619      (mode, word_mode)' you probably also want to define
   30620      `LOAD_EXTEND_OP (mode)' to return the same type of extension.
   30621 
   30622      In order to enforce the representation of `mode',
   30623      `TRULY_NOOP_TRUNCATION' should return false when truncating to
   30624      `mode'.
   30625 
   30626  -- Macro: STORE_FLAG_VALUE
   30627      A C expression describing the value returned by a comparison
   30628      operator with an integral mode and stored by a store-flag
   30629      instruction (`sCOND') when the condition is true.  This
   30630      description must apply to _all_ the `sCOND' patterns and all the
   30631      comparison operators whose results have a `MODE_INT' mode.
   30632 
   30633      A value of 1 or -1 means that the instruction implementing the
   30634      comparison operator returns exactly 1 or -1 when the comparison is
   30635      true and 0 when the comparison is false.  Otherwise, the value
   30636      indicates which bits of the result are guaranteed to be 1 when the
   30637      comparison is true.  This value is interpreted in the mode of the
   30638      comparison operation, which is given by the mode of the first
   30639      operand in the `sCOND' pattern.  Either the low bit or the sign
   30640      bit of `STORE_FLAG_VALUE' be on.  Presently, only those bits are
   30641      used by the compiler.
   30642 
   30643      If `STORE_FLAG_VALUE' is neither 1 or -1, the compiler will
   30644      generate code that depends only on the specified bits.  It can also
   30645      replace comparison operators with equivalent operations if they
   30646      cause the required bits to be set, even if the remaining bits are
   30647      undefined.  For example, on a machine whose comparison operators
   30648      return an `SImode' value and where `STORE_FLAG_VALUE' is defined as
   30649      `0x80000000', saying that just the sign bit is relevant, the
   30650      expression
   30651 
   30652           (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0))
   30653 
   30654      can be converted to
   30655 
   30656           (ashift:SI X (const_int N))
   30657 
   30658      where N is the appropriate shift count to move the bit being
   30659      tested into the sign bit.
   30660 
   30661      There is no way to describe a machine that always sets the
   30662      low-order bit for a true value, but does not guarantee the value
   30663      of any other bits, but we do not know of any machine that has such
   30664      an instruction.  If you are trying to port GCC to such a machine,
   30665      include an instruction to perform a logical-and of the result with
   30666      1 in the pattern for the comparison operators and let us know at
   30667      <gcc (a] gcc.gnu.org>.
   30668 
   30669      Often, a machine will have multiple instructions that obtain a
   30670      value from a comparison (or the condition codes).  Here are rules
   30671      to guide the choice of value for `STORE_FLAG_VALUE', and hence the
   30672      instructions to be used:
   30673 
   30674         * Use the shortest sequence that yields a valid definition for
   30675           `STORE_FLAG_VALUE'.  It is more efficient for the compiler to
   30676           "normalize" the value (convert it to, e.g., 1 or 0) than for
   30677           the comparison operators to do so because there may be
   30678           opportunities to combine the normalization with other
   30679           operations.
   30680 
   30681         * For equal-length sequences, use a value of 1 or -1, with -1
   30682           being slightly preferred on machines with expensive jumps and
   30683           1 preferred on other machines.
   30684 
   30685         * As a second choice, choose a value of `0x80000001' if
   30686           instructions exist that set both the sign and low-order bits
   30687           but do not define the others.
   30688 
   30689         * Otherwise, use a value of `0x80000000'.
   30690 
   30691      Many machines can produce both the value chosen for
   30692      `STORE_FLAG_VALUE' and its negation in the same number of
   30693      instructions.  On those machines, you should also define a pattern
   30694      for those cases, e.g., one matching
   30695 
   30696           (set A (neg:M (ne:M B C)))
   30697 
   30698      Some machines can also perform `and' or `plus' operations on
   30699      condition code values with less instructions than the corresponding
   30700      `sCOND' insn followed by `and' or `plus'.  On those machines,
   30701      define the appropriate patterns.  Use the names `incscc' and
   30702      `decscc', respectively, for the patterns which perform `plus' or
   30703      `minus' operations on condition code values.  See `rs6000.md' for
   30704      some examples.  The GNU Superoptizer can be used to find such
   30705      instruction sequences on other machines.
   30706 
   30707      If this macro is not defined, the default value, 1, is used.  You
   30708      need not define `STORE_FLAG_VALUE' if the machine has no store-flag
   30709      instructions, or if the value generated by these instructions is 1.
   30710 
   30711  -- Macro: FLOAT_STORE_FLAG_VALUE (MODE)
   30712      A C expression that gives a nonzero `REAL_VALUE_TYPE' value that is
   30713      returned when comparison operators with floating-point results are
   30714      true.  Define this macro on machines that have comparison
   30715      operations that return floating-point values.  If there are no
   30716      such operations, do not define this macro.
   30717 
   30718  -- Macro: VECTOR_STORE_FLAG_VALUE (MODE)
   30719      A C expression that gives a rtx representing the nonzero true
   30720      element for vector comparisons.  The returned rtx should be valid
   30721      for the inner mode of MODE which is guaranteed to be a vector
   30722      mode.  Define this macro on machines that have vector comparison
   30723      operations that return a vector result.  If there are no such
   30724      operations, do not define this macro.  Typically, this macro is
   30725      defined as `const1_rtx' or `constm1_rtx'.  This macro may return
   30726      `NULL_RTX' to prevent the compiler optimizing such vector
   30727      comparison operations for the given mode.
   30728 
   30729  -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
   30730  -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
   30731      A C expression that indicates whether the architecture defines a
   30732      value for `clz' or `ctz' with a zero operand.  A result of `0'
   30733      indicates the value is undefined.  If the value is defined for
   30734      only the RTL expression, the macro should evaluate to `1'; if the
   30735      value applies also to the corresponding optab entry (which is
   30736      normally the case if it expands directly into the corresponding
   30737      RTL), then the macro should evaluate to `2'.  In the cases where
   30738      the value is defined, VALUE should be set to this value.
   30739 
   30740      If this macro is not defined, the value of `clz' or `ctz' at zero
   30741      is assumed to be undefined.
   30742 
   30743      This macro must be defined if the target's expansion for `ffs'
   30744      relies on a particular value to get correct results.  Otherwise it
   30745      is not necessary, though it may be used to optimize some corner
   30746      cases, and to provide a default expansion for the `ffs' optab.
   30747 
   30748      Note that regardless of this macro the "definedness" of `clz' and
   30749      `ctz' at zero do _not_ extend to the builtin functions visible to
   30750      the user.  Thus one may be free to adjust the value at will to
   30751      match the target expansion of these operations without fear of
   30752      breaking the API.
   30753 
   30754  -- Macro: Pmode
   30755      An alias for the machine mode for pointers.  On most machines,
   30756      define this to be the integer mode corresponding to the width of a
   30757      hardware pointer; `SImode' on 32-bit machine or `DImode' on 64-bit
   30758      machines.  On some machines you must define this to be one of the
   30759      partial integer modes, such as `PSImode'.
   30760 
   30761      The width of `Pmode' must be at least as large as the value of
   30762      `POINTER_SIZE'.  If it is not equal, you must define the macro
   30763      `POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to
   30764      `Pmode'.
   30765 
   30766  -- Macro: FUNCTION_MODE
   30767      An alias for the machine mode used for memory references to
   30768      functions being called, in `call' RTL expressions.  On most CISC
   30769      machines, where an instruction can begin at any byte address, this
   30770      should be `QImode'.  On most RISC machines, where all instructions
   30771      have fixed size and alignment, this should be a mode with the same
   30772      size and alignment as the machine instruction words - typically
   30773      `SImode' or `HImode'.
   30774 
   30775  -- Macro: STDC_0_IN_SYSTEM_HEADERS
   30776      In normal operation, the preprocessor expands `__STDC__' to the
   30777      constant 1, to signify that GCC conforms to ISO Standard C.  On
   30778      some hosts, like Solaris, the system compiler uses a different
   30779      convention, where `__STDC__' is normally 0, but is 1 if the user
   30780      specifies strict conformance to the C Standard.
   30781 
   30782      Defining `STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host
   30783      convention when processing system header files, but when
   30784      processing user files `__STDC__' will always expand to 1.
   30785 
   30786  -- Macro: NO_IMPLICIT_EXTERN_C
   30787      Define this macro if the system header files support C++ as well
   30788      as C.  This macro inhibits the usual method of using system header
   30789      files in C++, which is to pretend that the file's contents are
   30790      enclosed in `extern "C" {...}'.
   30791 
   30792  -- Macro: REGISTER_TARGET_PRAGMAS ()
   30793      Define this macro if you want to implement any target-specific
   30794      pragmas.  If defined, it is a C expression which makes a series of
   30795      calls to `c_register_pragma' or `c_register_pragma_with_expansion'
   30796      for each pragma.  The macro may also do any setup required for the
   30797      pragmas.
   30798 
   30799      The primary reason to define this macro is to provide
   30800      compatibility with other compilers for the same target.  In
   30801      general, we discourage definition of target-specific pragmas for
   30802      GCC.
   30803 
   30804      If the pragma can be implemented by attributes then you should
   30805      consider defining the target hook `TARGET_INSERT_ATTRIBUTES' as
   30806      well.
   30807 
   30808      Preprocessor macros that appear on pragma lines are not expanded.
   30809      All `#pragma' directives that do not match any registered pragma
   30810      are silently ignored, unless the user specifies
   30811      `-Wunknown-pragmas'.
   30812 
   30813  -- Function: void c_register_pragma (const char *SPACE, const char
   30814           *NAME, void (*CALLBACK) (struct cpp_reader *))
   30815  -- Function: void c_register_pragma_with_expansion (const char *SPACE,
   30816           const char *NAME, void (*CALLBACK) (struct cpp_reader *))
   30817      Each call to `c_register_pragma' or
   30818      `c_register_pragma_with_expansion' establishes one pragma.  The
   30819      CALLBACK routine will be called when the preprocessor encounters a
   30820      pragma of the form
   30821 
   30822           #pragma [SPACE] NAME ...
   30823 
   30824      SPACE is the case-sensitive namespace of the pragma, or `NULL' to
   30825      put the pragma in the global namespace.  The callback routine
   30826      receives PFILE as its first argument, which can be passed on to
   30827      cpplib's functions if necessary.  You can lex tokens after the
   30828      NAME by calling `pragma_lex'.  Tokens that are not read by the
   30829      callback will be silently ignored.  The end of the line is
   30830      indicated by a token of type `CPP_EOF'.  Macro expansion occurs on
   30831      the arguments of pragmas registered with
   30832      `c_register_pragma_with_expansion' but not on the arguments of
   30833      pragmas registered with `c_register_pragma'.
   30834 
   30835      Note that the use of `pragma_lex' is specific to the C and C++
   30836      compilers.  It will not work in the Java or Fortran compilers, or
   30837      any other language compilers for that matter.  Thus if
   30838      `pragma_lex' is going to be called from target-specific code, it
   30839      must only be done so when building the C and C++ compilers.  This
   30840      can be done by defining the variables `c_target_objs' and
   30841      `cxx_target_objs' in the target entry in the `config.gcc' file.
   30842      These variables should name the target-specific, language-specific
   30843      object file which contains the code that uses `pragma_lex'.  Note
   30844      it will also be necessary to add a rule to the makefile fragment
   30845      pointed to by `tmake_file' that shows how to build this object
   30846      file.
   30847 
   30848  -- Macro: HANDLE_SYSV_PRAGMA
   30849      Define this macro (to a value of 1) if you want the System V style
   30850      pragmas `#pragma pack(<n>)' and `#pragma weak <name> [=<value>]'
   30851      to be supported by gcc.
   30852 
   30853      The pack pragma specifies the maximum alignment (in bytes) of
   30854      fields within a structure, in much the same way as the
   30855      `__aligned__' and `__packed__' `__attribute__'s do.  A pack value
   30856      of zero resets the behavior to the default.
   30857 
   30858      A subtlety for Microsoft Visual C/C++ style bit-field packing
   30859      (e.g. -mms-bitfields) for targets that support it: When a
   30860      bit-field is inserted into a packed record, the whole size of the
   30861      underlying type is used by one or more same-size adjacent
   30862      bit-fields (that is, if its long:3, 32 bits is used in the record,
   30863      and any additional adjacent long bit-fields are packed into the
   30864      same chunk of 32 bits.  However, if the size changes, a new field
   30865      of that size is allocated).
   30866 
   30867      If both MS bit-fields and `__attribute__((packed))' are used, the
   30868      latter will take precedence.  If `__attribute__((packed))' is used
   30869      on a single field when MS bit-fields are in use, it will take
   30870      precedence for that field, but the alignment of the rest of the
   30871      structure may affect its placement.
   30872 
   30873      The weak pragma only works if `SUPPORTS_WEAK' and
   30874      `ASM_WEAKEN_LABEL' are defined.  If enabled it allows the creation
   30875      of specifically named weak labels, optionally with a value.
   30876 
   30877  -- Macro: HANDLE_PRAGMA_PACK_PUSH_POP
   30878      Define this macro (to a value of 1) if you want to support the
   30879      Win32 style pragmas `#pragma pack(push[,N])' and `#pragma
   30880      pack(pop)'.  The `pack(push,[N])' pragma specifies the maximum
   30881      alignment (in bytes) of fields within a structure, in much the
   30882      same way as the `__aligned__' and `__packed__' `__attribute__'s
   30883      do.  A pack value of zero resets the behavior to the default.
   30884      Successive invocations of this pragma cause the previous values to
   30885      be stacked, so that invocations of `#pragma pack(pop)' will return
   30886      to the previous value.
   30887 
   30888  -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION
   30889      Define this macro, as well as `HANDLE_SYSV_PRAGMA', if macros
   30890      should be expanded in the arguments of `#pragma pack'.
   30891 
   30892  -- Macro: TARGET_DEFAULT_PACK_STRUCT
   30893      If your target requires a structure packing default other than 0
   30894      (meaning the machine default), define this macro to the necessary
   30895      value (in bytes).  This must be a value that would also be valid
   30896      to use with `#pragma pack()' (that is, a small power of two).
   30897 
   30898  -- Macro: HANDLE_PRAGMA_PUSH_POP_MACRO
   30899      Define this macro if you want to support the Win32 style pragmas
   30900      `#pragma push_macro(macro-name-as-string)' and `#pragma
   30901      pop_macro(macro-name-as-string)'.  The `#pragma push_macro(
   30902      macro-name-as-string)' pragma saves the named macro and via
   30903      `#pragma pop_macro(macro-name-as-string)' it will return to the
   30904      previous value.
   30905 
   30906  -- Macro: DOLLARS_IN_IDENTIFIERS
   30907      Define this macro to control use of the character `$' in
   30908      identifier names for the C family of languages.  0 means `$' is
   30909      not allowed by default; 1 means it is allowed.  1 is the default;
   30910      there is no need to define this macro in that case.
   30911 
   30912  -- Macro: NO_DOLLAR_IN_LABEL
   30913      Define this macro if the assembler does not accept the character
   30914      `$' in label names.  By default constructors and destructors in
   30915      G++ have `$' in the identifiers.  If this macro is defined, `.' is
   30916      used instead.
   30917 
   30918  -- Macro: NO_DOT_IN_LABEL
   30919      Define this macro if the assembler does not accept the character
   30920      `.' in label names.  By default constructors and destructors in G++
   30921      have names that use `.'.  If this macro is defined, these names
   30922      are rewritten to avoid `.'.
   30923 
   30924  -- Macro: INSN_SETS_ARE_DELAYED (INSN)
   30925      Define this macro as a C expression that is nonzero if it is safe
   30926      for the delay slot scheduler to place instructions in the delay
   30927      slot of INSN, even if they appear to use a resource set or
   30928      clobbered in INSN.  INSN is always a `jump_insn' or an `insn'; GCC
   30929      knows that every `call_insn' has this behavior.  On machines where
   30930      some `insn' or `jump_insn' is really a function call and hence has
   30931      this behavior, you should define this macro.
   30932 
   30933      You need not define this macro if it would always return zero.
   30934 
   30935  -- Macro: INSN_REFERENCES_ARE_DELAYED (INSN)
   30936      Define this macro as a C expression that is nonzero if it is safe
   30937      for the delay slot scheduler to place instructions in the delay
   30938      slot of INSN, even if they appear to set or clobber a resource
   30939      referenced in INSN.  INSN is always a `jump_insn' or an `insn'.
   30940      On machines where some `insn' or `jump_insn' is really a function
   30941      call and its operands are registers whose use is actually in the
   30942      subroutine it calls, you should define this macro.  Doing so
   30943      allows the delay slot scheduler to move instructions which copy
   30944      arguments into the argument registers into the delay slot of INSN.
   30945 
   30946      You need not define this macro if it would always return zero.
   30947 
   30948  -- Macro: MULTIPLE_SYMBOL_SPACES
   30949      Define this macro as a C expression that is nonzero if, in some
   30950      cases, global symbols from one translation unit may not be bound
   30951      to undefined symbols in another translation unit without user
   30952      intervention.  For instance, under Microsoft Windows symbols must
   30953      be explicitly imported from shared libraries (DLLs).
   30954 
   30955      You need not define this macro if it would always evaluate to zero.
   30956 
   30957  -- Target Hook: tree TARGET_MD_ASM_CLOBBERS (tree OUTPUTS, tree
   30958           INPUTS, tree CLOBBERS)
   30959      This target hook should add to CLOBBERS `STRING_CST' trees for any
   30960      hard regs the port wishes to automatically clobber for an asm.  It
   30961      should return the result of the last `tree_cons' used to add a
   30962      clobber.  The OUTPUTS, INPUTS and CLOBBER lists are the
   30963      corresponding parameters to the asm and may be inspected to avoid
   30964      clobbering a register that is an input or output of the asm.  You
   30965      can use `tree_overlaps_hard_reg_set', declared in `tree.h', to test
   30966      for overlap with regards to asm-declared registers.
   30967 
   30968  -- Macro: MATH_LIBRARY
   30969      Define this macro as a C string constant for the linker argument
   30970      to link in the system math library, or `""' if the target does not
   30971      have a separate math library.
   30972 
   30973      You need only define this macro if the default of `"-lm"' is wrong.
   30974 
   30975  -- Macro: LIBRARY_PATH_ENV
   30976      Define this macro as a C string constant for the environment
   30977      variable that specifies where the linker should look for libraries.
   30978 
   30979      You need only define this macro if the default of `"LIBRARY_PATH"'
   30980      is wrong.
   30981 
   30982  -- Macro: TARGET_POSIX_IO
   30983      Define this macro if the target supports the following POSIX file
   30984      functions, access, mkdir and  file locking with fcntl / F_SETLKW.
   30985      Defining `TARGET_POSIX_IO' will enable the test coverage code to
   30986      use file locking when exiting a program, which avoids race
   30987      conditions if the program has forked. It will also create
   30988      directories at run-time for cross-profiling.
   30989 
   30990  -- Macro: MAX_CONDITIONAL_EXECUTE
   30991      A C expression for the maximum number of instructions to execute
   30992      via conditional execution instructions instead of a branch.  A
   30993      value of `BRANCH_COST'+1 is the default if the machine does not
   30994      use cc0, and 1 if it does use cc0.
   30995 
   30996  -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR)
   30997      Used if the target needs to perform machine-dependent
   30998      modifications on the conditionals used for turning basic blocks
   30999      into conditionally executed code.  CE_INFO points to a data
   31000      structure, `struct ce_if_block', which contains information about
   31001      the currently processed blocks.  TRUE_EXPR and FALSE_EXPR are the
   31002      tests that are used for converting the then-block and the
   31003      else-block, respectively.  Set either TRUE_EXPR or FALSE_EXPR to a
   31004      null pointer if the tests cannot be converted.
   31005 
   31006  -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR,
   31007           FALSE_EXPR)
   31008      Like `IFCVT_MODIFY_TESTS', but used when converting more
   31009      complicated if-statements into conditions combined by `and' and
   31010      `or' operations.  BB contains the basic block that contains the
   31011      test that is currently being processed and about to be turned into
   31012      a condition.
   31013 
   31014  -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN)
   31015      A C expression to modify the PATTERN of an INSN that is to be
   31016      converted to conditional execution format.  CE_INFO points to a
   31017      data structure, `struct ce_if_block', which contains information
   31018      about the currently processed blocks.
   31019 
   31020  -- Macro: IFCVT_MODIFY_FINAL (CE_INFO)
   31021      A C expression to perform any final machine dependent
   31022      modifications in converting code to conditional execution.  The
   31023      involved basic blocks can be found in the `struct ce_if_block'
   31024      structure that is pointed to by CE_INFO.
   31025 
   31026  -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO)
   31027      A C expression to cancel any machine dependent modifications in
   31028      converting code to conditional execution.  The involved basic
   31029      blocks can be found in the `struct ce_if_block' structure that is
   31030      pointed to by CE_INFO.
   31031 
   31032  -- Macro: IFCVT_INIT_EXTRA_FIELDS (CE_INFO)
   31033      A C expression to initialize any extra fields in a `struct
   31034      ce_if_block' structure, which are defined by the
   31035      `IFCVT_EXTRA_FIELDS' macro.
   31036 
   31037  -- Macro: IFCVT_EXTRA_FIELDS
   31038      If defined, it should expand to a set of field declarations that
   31039      will be added to the `struct ce_if_block' structure.  These should
   31040      be initialized by the `IFCVT_INIT_EXTRA_FIELDS' macro.
   31041 
   31042  -- Target Hook: void TARGET_MACHINE_DEPENDENT_REORG ()
   31043      If non-null, this hook performs a target-specific pass over the
   31044      instruction stream.  The compiler will run it at all optimization
   31045      levels, just before the point at which it normally does
   31046      delayed-branch scheduling.
   31047 
   31048      The exact purpose of the hook varies from target to target.  Some
   31049      use it to do transformations that are necessary for correctness,
   31050      such as laying out in-function constant pools or avoiding hardware
   31051      hazards.  Others use it as an opportunity to do some
   31052      machine-dependent optimizations.
   31053 
   31054      You need not implement the hook if it has nothing to do.  The
   31055      default definition is null.
   31056 
   31057  -- Target Hook: void TARGET_INIT_BUILTINS ()
   31058      Define this hook if you have any machine-specific built-in
   31059      functions that need to be defined.  It should be a function that
   31060      performs the necessary setup.
   31061 
   31062      Machine specific built-in functions can be useful to expand
   31063      special machine instructions that would otherwise not normally be
   31064      generated because they have no equivalent in the source language
   31065      (for example, SIMD vector instructions or prefetch instructions).
   31066 
   31067      To create a built-in function, call the function
   31068      `lang_hooks.builtin_function' which is defined by the language
   31069      front end.  You can use any type nodes set up by
   31070      `build_common_tree_nodes' and `build_common_tree_nodes_2'; only
   31071      language front ends that use those two functions will call
   31072      `TARGET_INIT_BUILTINS'.
   31073 
   31074  -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx
   31075           SUBTARGET, enum machine_mode MODE, int IGNORE)
   31076      Expand a call to a machine specific built-in function that was set
   31077      up by `TARGET_INIT_BUILTINS'.  EXP is the expression for the
   31078      function call; the result should go to TARGET if that is
   31079      convenient, and have mode MODE if that is convenient.  SUBTARGET
   31080      may be used as the target for computing one of EXP's operands.
   31081      IGNORE is nonzero if the value is to be ignored.  This function
   31082      should return the result of the call to the built-in function.
   31083 
   31084  -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (tree FNDECL,
   31085           tree ARGLIST)
   31086      Select a replacement for a machine specific built-in function that
   31087      was set up by `TARGET_INIT_BUILTINS'.  This is done _before_
   31088      regular type checking, and so allows the target to implement a
   31089      crude form of function overloading.  FNDECL is the declaration of
   31090      the built-in function.  ARGLIST is the list of arguments passed to
   31091      the built-in function.  The result is a complete expression that
   31092      implements the operation, usually another `CALL_EXPR'.
   31093 
   31094  -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, tree ARGLIST,
   31095           bool IGNORE)
   31096      Fold a call to a machine specific built-in function that was set
   31097      up by `TARGET_INIT_BUILTINS'.  FNDECL is the declaration of the
   31098      built-in function.  ARGLIST is the list of arguments passed to the
   31099      built-in function.  The result is another tree containing a
   31100      simplified expression for the call's result.  If IGNORE is true
   31101      the value will be ignored.
   31102 
   31103  -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (rtx INSN)
   31104      Take an instruction in INSN and return NULL if it is valid within a
   31105      low-overhead loop, otherwise return a string why doloop could not
   31106      be applied.
   31107 
   31108      Many targets use special registers for low-overhead looping. For
   31109      any instruction that clobbers these this function should return a
   31110      string indicating the reason why the doloop could not be applied.
   31111      By default, the RTL loop optimizer does not use a present doloop
   31112      pattern for loops containing function calls or branch on table
   31113      instructions.
   31114 
   31115  -- Macro: MD_CAN_REDIRECT_BRANCH (BRANCH1, BRANCH2)
   31116      Take a branch insn in BRANCH1 and another in BRANCH2.  Return true
   31117      if redirecting BRANCH1 to the destination of BRANCH2 is possible.
   31118 
   31119      On some targets, branches may have a limited range.  Optimizing the
   31120      filling of delay slots can result in branches being redirected,
   31121      and this may in turn cause a branch offset to overflow.
   31122 
   31123  -- Target Hook: bool TARGET_COMMUTATIVE_P (rtx X, OUTER_CODE)
   31124      This target hook returns `true' if X is considered to be
   31125      commutative.  Usually, this is just COMMUTATIVE_P (X), but the HP
   31126      PA doesn't consider PLUS to be commutative inside a MEM.
   31127      OUTER_CODE is the rtx code of the enclosing rtl, if known,
   31128      otherwise it is UNKNOWN.
   31129 
   31130  -- Target Hook: rtx TARGET_ALLOCATE_INITIAL_VALUE (rtx HARD_REG)
   31131      When the initial value of a hard register has been copied in a
   31132      pseudo register, it is often not necessary to actually allocate
   31133      another register to this pseudo register, because the original
   31134      hard register or a stack slot it has been saved into can be used.
   31135      `TARGET_ALLOCATE_INITIAL_VALUE' is called at the start of register
   31136      allocation once for each hard register that had its initial value
   31137      copied by using `get_func_hard_reg_initial_val' or
   31138      `get_hard_reg_initial_val'.  Possible values are `NULL_RTX', if
   31139      you don't want to do any special allocation, a `REG' rtx--that
   31140      would typically be the hard register itself, if it is known not to
   31141      be clobbered--or a `MEM'.  If you are returning a `MEM', this is
   31142      only a hint for the allocator; it might decide to use another
   31143      register anyways.  You may use `current_function_leaf_function' in
   31144      the hook, functions that use `REG_N_SETS', to determine if the hard
   31145      register in question will not be clobbered.  The default value of
   31146      this hook is `NULL', which disables any special allocation.
   31147 
   31148  -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned
   31149           FLAGS)
   31150      This target hook returns nonzero if X, an `unspec' or
   31151      `unspec_volatile' operation, might cause a trap.  Targets can use
   31152      this hook to enhance precision of analysis for `unspec' and
   31153      `unspec_volatile' operations.  You may call `may_trap_p_1' to
   31154      analyze inner elements of X in which case FLAGS should be passed
   31155      along.
   31156 
   31157  -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL)
   31158      The compiler invokes this hook whenever it changes its current
   31159      function context (`cfun').  You can define this function if the
   31160      back end needs to perform any initialization or reset actions on a
   31161      per-function basis.  For example, it may be used to implement
   31162      function attributes that affect register usage or code generation
   31163      patterns.  The argument DECL is the declaration for the new
   31164      function context, and may be null to indicate that the compiler
   31165      has left a function context and is returning to processing at the
   31166      top level.  The default hook function does nothing.
   31167 
   31168      GCC sets `cfun' to a dummy function context during initialization
   31169      of some parts of the back end.  The hook function is not invoked
   31170      in this situation; you need not worry about the hook being invoked
   31171      recursively, or when the back end is in a partially-initialized
   31172      state.
   31173 
   31174  -- Macro: TARGET_OBJECT_SUFFIX
   31175      Define this macro to be a C string representing the suffix for
   31176      object files on your target machine.  If you do not define this
   31177      macro, GCC will use `.o' as the suffix for object files.
   31178 
   31179  -- Macro: TARGET_EXECUTABLE_SUFFIX
   31180      Define this macro to be a C string representing the suffix to be
   31181      automatically added to executable files on your target machine.
   31182      If you do not define this macro, GCC will use the null string as
   31183      the suffix for executable files.
   31184 
   31185  -- Macro: COLLECT_EXPORT_LIST
   31186      If defined, `collect2' will scan the individual object files
   31187      specified on its command line and create an export list for the
   31188      linker.  Define this macro for systems like AIX, where the linker
   31189      discards object files that are not referenced from `main' and uses
   31190      export lists.
   31191 
   31192  -- Macro: MODIFY_JNI_METHOD_CALL (MDECL)
   31193      Define this macro to a C expression representing a variant of the
   31194      method call MDECL, if Java Native Interface (JNI) methods must be
   31195      invoked differently from other methods on your target.  For
   31196      example, on 32-bit Microsoft Windows, JNI methods must be invoked
   31197      using the `stdcall' calling convention and this macro is then
   31198      defined as this expression:
   31199 
   31200           build_type_attribute_variant (MDECL,
   31201                                         build_tree_list
   31202                                         (get_identifier ("stdcall"),
   31203                                          NULL))
   31204 
   31205  -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void)
   31206      This target hook returns `true' past the point in which new jump
   31207      instructions could be created.  On machines that require a
   31208      register for every jump such as the SHmedia ISA of SH5, this point
   31209      would typically be reload, so this target hook should be defined
   31210      to a function such as:
   31211 
   31212           static bool
   31213           cannot_modify_jumps_past_reload_p ()
   31214           {
   31215             return (reload_completed || reload_in_progress);
   31216           }
   31217 
   31218  -- Target Hook: int TARGET_BRANCH_TARGET_REGISTER_CLASS (void)
   31219      This target hook returns a register class for which branch target
   31220      register optimizations should be applied.  All registers in this
   31221      class should be usable interchangeably.  After reload, registers
   31222      in this class will be re-allocated and loads will be hoisted out
   31223      of loops and be subjected to inter-block scheduling.
   31224 
   31225  -- Target Hook: bool TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED (bool
   31226           AFTER_PROLOGUE_EPILOGUE_GEN)
   31227      Branch target register optimization will by default exclude
   31228      callee-saved registers that are not already live during the
   31229      current function; if this target hook returns true, they will be
   31230      included.  The target code must than make sure that all target
   31231      registers in the class returned by
   31232      `TARGET_BRANCH_TARGET_REGISTER_CLASS' that might need saving are
   31233      saved.  AFTER_PROLOGUE_EPILOGUE_GEN indicates if prologues and
   31234      epilogues have already been generated.  Note, even if you only
   31235      return true when AFTER_PROLOGUE_EPILOGUE_GEN is false, you still
   31236      are likely to have to make special provisions in
   31237      `INITIAL_ELIMINATION_OFFSET' to reserve space for caller-saved
   31238      target registers.
   31239 
   31240  -- Macro: POWI_MAX_MULTS
   31241      If defined, this macro is interpreted as a signed integer C
   31242      expression that specifies the maximum number of floating point
   31243      multiplications that should be emitted when expanding
   31244      exponentiation by an integer constant inline.  When this value is
   31245      defined, exponentiation requiring more than this number of
   31246      multiplications is implemented by calling the system library's
   31247      `pow', `powf' or `powl' routines.  The default value places no
   31248      upper bound on the multiplication count.
   31249 
   31250  -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char
   31251           *IPREFIX, int STDINC)
   31252      This target hook should register any extra include files for the
   31253      target.  The parameter STDINC indicates if normal include files
   31254      are present.  The parameter SYSROOT is the system root directory.
   31255      The parameter IPREFIX is the prefix for the gcc directory.
   31256 
   31257  -- Macro: void TARGET_EXTRA_PRE_INCLUDES (const char *SYSROOT, const
   31258           char *IPREFIX, int STDINC)
   31259      This target hook should register any extra include files for the
   31260      target before any standard headers.  The parameter STDINC
   31261      indicates if normal include files are present.  The parameter
   31262      SYSROOT is the system root directory.  The parameter IPREFIX is
   31263      the prefix for the gcc directory.
   31264 
   31265  -- Macro: void TARGET_OPTF (char *PATH)
   31266      This target hook should register special include paths for the
   31267      target.  The parameter PATH is the include to register.  On Darwin
   31268      systems, this is used for Framework includes, which have semantics
   31269      that are different from `-I'.
   31270 
   31271  -- Target Hook: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL)
   31272      This target hook returns `true' if it is safe to use a local alias
   31273      for a virtual function FNDECL when constructing thunks, `false'
   31274      otherwise.  By default, the hook returns `true' for all functions,
   31275      if a target supports aliases (i.e. defines `ASM_OUTPUT_DEF'),
   31276      `false' otherwise,
   31277 
   31278  -- Macro: TARGET_FORMAT_TYPES
   31279      If defined, this macro is the name of a global variable containing
   31280      target-specific format checking information for the `-Wformat'
   31281      option.  The default is to have no target-specific format checks.
   31282 
   31283  -- Macro: TARGET_N_FORMAT_TYPES
   31284      If defined, this macro is the number of entries in
   31285      `TARGET_FORMAT_TYPES'.
   31286 
   31287  -- Target Hook: bool TARGET_RELAXED_ORDERING
   31288      If set to `true', means that the target's memory model does not
   31289      guarantee that loads which do not depend on one another will access
   31290      main memory in the order of the instruction stream; if ordering is
   31291      important, an explicit memory barrier must be used.  This is true
   31292      of many recent processors which implement a policy of "relaxed,"
   31293      "weak," or "release" memory consistency, such as Alpha, PowerPC,
   31294      and ia64.  The default is `false'.
   31295 
   31296  -- Target Hook: const char *TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN
   31297           (tree TYPELIST, tree FUNCDECL, tree VAL)
   31298      If defined, this macro returns the diagnostic message when it is
   31299      illegal to pass argument VAL to function FUNCDECL with prototype
   31300      TYPELIST.
   31301 
   31302  -- Target Hook: const char * TARGET_INVALID_CONVERSION (tree FROMTYPE,
   31303           tree TOTYPE)
   31304      If defined, this macro returns the diagnostic message when it is
   31305      invalid to convert from FROMTYPE to TOTYPE, or `NULL' if validity
   31306      should be determined by the front end.
   31307 
   31308  -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP, tree
   31309           TYPE)
   31310      If defined, this macro returns the diagnostic message when it is
   31311      invalid to apply operation OP (where unary plus is denoted by
   31312      `CONVERT_EXPR') to an operand of type TYPE, or `NULL' if validity
   31313      should be determined by the front end.
   31314 
   31315  -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP, tree
   31316           TYPE1, tree TYPE2)
   31317      If defined, this macro returns the diagnostic message when it is
   31318      invalid to apply operation OP to operands of types TYPE1 and
   31319      TYPE2, or `NULL' if validity should be determined by the front end.
   31320 
   31321  -- Macro: TARGET_USE_JCR_SECTION
   31322      This macro determines whether to use the JCR section to register
   31323      Java classes. By default, TARGET_USE_JCR_SECTION is defined to 1
   31324      if both SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true,
   31325      else 0.
   31326 
   31327  -- Macro: OBJC_JBLEN
   31328      This macro determines the size of the objective C jump buffer for
   31329      the NeXT runtime. By default, OBJC_JBLEN is defined to an
   31330      innocuous value.
   31331 
   31332  -- Macro: LIBGCC2_UNWIND_ATTRIBUTE
   31333      Define this macro if any target-specific attributes need to be
   31334      attached to the functions in `libgcc' that provide low-level
   31335      support for call stack unwinding.  It is used in declarations in
   31336      `unwind-generic.h' and the associated definitions of those
   31337      functions.
   31338 
   31339 
   31340 File: gccint.info,  Node: Host Config,  Next: Fragments,  Prev: Target Macros,  Up: Top
   31341 
   31342 16 Host Configuration
   31343 *********************
   31344 
   31345 Most details about the machine and system on which the compiler is
   31346 actually running are detected by the `configure' script.  Some things
   31347 are impossible for `configure' to detect; these are described in two
   31348 ways, either by macros defined in a file named `xm-MACHINE.h' or by
   31349 hook functions in the file specified by the OUT_HOST_HOOK_OBJ variable
   31350 in `config.gcc'.  (The intention is that very few hosts will need a
   31351 header file but nearly every fully supported host will need to override
   31352 some hooks.)
   31353 
   31354  If you need to define only a few macros, and they have simple
   31355 definitions, consider using the `xm_defines' variable in your
   31356 `config.gcc' entry instead of creating a host configuration header.
   31357 *Note System Config::.
   31358 
   31359 * Menu:
   31360 
   31361 * Host Common::		Things every host probably needs implemented.
   31362 * Filesystem::          Your host can't have the letter `a' in filenames?
   31363 * Host Misc::         	Rare configuration options for hosts.
   31364 
   31365 
   31366 File: gccint.info,  Node: Host Common,  Next: Filesystem,  Up: Host Config
   31367 
   31368 16.1 Host Common
   31369 ================
   31370 
   31371 Some things are just not portable, even between similar operating
   31372 systems, and are too difficult for autoconf to detect.  They get
   31373 implemented using hook functions in the file specified by the
   31374 HOST_HOOK_OBJ variable in `config.gcc'.
   31375 
   31376  -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void)
   31377      This host hook is used to set up handling for extra signals.  The
   31378      most common thing to do in this hook is to detect stack overflow.
   31379 
   31380  -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int
   31381           FD)
   31382      This host hook returns the address of some space that is likely to
   31383      be free in some subsequent invocation of the compiler.  We intend
   31384      to load the PCH data at this address such that the data need not
   31385      be relocated.  The area should be able to hold SIZE bytes.  If the
   31386      host uses `mmap', FD is an open file descriptor that can be used
   31387      for probing.
   31388 
   31389  -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS,
   31390           size_t SIZE, int FD, size_t OFFSET)
   31391      This host hook is called when a PCH file is about to be loaded.
   31392      We want to load SIZE bytes from FD at OFFSET into memory at
   31393      ADDRESS.  The given address will be the result of a previous
   31394      invocation of `HOST_HOOKS_GT_PCH_GET_ADDRESS'.  Return -1 if we
   31395      couldn't allocate SIZE bytes at ADDRESS.  Return 0 if the memory
   31396      is allocated but the data is not loaded.  Return 1 if the hook has
   31397      performed everything.
   31398 
   31399      If the implementation uses reserved address space, free any
   31400      reserved space beyond SIZE, regardless of the return value.  If no
   31401      PCH will be loaded, this hook may be called with SIZE zero, in
   31402      which case all reserved address space should be freed.
   31403 
   31404      Do not try to handle values of ADDRESS that could not have been
   31405      returned by this executable; just return -1.  Such values usually
   31406      indicate an out-of-date PCH file (built by some other GCC
   31407      executable), and such a PCH file won't work.
   31408 
   31409  -- Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void);
   31410      This host hook returns the alignment required for allocating
   31411      virtual memory.  Usually this is the same as getpagesize, but on
   31412      some hosts the alignment for reserving memory differs from the
   31413      pagesize for committing memory.
   31414 
   31415 
   31416 File: gccint.info,  Node: Filesystem,  Next: Host Misc,  Prev: Host Common,  Up: Host Config
   31417 
   31418 16.2 Host Filesystem
   31419 ====================
   31420 
   31421 GCC needs to know a number of things about the semantics of the host
   31422 machine's filesystem.  Filesystems with Unix and MS-DOS semantics are
   31423 automatically detected.  For other systems, you can define the
   31424 following macros in `xm-MACHINE.h'.
   31425 
   31426 `HAVE_DOS_BASED_FILE_SYSTEM'
   31427      This macro is automatically defined by `system.h' if the host file
   31428      system obeys the semantics defined by MS-DOS instead of Unix.  DOS
   31429      file systems are case insensitive, file specifications may begin
   31430      with a drive letter, and both forward slash and backslash (`/' and
   31431      `\') are directory separators.
   31432 
   31433 `DIR_SEPARATOR'
   31434 `DIR_SEPARATOR_2'
   31435      If defined, these macros expand to character constants specifying
   31436      separators for directory names within a file specification.
   31437      `system.h' will automatically give them appropriate values on Unix
   31438      and MS-DOS file systems.  If your file system is neither of these,
   31439      define one or both appropriately in `xm-MACHINE.h'.
   31440 
   31441      However, operating systems like VMS, where constructing a pathname
   31442      is more complicated than just stringing together directory names
   31443      separated by a special character, should not define either of these
   31444      macros.
   31445 
   31446 `PATH_SEPARATOR'
   31447      If defined, this macro should expand to a character constant
   31448      specifying the separator for elements of search paths.  The default
   31449      value is a colon (`:').  DOS-based systems usually, but not
   31450      always, use semicolon (`;').
   31451 
   31452 `VMS'
   31453      Define this macro if the host system is VMS.
   31454 
   31455 `HOST_OBJECT_SUFFIX'
   31456      Define this macro to be a C string representing the suffix for
   31457      object files on your host machine.  If you do not define this
   31458      macro, GCC will use `.o' as the suffix for object files.
   31459 
   31460 `HOST_EXECUTABLE_SUFFIX'
   31461      Define this macro to be a C string representing the suffix for
   31462      executable files on your host machine.  If you do not define this
   31463      macro, GCC will use the null string as the suffix for executable
   31464      files.
   31465 
   31466 `HOST_BIT_BUCKET'
   31467      A pathname defined by the host operating system, which can be
   31468      opened as a file and written to, but all the information written
   31469      is discarded.  This is commonly known as a "bit bucket" or "null
   31470      device".  If you do not define this macro, GCC will use
   31471      `/dev/null' as the bit bucket.  If the host does not support a bit
   31472      bucket, define this macro to an invalid filename.
   31473 
   31474 `UPDATE_PATH_HOST_CANONICALIZE (PATH)'
   31475      If defined, a C statement (sans semicolon) that performs
   31476      host-dependent canonicalization when a path used in a compilation
   31477      driver or preprocessor is canonicalized.  PATH is a malloc-ed path
   31478      to be canonicalized.  If the C statement does canonicalize PATH
   31479      into a different buffer, the old path should be freed and the new
   31480      buffer should have been allocated with malloc.
   31481 
   31482 `DUMPFILE_FORMAT'
   31483      Define this macro to be a C string representing the format to use
   31484      for constructing the index part of debugging dump file names.  The
   31485      resultant string must fit in fifteen bytes.  The full filename
   31486      will be the concatenation of: the prefix of the assembler file
   31487      name, the string resulting from applying this format to an index
   31488      number, and a string unique to each dump file kind, e.g. `rtl'.
   31489 
   31490      If you do not define this macro, GCC will use `.%02d.'.  You should
   31491      define this macro if using the default will create an invalid file
   31492      name.
   31493 
   31494 `DELETE_IF_ORDINARY'
   31495      Define this macro to be a C statement (sans semicolon) that
   31496      performs host-dependent removal of ordinary temp files in the
   31497      compilation driver.
   31498 
   31499      If you do not define this macro, GCC will use the default version.
   31500      You should define this macro if the default version does not
   31501      reliably remove the temp file as, for example, on VMS which allows
   31502      multiple versions of a file.
   31503 
   31504 `HOST_LACKS_INODE_NUMBERS'
   31505      Define this macro if the host filesystem does not report
   31506      meaningful inode numbers in struct stat.
   31507 
   31508 
   31509 File: gccint.info,  Node: Host Misc,  Prev: Filesystem,  Up: Host Config
   31510 
   31511 16.3 Host Misc
   31512 ==============
   31513 
   31514 `FATAL_EXIT_CODE'
   31515      A C expression for the status code to be returned when the compiler
   31516      exits after serious errors.  The default is the system-provided
   31517      macro `EXIT_FAILURE', or `1' if the system doesn't define that
   31518      macro.  Define this macro only if these defaults are incorrect.
   31519 
   31520 `SUCCESS_EXIT_CODE'
   31521      A C expression for the status code to be returned when the compiler
   31522      exits without serious errors.  (Warnings are not serious errors.)
   31523      The default is the system-provided macro `EXIT_SUCCESS', or `0' if
   31524      the system doesn't define that macro.  Define this macro only if
   31525      these defaults are incorrect.
   31526 
   31527 `USE_C_ALLOCA'
   31528      Define this macro if GCC should use the C implementation of
   31529      `alloca' provided by `libiberty.a'.  This only affects how some
   31530      parts of the compiler itself allocate memory.  It does not change
   31531      code generation.
   31532 
   31533      When GCC is built with a compiler other than itself, the C `alloca'
   31534      is always used.  This is because most other implementations have
   31535      serious bugs.  You should define this macro only on a system where
   31536      no stack-based `alloca' can possibly work.  For instance, if a
   31537      system has a small limit on the size of the stack, GCC's builtin
   31538      `alloca' will not work reliably.
   31539 
   31540 `COLLECT2_HOST_INITIALIZATION'
   31541      If defined, a C statement (sans semicolon) that performs
   31542      host-dependent initialization when `collect2' is being initialized.
   31543 
   31544 `GCC_DRIVER_HOST_INITIALIZATION'
   31545      If defined, a C statement (sans semicolon) that performs
   31546      host-dependent initialization when a compilation driver is being
   31547      initialized.
   31548 
   31549 `HOST_LONG_LONG_FORMAT'
   31550      If defined, the string used to indicate an argument of type `long
   31551      long' to functions like `printf'.  The default value is `"ll"'.
   31552 
   31553  In addition, if `configure' generates an incorrect definition of any
   31554 of the macros in `auto-host.h', you can override that definition in a
   31555 host configuration header.  If you need to do this, first see if it is
   31556 possible to fix `configure'.
   31557 
   31558 
   31559 File: gccint.info,  Node: Fragments,  Next: Collect2,  Prev: Host Config,  Up: Top
   31560 
   31561 17 Makefile Fragments
   31562 *********************
   31563 
   31564 When you configure GCC using the `configure' script, it will construct
   31565 the file `Makefile' from the template file `Makefile.in'.  When it does
   31566 this, it can incorporate makefile fragments from the `config'
   31567 directory.  These are used to set Makefile parameters that are not
   31568 amenable to being calculated by autoconf.  The list of fragments to
   31569 incorporate is set by `config.gcc' (and occasionally `config.build' and
   31570 `config.host'); *Note System Config::.
   31571 
   31572  Fragments are named either `t-TARGET' or `x-HOST', depending on
   31573 whether they are relevant to configuring GCC to produce code for a
   31574 particular target, or to configuring GCC to run on a particular host.
   31575 Here TARGET and HOST are mnemonics which usually have some relationship
   31576 to the canonical system name, but no formal connection.
   31577 
   31578  If these files do not exist, it means nothing needs to be added for a
   31579 given target or host.  Most targets need a few `t-TARGET' fragments,
   31580 but needing `x-HOST' fragments is rare.
   31581 
   31582 * Menu:
   31583 
   31584 * Target Fragment:: Writing `t-TARGET' files.
   31585 * Host Fragment::   Writing `x-HOST' files.
   31586 
   31587 
   31588 File: gccint.info,  Node: Target Fragment,  Next: Host Fragment,  Up: Fragments
   31589 
   31590 17.1 Target Makefile Fragments
   31591 ==============================
   31592 
   31593 Target makefile fragments can set these Makefile variables.
   31594 
   31595 `LIBGCC2_CFLAGS'
   31596      Compiler flags to use when compiling `libgcc2.c'.
   31597 
   31598 `LIB2FUNCS_EXTRA'
   31599      A list of source file names to be compiled or assembled and
   31600      inserted into `libgcc.a'.
   31601 
   31602 `Floating Point Emulation'
   31603      To have GCC include software floating point libraries in `libgcc.a'
   31604      define `FPBIT' and `DPBIT' along with a few rules as follows:
   31605           # We want fine grained libraries, so use the new code
   31606           # to build the floating point emulation libraries.
   31607           FPBIT = fp-bit.c
   31608           DPBIT = dp-bit.c
   31609 
   31610 
   31611           fp-bit.c: $(srcdir)/config/fp-bit.c
   31612                   echo '#define FLOAT' > fp-bit.c
   31613                   cat $(srcdir)/config/fp-bit.c >> fp-bit.c
   31614 
   31615           dp-bit.c: $(srcdir)/config/fp-bit.c
   31616                   cat $(srcdir)/config/fp-bit.c > dp-bit.c
   31617 
   31618      You may need to provide additional #defines at the beginning of
   31619      `fp-bit.c' and `dp-bit.c' to control target endianness and other
   31620      options.
   31621 
   31622 `CRTSTUFF_T_CFLAGS'
   31623      Special flags used when compiling `crtstuff.c'.  *Note
   31624      Initialization::.
   31625 
   31626 `CRTSTUFF_T_CFLAGS_S'
   31627      Special flags used when compiling `crtstuff.c' for shared linking.
   31628      Used if you use `crtbeginS.o' and `crtendS.o' in `EXTRA-PARTS'.
   31629      *Note Initialization::.
   31630 
   31631 `MULTILIB_OPTIONS'
   31632      For some targets, invoking GCC in different ways produces objects
   31633      that can not be linked together.  For example, for some targets GCC
   31634      produces both big and little endian code.  For these targets, you
   31635      must arrange for multiple versions of `libgcc.a' to be compiled,
   31636      one for each set of incompatible options.  When GCC invokes the
   31637      linker, it arranges to link in the right version of `libgcc.a',
   31638      based on the command line options used.
   31639 
   31640      The `MULTILIB_OPTIONS' macro lists the set of options for which
   31641      special versions of `libgcc.a' must be built.  Write options that
   31642      are mutually incompatible side by side, separated by a slash.
   31643      Write options that may be used together separated by a space.  The
   31644      build procedure will build all combinations of compatible options.
   31645 
   31646      For example, if you set `MULTILIB_OPTIONS' to `m68000/m68020
   31647      msoft-float', `Makefile' will build special versions of `libgcc.a'
   31648      using the following sets of options:  `-m68000', `-m68020',
   31649      `-msoft-float', `-m68000 -msoft-float', and `-m68020 -msoft-float'.
   31650 
   31651 `MULTILIB_DIRNAMES'
   31652      If `MULTILIB_OPTIONS' is used, this variable specifies the
   31653      directory names that should be used to hold the various libraries.
   31654      Write one element in `MULTILIB_DIRNAMES' for each element in
   31655      `MULTILIB_OPTIONS'.  If `MULTILIB_DIRNAMES' is not used, the
   31656      default value will be `MULTILIB_OPTIONS', with all slashes treated
   31657      as spaces.
   31658 
   31659      For example, if `MULTILIB_OPTIONS' is set to `m68000/m68020
   31660      msoft-float', then the default value of `MULTILIB_DIRNAMES' is
   31661      `m68000 m68020 msoft-float'.  You may specify a different value if
   31662      you desire a different set of directory names.
   31663 
   31664 `MULTILIB_MATCHES'
   31665      Sometimes the same option may be written in two different ways.
   31666      If an option is listed in `MULTILIB_OPTIONS', GCC needs to know
   31667      about any synonyms.  In that case, set `MULTILIB_MATCHES' to a
   31668      list of items of the form `option=option' to describe all relevant
   31669      synonyms.  For example, `m68000=mc68000 m68020=mc68020'.
   31670 
   31671 `MULTILIB_EXCEPTIONS'
   31672      Sometimes when there are multiple sets of `MULTILIB_OPTIONS' being
   31673      specified, there are combinations that should not be built.  In
   31674      that case, set `MULTILIB_EXCEPTIONS' to be all of the switch
   31675      exceptions in shell case syntax that should not be built.
   31676 
   31677      For example the ARM processor cannot execute both hardware floating
   31678      point instructions and the reduced size THUMB instructions at the
   31679      same time, so there is no need to build libraries with both of
   31680      these options enabled.  Therefore `MULTILIB_EXCEPTIONS' is set to:
   31681           *mthumb/*mhard-float*
   31682 
   31683 `MULTILIB_EXTRA_OPTS'
   31684      Sometimes it is desirable that when building multiple versions of
   31685      `libgcc.a' certain options should always be passed on to the
   31686      compiler.  In that case, set `MULTILIB_EXTRA_OPTS' to be the list
   31687      of options to be used for all builds.  If you set this, you should
   31688      probably set `CRTSTUFF_T_CFLAGS' to a dash followed by it.
   31689 
   31690 `NATIVE_SYSTEM_HEADER_DIR'
   31691      If the default location for system headers is not `/usr/include',
   31692      you must set this to the directory containing the headers.  This
   31693      value should match the value of the `SYSTEM_INCLUDE_DIR' macro.
   31694 
   31695 `SPECS'
   31696      Unfortunately, setting `MULTILIB_EXTRA_OPTS' is not enough, since
   31697      it does not affect the build of target libraries, at least not the
   31698      build of the default multilib.  One possible work-around is to use
   31699      `DRIVER_SELF_SPECS' to bring options from the `specs' file as if
   31700      they had been passed in the compiler driver command line.
   31701      However, you don't want to be adding these options after the
   31702      toolchain is installed, so you can instead tweak the `specs' file
   31703      that will be used during the toolchain build, while you still
   31704      install the original, built-in `specs'.  The trick is to set
   31705      `SPECS' to some other filename (say `specs.install'), that will
   31706      then be created out of the built-in specs, and introduce a
   31707      `Makefile' rule to generate the `specs' file that's going to be
   31708      used at build time out of your `specs.install'.
   31709 
   31710 
   31711 File: gccint.info,  Node: Host Fragment,  Prev: Target Fragment,  Up: Fragments
   31712 
   31713 17.2 Host Makefile Fragments
   31714 ============================
   31715 
   31716 The use of `x-HOST' fragments is discouraged.  You should do so only if
   31717 there is no other mechanism to get the behavior desired.  Host
   31718 fragments should never forcibly override variables set by the configure
   31719 script, as they may have been adjusted by the user.
   31720 
   31721  Variables provided for host fragments to set include:
   31722 
   31723 `X_CFLAGS'
   31724 `X_CPPFLAGS'
   31725      These are extra flags to pass to the C compiler and preprocessor,
   31726      respectively.  They are used both when building GCC, and when
   31727      compiling things with the just-built GCC.
   31728 
   31729 `XCFLAGS'
   31730      These are extra flags to use when building the compiler.  They are
   31731      not used when compiling `libgcc.a'.  However, they _are_ used when
   31732      recompiling the compiler with itself in later stages of a
   31733      bootstrap.
   31734 
   31735 `BOOT_LDFLAGS'
   31736      Flags to be passed to the linker when recompiling the compiler with
   31737      itself in later stages of a bootstrap.  You might need to use this
   31738      if, for instance, one of the front ends needs more text space than
   31739      the linker provides by default.
   31740 
   31741 `EXTRA_PROGRAMS'
   31742      A list of additional programs required to use the compiler on this
   31743      host, which should be compiled with GCC and installed alongside
   31744      the front ends.  If you set this variable, you must also provide
   31745      rules to build the extra programs.
   31746 
   31747 
   31748 
   31749 File: gccint.info,  Node: Collect2,  Next: Header Dirs,  Prev: Fragments,  Up: Top
   31750 
   31751 18 `collect2'
   31752 *************
   31753 
   31754 GCC uses a utility called `collect2' on nearly all systems to arrange
   31755 to call various initialization functions at start time.
   31756 
   31757  The program `collect2' works by linking the program once and looking
   31758 through the linker output file for symbols with particular names
   31759 indicating they are constructor functions.  If it finds any, it creates
   31760 a new temporary `.c' file containing a table of them, compiles it, and
   31761 links the program a second time including that file.
   31762 
   31763  The actual calls to the constructors are carried out by a subroutine
   31764 called `__main', which is called (automatically) at the beginning of
   31765 the body of `main' (provided `main' was compiled with GNU CC).  Calling
   31766 `__main' is necessary, even when compiling C code, to allow linking C
   31767 and C++ object code together.  (If you use `-nostdlib', you get an
   31768 unresolved reference to `__main', since it's defined in the standard
   31769 GCC library.  Include `-lgcc' at the end of your compiler command line
   31770 to resolve this reference.)
   31771 
   31772  The program `collect2' is installed as `ld' in the directory where the
   31773 passes of the compiler are installed.  When `collect2' needs to find
   31774 the _real_ `ld', it tries the following file names:
   31775 
   31776    * `real-ld' in the directories listed in the compiler's search
   31777      directories.
   31778 
   31779    * `real-ld' in the directories listed in the environment variable
   31780      `PATH'.
   31781 
   31782    * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
   31783      if specified.
   31784 
   31785    * `ld' in the compiler's search directories, except that `collect2'
   31786      will not execute itself recursively.
   31787 
   31788    * `ld' in `PATH'.
   31789 
   31790  "The compiler's search directories" means all the directories where
   31791 `gcc' searches for passes of the compiler.  This includes directories
   31792 that you specify with `-B'.
   31793 
   31794  Cross-compilers search a little differently:
   31795 
   31796    * `real-ld' in the compiler's search directories.
   31797 
   31798    * `TARGET-real-ld' in `PATH'.
   31799 
   31800    * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
   31801      if specified.
   31802 
   31803    * `ld' in the compiler's search directories.
   31804 
   31805    * `TARGET-ld' in `PATH'.
   31806 
   31807  `collect2' explicitly avoids running `ld' using the file name under
   31808 which `collect2' itself was invoked.  In fact, it remembers up a list
   31809 of such names--in case one copy of `collect2' finds another copy (or
   31810 version) of `collect2' installed as `ld' in a second place in the
   31811 search path.
   31812 
   31813  `collect2' searches for the utilities `nm' and `strip' using the same
   31814 algorithm as above for `ld'.
   31815 
   31816 
   31817 File: gccint.info,  Node: Header Dirs,  Next: Type Information,  Prev: Collect2,  Up: Top
   31818 
   31819 19 Standard Header File Directories
   31820 ***********************************
   31821 
   31822 `GCC_INCLUDE_DIR' means the same thing for native and cross.  It is
   31823 where GCC stores its private include files, and also where GCC stores
   31824 the fixed include files.  A cross compiled GCC runs `fixincludes' on
   31825 the header files in `$(tooldir)/include'.  (If the cross compilation
   31826 header files need to be fixed, they must be installed before GCC is
   31827 built.  If the cross compilation header files are already suitable for
   31828 GCC, nothing special need be done).
   31829 
   31830  `GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross.  It
   31831 is where `g++' looks first for header files.  The C++ library installs
   31832 only target independent header files in that directory.
   31833 
   31834  `LOCAL_INCLUDE_DIR' is used only by native compilers.  GCC doesn't
   31835 install anything there.  It is normally `/usr/local/include'.  This is
   31836 where local additions to a packaged system should place header files.
   31837 
   31838  `CROSS_INCLUDE_DIR' is used only by cross compilers.  GCC doesn't
   31839 install anything there.
   31840 
   31841  `TOOL_INCLUDE_DIR' is used for both native and cross compilers.  It is
   31842 the place for other packages to install header files that GCC will use.
   31843 For a cross-compiler, this is the equivalent of `/usr/include'.  When
   31844 you build a cross-compiler, `fixincludes' processes any header files in
   31845 this directory.
   31846 
   31847 
   31848 File: gccint.info,  Node: Type Information,  Next: Funding,  Prev: Header Dirs,  Up: Top
   31849 
   31850 20 Memory Management and Type Information
   31851 *****************************************
   31852 
   31853 GCC uses some fairly sophisticated memory management techniques, which
   31854 involve determining information about GCC's data structures from GCC's
   31855 source code and using this information to perform garbage collection and
   31856 implement precompiled headers.
   31857 
   31858  A full C parser would be too complicated for this task, so a limited
   31859 subset of C is interpreted and special markers are used to determine
   31860 what parts of the source to look at.  All `struct' and `union'
   31861 declarations that define data structures that are allocated under
   31862 control of the garbage collector must be marked.  All global variables
   31863 that hold pointers to garbage-collected memory must also be marked.
   31864 Finally, all global variables that need to be saved and restored by a
   31865 precompiled header must be marked.  (The precompiled header mechanism
   31866 can only save static variables if they're scalar.  Complex data
   31867 structures must be allocated in garbage-collected memory to be saved in
   31868 a precompiled header.)
   31869 
   31870  The full format of a marker is
   31871      GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...))
   31872  but in most cases no options are needed.  The outer double parentheses
   31873 are still necessary, though: `GTY(())'.  Markers can appear:
   31874 
   31875    * In a structure definition, before the open brace;
   31876 
   31877    * In a global variable declaration, after the keyword `static' or
   31878      `extern'; and
   31879 
   31880    * In a structure field definition, before the name of the field.
   31881 
   31882  Here are some examples of marking simple data structures and globals.
   31883 
   31884      struct TAG GTY(())
   31885      {
   31886        FIELDS...
   31887      };
   31888 
   31889      typedef struct TAG GTY(())
   31890      {
   31891        FIELDS...
   31892      } *TYPENAME;
   31893 
   31894      static GTY(()) struct TAG *LIST;   /* points to GC memory */
   31895      static GTY(()) int COUNTER;        /* save counter in a PCH */
   31896 
   31897  The parser understands simple typedefs such as `typedef struct TAG
   31898 *NAME;' and `typedef int NAME;'.  These don't need to be marked.
   31899 
   31900 * Menu:
   31901 
   31902 * GTY Options::		What goes inside a `GTY(())'.
   31903 * GGC Roots::		Making global variables GGC roots.
   31904 * Files::		How the generated files work.
   31905 
   31906 
   31907 File: gccint.info,  Node: GTY Options,  Next: GGC Roots,  Up: Type Information
   31908 
   31909 20.1 The Inside of a `GTY(())'
   31910 ==============================
   31911 
   31912 Sometimes the C code is not enough to fully describe the type
   31913 structure.  Extra information can be provided with `GTY' options and
   31914 additional markers.  Some options take a parameter, which may be either
   31915 a string or a type name, depending on the parameter.  If an option
   31916 takes no parameter, it is acceptable either to omit the parameter
   31917 entirely, or to provide an empty string as a parameter.  For example,
   31918 `GTY ((skip))' and `GTY ((skip ("")))' are equivalent.
   31919 
   31920  When the parameter is a string, often it is a fragment of C code.  Four
   31921 special escapes may be used in these strings, to refer to pieces of the
   31922 data structure being marked:
   31923 
   31924 `%h'
   31925      The current structure.
   31926 
   31927 `%1'
   31928      The structure that immediately contains the current structure.
   31929 
   31930 `%0'
   31931      The outermost structure that contains the current structure.
   31932 
   31933 `%a'
   31934      A partial expression of the form `[i1][i2]...' that indexes the
   31935      array item currently being marked.
   31936 
   31937  For instance, suppose that you have a structure of the form
   31938      struct A {
   31939        ...
   31940      };
   31941      struct B {
   31942        struct A foo[12];
   31943      };
   31944  and `b' is a variable of type `struct B'.  When marking `b.foo[11]',
   31945 `%h' would expand to `b.foo[11]', `%0' and `%1' would both expand to
   31946 `b', and `%a' would expand to `[11]'.
   31947 
   31948  As in ordinary C, adjacent strings will be concatenated; this is
   31949 helpful when you have a complicated expression.
   31950      GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE"
   31951                        " ? TYPE_NEXT_VARIANT (&%h.generic)"
   31952                        " : TREE_CHAIN (&%h.generic)")))
   31953 
   31954  The available options are:
   31955 
   31956 `length ("EXPRESSION")'
   31957      There are two places the type machinery will need to be explicitly
   31958      told the length of an array.  The first case is when a structure
   31959      ends in a variable-length array, like this:
   31960           struct rtvec_def GTY(()) {
   31961             int num_elem;		/* number of elements */
   31962             rtx GTY ((length ("%h.num_elem"))) elem[1];
   31963           };
   31964 
   31965      In this case, the `length' option is used to override the specified
   31966      array length (which should usually be `1').  The parameter of the
   31967      option is a fragment of C code that calculates the length.
   31968 
   31969      The second case is when a structure or a global variable contains a
   31970      pointer to an array, like this:
   31971           tree *
   31972             GTY ((length ("%h.regno_pointer_align_length"))) regno_decl;
   31973      In this case, `regno_decl' has been allocated by writing something
   31974      like
   31975             x->regno_decl =
   31976               ggc_alloc (x->regno_pointer_align_length * sizeof (tree));
   31977      and the `length' provides the length of the field.
   31978 
   31979      This second use of `length' also works on global variables, like:
   31980        static GTY((length ("reg_base_value_size")))
   31981          rtx *reg_base_value;
   31982 
   31983 `skip'
   31984      If `skip' is applied to a field, the type machinery will ignore it.
   31985      This is somewhat dangerous; the only safe use is in a union when
   31986      one field really isn't ever used.
   31987 
   31988 `desc ("EXPRESSION")'
   31989 `tag ("CONSTANT")'
   31990 `default'
   31991      The type machinery needs to be told which field of a `union' is
   31992      currently active.  This is done by giving each field a constant
   31993      `tag' value, and then specifying a discriminator using `desc'.
   31994      The value of the expression given by `desc' is compared against
   31995      each `tag' value, each of which should be different.  If no `tag'
   31996      is matched, the field marked with `default' is used if there is
   31997      one, otherwise no field in the union will be marked.
   31998 
   31999      In the `desc' option, the "current structure" is the union that it
   32000      discriminates.  Use `%1' to mean the structure containing it.
   32001      There are no escapes available to the `tag' option, since it is a
   32002      constant.
   32003 
   32004      For example,
   32005           struct tree_binding GTY(())
   32006           {
   32007             struct tree_common common;
   32008             union tree_binding_u {
   32009               tree GTY ((tag ("0"))) scope;
   32010               struct cp_binding_level * GTY ((tag ("1"))) level;
   32011             } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope;
   32012             tree value;
   32013           };
   32014 
   32015      In this example, the value of BINDING_HAS_LEVEL_P when applied to a
   32016      `struct tree_binding *' is presumed to be 0 or 1.  If 1, the type
   32017      mechanism will treat the field `level' as being present and if 0,
   32018      will treat the field `scope' as being present.
   32019 
   32020 `param_is (TYPE)'
   32021 `use_param'
   32022      Sometimes it's convenient to define some data structure to work on
   32023      generic pointers (that is, `PTR') and then use it with a specific
   32024      type.  `param_is' specifies the real type pointed to, and
   32025      `use_param' says where in the generic data structure that type
   32026      should be put.
   32027 
   32028      For instance, to have a `htab_t' that points to trees, one would
   32029      write the definition of `htab_t' like this:
   32030           typedef struct GTY(()) {
   32031             ...
   32032             void ** GTY ((use_param, ...)) entries;
   32033             ...
   32034           } htab_t;
   32035      and then declare variables like this:
   32036             static htab_t GTY ((param_is (union tree_node))) ict;
   32037 
   32038 `paramN_is (TYPE)'
   32039 `use_paramN'
   32040      In more complicated cases, the data structure might need to work on
   32041      several different types, which might not necessarily all be
   32042      pointers.  For this, `param1_is' through `param9_is' may be used to
   32043      specify the real type of a field identified by `use_param1' through
   32044      `use_param9'.
   32045 
   32046 `use_params'
   32047      When a structure contains another structure that is parameterized,
   32048      there's no need to do anything special, the inner structure
   32049      inherits the parameters of the outer one.  When a structure
   32050      contains a pointer to a parameterized structure, the type
   32051      machinery won't automatically detect this (it could, it just
   32052      doesn't yet), so it's necessary to tell it that the pointed-to
   32053      structure should use the same parameters as the outer structure.
   32054      This is done by marking the pointer with the `use_params' option.
   32055 
   32056 `deletable'
   32057      `deletable', when applied to a global variable, indicates that when
   32058      garbage collection runs, there's no need to mark anything pointed
   32059      to by this variable, it can just be set to `NULL' instead.  This
   32060      is used to keep a list of free structures around for re-use.
   32061 
   32062 `if_marked ("EXPRESSION")'
   32063      Suppose you want some kinds of object to be unique, and so you put
   32064      them in a hash table.  If garbage collection marks the hash table,
   32065      these objects will never be freed, even if the last other
   32066      reference to them goes away.  GGC has special handling to deal
   32067      with this: if you use the `if_marked' option on a global hash
   32068      table, GGC will call the routine whose name is the parameter to
   32069      the option on each hash table entry.  If the routine returns
   32070      nonzero, the hash table entry will be marked as usual.  If the
   32071      routine returns zero, the hash table entry will be deleted.
   32072 
   32073      The routine `ggc_marked_p' can be used to determine if an element
   32074      has been marked already; in fact, the usual case is to use
   32075      `if_marked ("ggc_marked_p")'.
   32076 
   32077 `mark_hook ("HOOK-ROUTINE-NAME")'
   32078      If provided for a structure or union type, the given
   32079      HOOK-ROUTINE-NAME (between double-quotes) is the name of a routine
   32080      called when the garbage collector has just marked the data as
   32081      reachable. This routine should not change the data, or call any ggc
   32082      routine. Its only argument is a pointer to the just marked (const)
   32083      structure or union.
   32084 
   32085 `maybe_undef'
   32086      When applied to a field, `maybe_undef' indicates that it's OK if
   32087      the structure that this fields points to is never defined, so long
   32088      as this field is always `NULL'.  This is used to avoid requiring
   32089      backends to define certain optional structures.  It doesn't work
   32090      with language frontends.
   32091 
   32092 `nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")'
   32093      The type machinery expects all pointers to point to the start of an
   32094      object.  Sometimes for abstraction purposes it's convenient to have
   32095      a pointer which points inside an object.  So long as it's possible
   32096      to convert the original object to and from the pointer, such
   32097      pointers can still be used.  TYPE is the type of the original
   32098      object, the TO EXPRESSION returns the pointer given the original
   32099      object, and the FROM EXPRESSION returns the original object given
   32100      the pointer.  The pointer will be available using the `%h' escape.
   32101 
   32102 `chain_next ("EXPRESSION")'
   32103 `chain_prev ("EXPRESSION")'
   32104 `chain_circular ("EXPRESSION")'
   32105      It's helpful for the type machinery to know if objects are often
   32106      chained together in long lists; this lets it generate code that
   32107      uses less stack space by iterating along the list instead of
   32108      recursing down it.  `chain_next' is an expression for the next
   32109      item in the list, `chain_prev' is an expression for the previous
   32110      item.  For singly linked lists, use only `chain_next'; for doubly
   32111      linked lists, use both.  The machinery requires that taking the
   32112      next item of the previous item gives the original item.
   32113      `chain_circular' is similar to `chain_next', but can be used for
   32114      circular single linked lists.
   32115 
   32116 `reorder ("FUNCTION NAME")'
   32117      Some data structures depend on the relative ordering of pointers.
   32118      If the precompiled header machinery needs to change that ordering,
   32119      it will call the function referenced by the `reorder' option,
   32120      before changing the pointers in the object that's pointed to by
   32121      the field the option applies to.  The function must take four
   32122      arguments, with the signature
   32123      `void *, void *, gt_pointer_operator, void *'.  The first
   32124      parameter is a pointer to the structure that contains the object
   32125      being updated, or the object itself if there is no containing
   32126      structure.  The second parameter is a cookie that should be
   32127      ignored.  The third parameter is a routine that, given a pointer,
   32128      will update it to its correct new value.  The fourth parameter is
   32129      a cookie that must be passed to the second parameter.
   32130 
   32131      PCH cannot handle data structures that depend on the absolute
   32132      values of pointers.  `reorder' functions can be expensive.  When
   32133      possible, it is better to depend on properties of the data, like
   32134      an ID number or the hash of a string instead.
   32135 
   32136 `special ("NAME")'
   32137      The `special' option is used to mark types that have to be dealt
   32138      with by special case machinery.  The parameter is the name of the
   32139      special case.  See `gengtype.c' for further details.  Avoid adding
   32140      new special cases unless there is no other alternative.
   32141 
   32142 
   32143 File: gccint.info,  Node: GGC Roots,  Next: Files,  Prev: GTY Options,  Up: Type Information
   32144 
   32145 20.2 Marking Roots for the Garbage Collector
   32146 ============================================
   32147 
   32148 In addition to keeping track of types, the type machinery also locates
   32149 the global variables ("roots") that the garbage collector starts at.
   32150 Roots must be declared using one of the following syntaxes:
   32151 
   32152    * `extern GTY(([OPTIONS])) TYPE NAME;'
   32153 
   32154    * `static GTY(([OPTIONS])) TYPE NAME;'
   32155  The syntax
   32156    * `GTY(([OPTIONS])) TYPE NAME;'
   32157  is _not_ accepted.  There should be an `extern' declaration of such a
   32158 variable in a header somewhere--mark that, not the definition.  Or, if
   32159 the variable is only used in one file, make it `static'.
   32160 
   32161 
   32162 File: gccint.info,  Node: Files,  Prev: GGC Roots,  Up: Type Information
   32163 
   32164 20.3 Source Files Containing Type Information
   32165 =============================================
   32166 
   32167 Whenever you add `GTY' markers to a source file that previously had
   32168 none, or create a new source file containing `GTY' markers, there are
   32169 three things you need to do:
   32170 
   32171   1. You need to add the file to the list of source files the type
   32172      machinery scans.  There are four cases:
   32173 
   32174        a. For a back-end file, this is usually done automatically; if
   32175           not, you should add it to `target_gtfiles' in the appropriate
   32176           port's entries in `config.gcc'.
   32177 
   32178        b. For files shared by all front ends, add the filename to the
   32179           `GTFILES' variable in `Makefile.in'.
   32180 
   32181        c. For files that are part of one front end, add the filename to
   32182           the `gtfiles' variable defined in the appropriate
   32183           `config-lang.in'.  For C, the file is `c-config-lang.in'.
   32184 
   32185        d. For files that are part of some but not all front ends, add
   32186           the filename to the `gtfiles' variable of _all_ the front ends
   32187           that use it.
   32188 
   32189   2. If the file was a header file, you'll need to check that it's
   32190      included in the right place to be visible to the generated files.
   32191      For a back-end header file, this should be done automatically.
   32192      For a front-end header file, it needs to be included by the same
   32193      file that includes `gtype-LANG.h'.  For other header files, it
   32194      needs to be included in `gtype-desc.c', which is a generated file,
   32195      so add it to `ifiles' in `open_base_file' in `gengtype.c'.
   32196 
   32197      For source files that aren't header files, the machinery will
   32198      generate a header file that should be included in the source file
   32199      you just changed.  The file will be called `gt-PATH.h' where PATH
   32200      is the pathname relative to the `gcc' directory with slashes
   32201      replaced by -, so for example the header file to be included in
   32202      `cp/parser.c' is called `gt-cp-parser.c'.  The generated header
   32203      file should be included after everything else in the source file.
   32204      Don't forget to mention this file as a dependency in the
   32205      `Makefile'!
   32206 
   32207 
   32208  For language frontends, there is another file that needs to be included
   32209 somewhere.  It will be called `gtype-LANG.h', where LANG is the name of
   32210 the subdirectory the language is contained in.
   32211 
   32212 
   32213 File: gccint.info,  Node: Funding,  Next: GNU Project,  Prev: Type Information,  Up: Top
   32214 
   32215 Funding Free Software
   32216 *********************
   32217 
   32218 If you want to have more free software a few years from now, it makes
   32219 sense for you to help encourage people to contribute funds for its
   32220 development.  The most effective approach known is to encourage
   32221 commercial redistributors to donate.
   32222 
   32223  Users of free software systems can boost the pace of development by
   32224 encouraging for-a-fee distributors to donate part of their selling price
   32225 to free software developers--the Free Software Foundation, and others.
   32226 
   32227  The way to convince distributors to do this is to demand it and expect
   32228 it from them.  So when you compare distributors, judge them partly by
   32229 how much they give to free software development.  Show distributors
   32230 they must compete to be the one who gives the most.
   32231 
   32232  To make this approach work, you must insist on numbers that you can
   32233 compare, such as, "We will donate ten dollars to the Frobnitz project
   32234 for each disk sold."  Don't be satisfied with a vague promise, such as
   32235 "A portion of the profits are donated," since it doesn't give a basis
   32236 for comparison.
   32237 
   32238  Even a precise fraction "of the profits from this disk" is not very
   32239 meaningful, since creative accounting and unrelated business decisions
   32240 can greatly alter what fraction of the sales price counts as profit.
   32241 If the price you pay is $50, ten percent of the profit is probably less
   32242 than a dollar; it might be a few cents, or nothing at all.
   32243 
   32244  Some redistributors do development work themselves.  This is useful
   32245 too; but to keep everyone honest, you need to inquire how much they do,
   32246 and what kind.  Some kinds of development make much more long-term
   32247 difference than others.  For example, maintaining a separate version of
   32248 a program contributes very little; maintaining the standard version of a
   32249 program for the whole community contributes much.  Easy new ports
   32250 contribute little, since someone else would surely do them; difficult
   32251 ports such as adding a new CPU to the GNU Compiler Collection
   32252 contribute more; major new features or packages contribute the most.
   32253 
   32254  By establishing the idea that supporting further development is "the
   32255 proper thing to do" when distributing free software for a fee, we can
   32256 assure a steady flow of resources into making more free software.
   32257 
   32258      Copyright (C) 1994 Free Software Foundation, Inc.
   32259      Verbatim copying and redistribution of this section is permitted
   32260      without royalty; alteration is not permitted.
   32261 
   32262 
   32263 File: gccint.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
   32264 
   32265 The GNU Project and GNU/Linux
   32266 *****************************
   32267 
   32268 The GNU Project was launched in 1984 to develop a complete Unix-like
   32269 operating system which is free software: the GNU system.  (GNU is a
   32270 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
   32271 Variants of the GNU operating system, which use the kernel Linux, are
   32272 now widely used; though these systems are often referred to as "Linux",
   32273 they are more accurately called GNU/Linux systems.
   32274 
   32275  For more information, see:
   32276      `http://www.gnu.org/'
   32277      `http://www.gnu.org/gnu/linux-and-gnu.html'
   32278 
   32279 
   32280 File: gccint.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
   32281 
   32282 GNU General Public License
   32283 **************************
   32284 
   32285                         Version 3, 29 June 2007
   32286 
   32287      Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
   32288 
   32289      Everyone is permitted to copy and distribute verbatim copies of this
   32290      license document, but changing it is not allowed.
   32291 
   32292 Preamble
   32293 ========
   32294 
   32295 The GNU General Public License is a free, copyleft license for software
   32296 and other kinds of works.
   32297 
   32298  The licenses for most software and other practical works are designed
   32299 to take away your freedom to share and change the works.  By contrast,
   32300 the GNU General Public License is intended to guarantee your freedom to
   32301 share and change all versions of a program-to make sure it remains free
   32302 software for all its users.  We, the Free Software Foundation, use the
   32303 GNU General Public License for most of our software; it applies also to
   32304 any other work released this way by its authors.  You can apply it to
   32305 your programs, too.
   32306 
   32307  When we speak of free software, we are referring to freedom, not
   32308 price.  Our General Public Licenses are designed to make sure that you
   32309 have the freedom to distribute copies of free software (and charge for
   32310 them if you wish), that you receive source code or can get it if you
   32311 want it, that you can change the software or use pieces of it in new
   32312 free programs, and that you know you can do these things.
   32313 
   32314  To protect your rights, we need to prevent others from denying you
   32315 these rights or asking you to surrender the rights.  Therefore, you
   32316 have certain responsibilities if you distribute copies of the software,
   32317 or if you modify it: responsibilities to respect the freedom of others.
   32318 
   32319  For example, if you distribute copies of such a program, whether
   32320 gratis or for a fee, you must pass on to the recipients the same
   32321 freedoms that you received.  You must make sure that they, too, receive
   32322 or can get the source code.  And you must show them these terms so they
   32323 know their rights.
   32324 
   32325  Developers that use the GNU GPL protect your rights with two steps:
   32326 (1) assert copyright on the software, and (2) offer you this License
   32327 giving you legal permission to copy, distribute and/or modify it.
   32328 
   32329  For the developers' and authors' protection, the GPL clearly explains
   32330 that there is no warranty for this free software.  For both users' and
   32331 authors' sake, the GPL requires that modified versions be marked as
   32332 changed, so that their problems will not be attributed erroneously to
   32333 authors of previous versions.
   32334 
   32335  Some devices are designed to deny users access to install or run
   32336 modified versions of the software inside them, although the
   32337 manufacturer can do so.  This is fundamentally incompatible with the
   32338 aim of protecting users' freedom to change the software.  The
   32339 systematic pattern of such abuse occurs in the area of products for
   32340 individuals to use, which is precisely where it is most unacceptable.
   32341 Therefore, we have designed this version of the GPL to prohibit the
   32342 practice for those products.  If such problems arise substantially in
   32343 other domains, we stand ready to extend this provision to those domains
   32344 in future versions of the GPL, as needed to protect the freedom of
   32345 users.
   32346 
   32347  Finally, every program is threatened constantly by software patents.
   32348 States should not allow patents to restrict development and use of
   32349 software on general-purpose computers, but in those that do, we wish to
   32350 avoid the special danger that patents applied to a free program could
   32351 make it effectively proprietary.  To prevent this, the GPL assures that
   32352 patents cannot be used to render the program non-free.
   32353 
   32354  The precise terms and conditions for copying, distribution and
   32355 modification follow.
   32356 
   32357 TERMS AND CONDITIONS
   32358 ====================
   32359 
   32360   0. Definitions.
   32361 
   32362      "This License" refers to version 3 of the GNU General Public
   32363      License.
   32364 
   32365      "Copyright" also means copyright-like laws that apply to other
   32366      kinds of works, such as semiconductor masks.
   32367 
   32368      "The Program" refers to any copyrightable work licensed under this
   32369      License.  Each licensee is addressed as "you".  "Licensees" and
   32370      "recipients" may be individuals or organizations.
   32371 
   32372      To "modify" a work means to copy from or adapt all or part of the
   32373      work in a fashion requiring copyright permission, other than the
   32374      making of an exact copy.  The resulting work is called a "modified
   32375      version" of the earlier work or a work "based on" the earlier work.
   32376 
   32377      A "covered work" means either the unmodified Program or a work
   32378      based on the Program.
   32379 
   32380      To "propagate" a work means to do anything with it that, without
   32381      permission, would make you directly or secondarily liable for
   32382      infringement under applicable copyright law, except executing it
   32383      on a computer or modifying a private copy.  Propagation includes
   32384      copying, distribution (with or without modification), making
   32385      available to the public, and in some countries other activities as
   32386      well.
   32387 
   32388      To "convey" a work means any kind of propagation that enables other
   32389      parties to make or receive copies.  Mere interaction with a user
   32390      through a computer network, with no transfer of a copy, is not
   32391      conveying.
   32392 
   32393      An interactive user interface displays "Appropriate Legal Notices"
   32394      to the extent that it includes a convenient and prominently visible
   32395      feature that (1) displays an appropriate copyright notice, and (2)
   32396      tells the user that there is no warranty for the work (except to
   32397      the extent that warranties are provided), that licensees may
   32398      convey the work under this License, and how to view a copy of this
   32399      License.  If the interface presents a list of user commands or
   32400      options, such as a menu, a prominent item in the list meets this
   32401      criterion.
   32402 
   32403   1. Source Code.
   32404 
   32405      The "source code" for a work means the preferred form of the work
   32406      for making modifications to it.  "Object code" means any
   32407      non-source form of a work.
   32408 
   32409      A "Standard Interface" means an interface that either is an
   32410      official standard defined by a recognized standards body, or, in
   32411      the case of interfaces specified for a particular programming
   32412      language, one that is widely used among developers working in that
   32413      language.
   32414 
   32415      The "System Libraries" of an executable work include anything,
   32416      other than the work as a whole, that (a) is included in the normal
   32417      form of packaging a Major Component, but which is not part of that
   32418      Major Component, and (b) serves only to enable use of the work
   32419      with that Major Component, or to implement a Standard Interface
   32420      for which an implementation is available to the public in source
   32421      code form.  A "Major Component", in this context, means a major
   32422      essential component (kernel, window system, and so on) of the
   32423      specific operating system (if any) on which the executable work
   32424      runs, or a compiler used to produce the work, or an object code
   32425      interpreter used to run it.
   32426 
   32427      The "Corresponding Source" for a work in object code form means all
   32428      the source code needed to generate, install, and (for an executable
   32429      work) run the object code and to modify the work, including
   32430      scripts to control those activities.  However, it does not include
   32431      the work's System Libraries, or general-purpose tools or generally
   32432      available free programs which are used unmodified in performing
   32433      those activities but which are not part of the work.  For example,
   32434      Corresponding Source includes interface definition files
   32435      associated with source files for the work, and the source code for
   32436      shared libraries and dynamically linked subprograms that the work
   32437      is specifically designed to require, such as by intimate data
   32438      communication or control flow between those subprograms and other
   32439      parts of the work.
   32440 
   32441      The Corresponding Source need not include anything that users can
   32442      regenerate automatically from other parts of the Corresponding
   32443      Source.
   32444 
   32445      The Corresponding Source for a work in source code form is that
   32446      same work.
   32447 
   32448   2. Basic Permissions.
   32449 
   32450      All rights granted under this License are granted for the term of
   32451      copyright on the Program, and are irrevocable provided the stated
   32452      conditions are met.  This License explicitly affirms your unlimited
   32453      permission to run the unmodified Program.  The output from running
   32454      a covered work is covered by this License only if the output,
   32455      given its content, constitutes a covered work.  This License
   32456      acknowledges your rights of fair use or other equivalent, as
   32457      provided by copyright law.
   32458 
   32459      You may make, run and propagate covered works that you do not
   32460      convey, without conditions so long as your license otherwise
   32461      remains in force.  You may convey covered works to others for the
   32462      sole purpose of having them make modifications exclusively for
   32463      you, or provide you with facilities for running those works,
   32464      provided that you comply with the terms of this License in
   32465      conveying all material for which you do not control copyright.
   32466      Those thus making or running the covered works for you must do so
   32467      exclusively on your behalf, under your direction and control, on
   32468      terms that prohibit them from making any copies of your
   32469      copyrighted material outside their relationship with you.
   32470 
   32471      Conveying under any other circumstances is permitted solely under
   32472      the conditions stated below.  Sublicensing is not allowed; section
   32473      10 makes it unnecessary.
   32474 
   32475   3. Protecting Users' Legal Rights From Anti-Circumvention Law.
   32476 
   32477      No covered work shall be deemed part of an effective technological
   32478      measure under any applicable law fulfilling obligations under
   32479      article 11 of the WIPO copyright treaty adopted on 20 December
   32480      1996, or similar laws prohibiting or restricting circumvention of
   32481      such measures.
   32482 
   32483      When you convey a covered work, you waive any legal power to forbid
   32484      circumvention of technological measures to the extent such
   32485      circumvention is effected by exercising rights under this License
   32486      with respect to the covered work, and you disclaim any intention
   32487      to limit operation or modification of the work as a means of
   32488      enforcing, against the work's users, your or third parties' legal
   32489      rights to forbid circumvention of technological measures.
   32490 
   32491   4. Conveying Verbatim Copies.
   32492 
   32493      You may convey verbatim copies of the Program's source code as you
   32494      receive it, in any medium, provided that you conspicuously and
   32495      appropriately publish on each copy an appropriate copyright notice;
   32496      keep intact all notices stating that this License and any
   32497      non-permissive terms added in accord with section 7 apply to the
   32498      code; keep intact all notices of the absence of any warranty; and
   32499      give all recipients a copy of this License along with the Program.
   32500 
   32501      You may charge any price or no price for each copy that you convey,
   32502      and you may offer support or warranty protection for a fee.
   32503 
   32504   5. Conveying Modified Source Versions.
   32505 
   32506      You may convey a work based on the Program, or the modifications to
   32507      produce it from the Program, in the form of source code under the
   32508      terms of section 4, provided that you also meet all of these
   32509      conditions:
   32510 
   32511        a. The work must carry prominent notices stating that you
   32512           modified it, and giving a relevant date.
   32513 
   32514        b. The work must carry prominent notices stating that it is
   32515           released under this License and any conditions added under
   32516           section 7.  This requirement modifies the requirement in
   32517           section 4 to "keep intact all notices".
   32518 
   32519        c. You must license the entire work, as a whole, under this
   32520           License to anyone who comes into possession of a copy.  This
   32521           License will therefore apply, along with any applicable
   32522           section 7 additional terms, to the whole of the work, and all
   32523           its parts, regardless of how they are packaged.  This License
   32524           gives no permission to license the work in any other way, but
   32525           it does not invalidate such permission if you have separately
   32526           received it.
   32527 
   32528        d. If the work has interactive user interfaces, each must display
   32529           Appropriate Legal Notices; however, if the Program has
   32530           interactive interfaces that do not display Appropriate Legal
   32531           Notices, your work need not make them do so.
   32532 
   32533      A compilation of a covered work with other separate and independent
   32534      works, which are not by their nature extensions of the covered
   32535      work, and which are not combined with it such as to form a larger
   32536      program, in or on a volume of a storage or distribution medium, is
   32537      called an "aggregate" if the compilation and its resulting
   32538      copyright are not used to limit the access or legal rights of the
   32539      compilation's users beyond what the individual works permit.
   32540      Inclusion of a covered work in an aggregate does not cause this
   32541      License to apply to the other parts of the aggregate.
   32542 
   32543   6. Conveying Non-Source Forms.
   32544 
   32545      You may convey a covered work in object code form under the terms
   32546      of sections 4 and 5, provided that you also convey the
   32547      machine-readable Corresponding Source under the terms of this
   32548      License, in one of these ways:
   32549 
   32550        a. Convey the object code in, or embodied in, a physical product
   32551           (including a physical distribution medium), accompanied by the
   32552           Corresponding Source fixed on a durable physical medium
   32553           customarily used for software interchange.
   32554 
   32555        b. Convey the object code in, or embodied in, a physical product
   32556           (including a physical distribution medium), accompanied by a
   32557           written offer, valid for at least three years and valid for
   32558           as long as you offer spare parts or customer support for that
   32559           product model, to give anyone who possesses the object code
   32560           either (1) a copy of the Corresponding Source for all the
   32561           software in the product that is covered by this License, on a
   32562           durable physical medium customarily used for software
   32563           interchange, for a price no more than your reasonable cost of
   32564           physically performing this conveying of source, or (2) access
   32565           to copy the Corresponding Source from a network server at no
   32566           charge.
   32567 
   32568        c. Convey individual copies of the object code with a copy of
   32569           the written offer to provide the Corresponding Source.  This
   32570           alternative is allowed only occasionally and noncommercially,
   32571           and only if you received the object code with such an offer,
   32572           in accord with subsection 6b.
   32573 
   32574        d. Convey the object code by offering access from a designated
   32575           place (gratis or for a charge), and offer equivalent access
   32576           to the Corresponding Source in the same way through the same
   32577           place at no further charge.  You need not require recipients
   32578           to copy the Corresponding Source along with the object code.
   32579           If the place to copy the object code is a network server, the
   32580           Corresponding Source may be on a different server (operated
   32581           by you or a third party) that supports equivalent copying
   32582           facilities, provided you maintain clear directions next to
   32583           the object code saying where to find the Corresponding Source.
   32584           Regardless of what server hosts the Corresponding Source, you
   32585           remain obligated to ensure that it is available for as long
   32586           as needed to satisfy these requirements.
   32587 
   32588        e. Convey the object code using peer-to-peer transmission,
   32589           provided you inform other peers where the object code and
   32590           Corresponding Source of the work are being offered to the
   32591           general public at no charge under subsection 6d.
   32592 
   32593 
   32594      A separable portion of the object code, whose source code is
   32595      excluded from the Corresponding Source as a System Library, need
   32596      not be included in conveying the object code work.
   32597 
   32598      A "User Product" is either (1) a "consumer product", which means
   32599      any tangible personal property which is normally used for personal,
   32600      family, or household purposes, or (2) anything designed or sold for
   32601      incorporation into a dwelling.  In determining whether a product
   32602      is a consumer product, doubtful cases shall be resolved in favor of
   32603      coverage.  For a particular product received by a particular user,
   32604      "normally used" refers to a typical or common use of that class of
   32605      product, regardless of the status of the particular user or of the
   32606      way in which the particular user actually uses, or expects or is
   32607      expected to use, the product.  A product is a consumer product
   32608      regardless of whether the product has substantial commercial,
   32609      industrial or non-consumer uses, unless such uses represent the
   32610      only significant mode of use of the product.
   32611 
   32612      "Installation Information" for a User Product means any methods,
   32613      procedures, authorization keys, or other information required to
   32614      install and execute modified versions of a covered work in that
   32615      User Product from a modified version of its Corresponding Source.
   32616      The information must suffice to ensure that the continued
   32617      functioning of the modified object code is in no case prevented or
   32618      interfered with solely because modification has been made.
   32619 
   32620      If you convey an object code work under this section in, or with,
   32621      or specifically for use in, a User Product, and the conveying
   32622      occurs as part of a transaction in which the right of possession
   32623      and use of the User Product is transferred to the recipient in
   32624      perpetuity or for a fixed term (regardless of how the transaction
   32625      is characterized), the Corresponding Source conveyed under this
   32626      section must be accompanied by the Installation Information.  But
   32627      this requirement does not apply if neither you nor any third party
   32628      retains the ability to install modified object code on the User
   32629      Product (for example, the work has been installed in ROM).
   32630 
   32631      The requirement to provide Installation Information does not
   32632      include a requirement to continue to provide support service,
   32633      warranty, or updates for a work that has been modified or
   32634      installed by the recipient, or for the User Product in which it
   32635      has been modified or installed.  Access to a network may be denied
   32636      when the modification itself materially and adversely affects the
   32637      operation of the network or violates the rules and protocols for
   32638      communication across the network.
   32639 
   32640      Corresponding Source conveyed, and Installation Information
   32641      provided, in accord with this section must be in a format that is
   32642      publicly documented (and with an implementation available to the
   32643      public in source code form), and must require no special password
   32644      or key for unpacking, reading or copying.
   32645 
   32646   7. Additional Terms.
   32647 
   32648      "Additional permissions" are terms that supplement the terms of
   32649      this License by making exceptions from one or more of its
   32650      conditions.  Additional permissions that are applicable to the
   32651      entire Program shall be treated as though they were included in
   32652      this License, to the extent that they are valid under applicable
   32653      law.  If additional permissions apply only to part of the Program,
   32654      that part may be used separately under those permissions, but the
   32655      entire Program remains governed by this License without regard to
   32656      the additional permissions.
   32657 
   32658      When you convey a copy of a covered work, you may at your option
   32659      remove any additional permissions from that copy, or from any part
   32660      of it.  (Additional permissions may be written to require their own
   32661      removal in certain cases when you modify the work.)  You may place
   32662      additional permissions on material, added by you to a covered work,
   32663      for which you have or can give appropriate copyright permission.
   32664 
   32665      Notwithstanding any other provision of this License, for material
   32666      you add to a covered work, you may (if authorized by the copyright
   32667      holders of that material) supplement the terms of this License
   32668      with terms:
   32669 
   32670        a. Disclaiming warranty or limiting liability differently from
   32671           the terms of sections 15 and 16 of this License; or
   32672 
   32673        b. Requiring preservation of specified reasonable legal notices
   32674           or author attributions in that material or in the Appropriate
   32675           Legal Notices displayed by works containing it; or
   32676 
   32677        c. Prohibiting misrepresentation of the origin of that material,
   32678           or requiring that modified versions of such material be
   32679           marked in reasonable ways as different from the original
   32680           version; or
   32681 
   32682        d. Limiting the use for publicity purposes of names of licensors
   32683           or authors of the material; or
   32684 
   32685        e. Declining to grant rights under trademark law for use of some
   32686           trade names, trademarks, or service marks; or
   32687 
   32688        f. Requiring indemnification of licensors and authors of that
   32689           material by anyone who conveys the material (or modified
   32690           versions of it) with contractual assumptions of liability to
   32691           the recipient, for any liability that these contractual
   32692           assumptions directly impose on those licensors and authors.
   32693 
   32694      All other non-permissive additional terms are considered "further
   32695      restrictions" within the meaning of section 10.  If the Program as
   32696      you received it, or any part of it, contains a notice stating that
   32697      it is governed by this License along with a term that is a further
   32698      restriction, you may remove that term.  If a license document
   32699      contains a further restriction but permits relicensing or
   32700      conveying under this License, you may add to a covered work
   32701      material governed by the terms of that license document, provided
   32702      that the further restriction does not survive such relicensing or
   32703      conveying.
   32704 
   32705      If you add terms to a covered work in accord with this section, you
   32706      must place, in the relevant source files, a statement of the
   32707      additional terms that apply to those files, or a notice indicating
   32708      where to find the applicable terms.
   32709 
   32710      Additional terms, permissive or non-permissive, may be stated in
   32711      the form of a separately written license, or stated as exceptions;
   32712      the above requirements apply either way.
   32713 
   32714   8. Termination.
   32715 
   32716      You may not propagate or modify a covered work except as expressly
   32717      provided under this License.  Any attempt otherwise to propagate or
   32718      modify it is void, and will automatically terminate your rights
   32719      under this License (including any patent licenses granted under
   32720      the third paragraph of section 11).
   32721 
   32722      However, if you cease all violation of this License, then your
   32723      license from a particular copyright holder is reinstated (a)
   32724      provisionally, unless and until the copyright holder explicitly
   32725      and finally terminates your license, and (b) permanently, if the
   32726      copyright holder fails to notify you of the violation by some
   32727      reasonable means prior to 60 days after the cessation.
   32728 
   32729      Moreover, your license from a particular copyright holder is
   32730      reinstated permanently if the copyright holder notifies you of the
   32731      violation by some reasonable means, this is the first time you have
   32732      received notice of violation of this License (for any work) from
   32733      that copyright holder, and you cure the violation prior to 30 days
   32734      after your receipt of the notice.
   32735 
   32736      Termination of your rights under this section does not terminate
   32737      the licenses of parties who have received copies or rights from
   32738      you under this License.  If your rights have been terminated and
   32739      not permanently reinstated, you do not qualify to receive new
   32740      licenses for the same material under section 10.
   32741 
   32742   9. Acceptance Not Required for Having Copies.
   32743 
   32744      You are not required to accept this License in order to receive or
   32745      run a copy of the Program.  Ancillary propagation of a covered work
   32746      occurring solely as a consequence of using peer-to-peer
   32747      transmission to receive a copy likewise does not require
   32748      acceptance.  However, nothing other than this License grants you
   32749      permission to propagate or modify any covered work.  These actions
   32750      infringe copyright if you do not accept this License.  Therefore,
   32751      by modifying or propagating a covered work, you indicate your
   32752      acceptance of this License to do so.
   32753 
   32754  10. Automatic Licensing of Downstream Recipients.
   32755 
   32756      Each time you convey a covered work, the recipient automatically
   32757      receives a license from the original licensors, to run, modify and
   32758      propagate that work, subject to this License.  You are not
   32759      responsible for enforcing compliance by third parties with this
   32760      License.
   32761 
   32762      An "entity transaction" is a transaction transferring control of an
   32763      organization, or substantially all assets of one, or subdividing an
   32764      organization, or merging organizations.  If propagation of a
   32765      covered work results from an entity transaction, each party to that
   32766      transaction who receives a copy of the work also receives whatever
   32767      licenses to the work the party's predecessor in interest had or
   32768      could give under the previous paragraph, plus a right to
   32769      possession of the Corresponding Source of the work from the
   32770      predecessor in interest, if the predecessor has it or can get it
   32771      with reasonable efforts.
   32772 
   32773      You may not impose any further restrictions on the exercise of the
   32774      rights granted or affirmed under this License.  For example, you
   32775      may not impose a license fee, royalty, or other charge for
   32776      exercise of rights granted under this License, and you may not
   32777      initiate litigation (including a cross-claim or counterclaim in a
   32778      lawsuit) alleging that any patent claim is infringed by making,
   32779      using, selling, offering for sale, or importing the Program or any
   32780      portion of it.
   32781 
   32782  11. Patents.
   32783 
   32784      A "contributor" is a copyright holder who authorizes use under this
   32785      License of the Program or a work on which the Program is based.
   32786      The work thus licensed is called the contributor's "contributor
   32787      version".
   32788 
   32789      A contributor's "essential patent claims" are all patent claims
   32790      owned or controlled by the contributor, whether already acquired or
   32791      hereafter acquired, that would be infringed by some manner,
   32792      permitted by this License, of making, using, or selling its
   32793      contributor version, but do not include claims that would be
   32794      infringed only as a consequence of further modification of the
   32795      contributor version.  For purposes of this definition, "control"
   32796      includes the right to grant patent sublicenses in a manner
   32797      consistent with the requirements of this License.
   32798 
   32799      Each contributor grants you a non-exclusive, worldwide,
   32800      royalty-free patent license under the contributor's essential
   32801      patent claims, to make, use, sell, offer for sale, import and
   32802      otherwise run, modify and propagate the contents of its
   32803      contributor version.
   32804 
   32805      In the following three paragraphs, a "patent license" is any
   32806      express agreement or commitment, however denominated, not to
   32807      enforce a patent (such as an express permission to practice a
   32808      patent or covenant not to sue for patent infringement).  To
   32809      "grant" such a patent license to a party means to make such an
   32810      agreement or commitment not to enforce a patent against the party.
   32811 
   32812      If you convey a covered work, knowingly relying on a patent
   32813      license, and the Corresponding Source of the work is not available
   32814      for anyone to copy, free of charge and under the terms of this
   32815      License, through a publicly available network server or other
   32816      readily accessible means, then you must either (1) cause the
   32817      Corresponding Source to be so available, or (2) arrange to deprive
   32818      yourself of the benefit of the patent license for this particular
   32819      work, or (3) arrange, in a manner consistent with the requirements
   32820      of this License, to extend the patent license to downstream
   32821      recipients.  "Knowingly relying" means you have actual knowledge
   32822      that, but for the patent license, your conveying the covered work
   32823      in a country, or your recipient's use of the covered work in a
   32824      country, would infringe one or more identifiable patents in that
   32825      country that you have reason to believe are valid.
   32826 
   32827      If, pursuant to or in connection with a single transaction or
   32828      arrangement, you convey, or propagate by procuring conveyance of, a
   32829      covered work, and grant a patent license to some of the parties
   32830      receiving the covered work authorizing them to use, propagate,
   32831      modify or convey a specific copy of the covered work, then the
   32832      patent license you grant is automatically extended to all
   32833      recipients of the covered work and works based on it.
   32834 
   32835      A patent license is "discriminatory" if it does not include within
   32836      the scope of its coverage, prohibits the exercise of, or is
   32837      conditioned on the non-exercise of one or more of the rights that
   32838      are specifically granted under this License.  You may not convey a
   32839      covered work if you are a party to an arrangement with a third
   32840      party that is in the business of distributing software, under
   32841      which you make payment to the third party based on the extent of
   32842      your activity of conveying the work, and under which the third
   32843      party grants, to any of the parties who would receive the covered
   32844      work from you, a discriminatory patent license (a) in connection
   32845      with copies of the covered work conveyed by you (or copies made
   32846      from those copies), or (b) primarily for and in connection with
   32847      specific products or compilations that contain the covered work,
   32848      unless you entered into that arrangement, or that patent license
   32849      was granted, prior to 28 March 2007.
   32850 
   32851      Nothing in this License shall be construed as excluding or limiting
   32852      any implied license or other defenses to infringement that may
   32853      otherwise be available to you under applicable patent law.
   32854 
   32855  12. No Surrender of Others' Freedom.
   32856 
   32857      If conditions are imposed on you (whether by court order,
   32858      agreement or otherwise) that contradict the conditions of this
   32859      License, they do not excuse you from the conditions of this
   32860      License.  If you cannot convey a covered work so as to satisfy
   32861      simultaneously your obligations under this License and any other
   32862      pertinent obligations, then as a consequence you may not convey it
   32863      at all.  For example, if you agree to terms that obligate you to
   32864      collect a royalty for further conveying from those to whom you
   32865      convey the Program, the only way you could satisfy both those
   32866      terms and this License would be to refrain entirely from conveying
   32867      the Program.
   32868 
   32869  13. Use with the GNU Affero General Public License.
   32870 
   32871      Notwithstanding any other provision of this License, you have
   32872      permission to link or combine any covered work with a work licensed
   32873      under version 3 of the GNU Affero General Public License into a
   32874      single combined work, and to convey the resulting work.  The terms
   32875      of this License will continue to apply to the part which is the
   32876      covered work, but the special requirements of the GNU Affero
   32877      General Public License, section 13, concerning interaction through
   32878      a network will apply to the combination as such.
   32879 
   32880  14. Revised Versions of this License.
   32881 
   32882      The Free Software Foundation may publish revised and/or new
   32883      versions of the GNU General Public License from time to time.
   32884      Such new versions will be similar in spirit to the present
   32885      version, but may differ in detail to address new problems or
   32886      concerns.
   32887 
   32888      Each version is given a distinguishing version number.  If the
   32889      Program specifies that a certain numbered version of the GNU
   32890      General Public License "or any later version" applies to it, you
   32891      have the option of following the terms and conditions either of
   32892      that numbered version or of any later version published by the
   32893      Free Software Foundation.  If the Program does not specify a
   32894      version number of the GNU General Public License, you may choose
   32895      any version ever published by the Free Software Foundation.
   32896 
   32897      If the Program specifies that a proxy can decide which future
   32898      versions of the GNU General Public License can be used, that
   32899      proxy's public statement of acceptance of a version permanently
   32900      authorizes you to choose that version for the Program.
   32901 
   32902      Later license versions may give you additional or different
   32903      permissions.  However, no additional obligations are imposed on any
   32904      author or copyright holder as a result of your choosing to follow a
   32905      later version.
   32906 
   32907  15. Disclaimer of Warranty.
   32908 
   32909      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
   32910      APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
   32911      COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
   32912      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
   32913      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   32914      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
   32915      RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
   32916      SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
   32917      NECESSARY SERVICING, REPAIR OR CORRECTION.
   32918 
   32919  16. Limitation of Liability.
   32920 
   32921      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
   32922      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
   32923      AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
   32924      FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
   32925      CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
   32926      THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
   32927      BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
   32928      PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
   32929      PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
   32930      THE POSSIBILITY OF SUCH DAMAGES.
   32931 
   32932  17. Interpretation of Sections 15 and 16.
   32933 
   32934      If the disclaimer of warranty and limitation of liability provided
   32935      above cannot be given local legal effect according to their terms,
   32936      reviewing courts shall apply local law that most closely
   32937      approximates an absolute waiver of all civil liability in
   32938      connection with the Program, unless a warranty or assumption of
   32939      liability accompanies a copy of the Program in return for a fee.
   32940 
   32941 
   32942 END OF TERMS AND CONDITIONS
   32943 ===========================
   32944 
   32945 How to Apply These Terms to Your New Programs
   32946 =============================================
   32947 
   32948 If you develop a new program, and you want it to be of the greatest
   32949 possible use to the public, the best way to achieve this is to make it
   32950 free software which everyone can redistribute and change under these
   32951 terms.
   32952 
   32953  To do so, attach the following notices to the program.  It is safest
   32954 to attach them to the start of each source file to most effectively
   32955 state the exclusion of warranty; and each file should have at least the
   32956 "copyright" line and a pointer to where the full notice is found.
   32957 
   32958      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
   32959      Copyright (C) YEAR NAME OF AUTHOR
   32960 
   32961      This program is free software: you can redistribute it and/or modify
   32962      it under the terms of the GNU General Public License as published by
   32963      the Free Software Foundation, either version 3 of the License, or (at
   32964      your option) any later version.
   32965 
   32966      This program is distributed in the hope that it will be useful, but
   32967      WITHOUT ANY WARRANTY; without even the implied warranty of
   32968      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   32969      General Public License for more details.
   32970 
   32971      You should have received a copy of the GNU General Public License
   32972      along with this program.  If not, see `http://www.gnu.org/licenses/'.
   32973 
   32974  Also add information on how to contact you by electronic and paper
   32975 mail.
   32976 
   32977  If the program does terminal interaction, make it output a short
   32978 notice like this when it starts in an interactive mode:
   32979 
   32980      PROGRAM Copyright (C) YEAR NAME OF AUTHOR
   32981      This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
   32982      This is free software, and you are welcome to redistribute it
   32983      under certain conditions; type `show c' for details.
   32984 
   32985  The hypothetical commands `show w' and `show c' should show the
   32986 appropriate parts of the General Public License.  Of course, your
   32987 program's commands might be different; for a GUI interface, you would
   32988 use an "about box".
   32989 
   32990  You should also get your employer (if you work as a programmer) or
   32991 school, if any, to sign a "copyright disclaimer" for the program, if
   32992 necessary.  For more information on this, and how to apply and follow
   32993 the GNU GPL, see `http://www.gnu.org/licenses/'.
   32994 
   32995  The GNU General Public License does not permit incorporating your
   32996 program into proprietary programs.  If your program is a subroutine
   32997 library, you may consider it more useful to permit linking proprietary
   32998 applications with the library.  If this is what you want to do, use the
   32999 GNU Lesser General Public License instead of this License.  But first,
   33000 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
   33001 
   33002 
   33003 File: gccint.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
   33004 
   33005 GNU Free Documentation License
   33006 ******************************
   33007 
   33008                       Version 1.2, November 2002
   33009 
   33010      Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
   33011      51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
   33012 
   33013      Everyone is permitted to copy and distribute verbatim copies
   33014      of this license document, but changing it is not allowed.
   33015 
   33016   0. PREAMBLE
   33017 
   33018      The purpose of this License is to make a manual, textbook, or other
   33019      functional and useful document "free" in the sense of freedom: to
   33020      assure everyone the effective freedom to copy and redistribute it,
   33021      with or without modifying it, either commercially or
   33022      noncommercially.  Secondarily, this License preserves for the
   33023      author and publisher a way to get credit for their work, while not
   33024      being considered responsible for modifications made by others.
   33025 
   33026      This License is a kind of "copyleft", which means that derivative
   33027      works of the document must themselves be free in the same sense.
   33028      It complements the GNU General Public License, which is a copyleft
   33029      license designed for free software.
   33030 
   33031      We have designed this License in order to use it for manuals for
   33032      free software, because free software needs free documentation: a
   33033      free program should come with manuals providing the same freedoms
   33034      that the software does.  But this License is not limited to
   33035      software manuals; it can be used for any textual work, regardless
   33036      of subject matter or whether it is published as a printed book.
   33037      We recommend this License principally for works whose purpose is
   33038      instruction or reference.
   33039 
   33040   1. APPLICABILITY AND DEFINITIONS
   33041 
   33042      This License applies to any manual or other work, in any medium,
   33043      that contains a notice placed by the copyright holder saying it
   33044      can be distributed under the terms of this License.  Such a notice
   33045      grants a world-wide, royalty-free license, unlimited in duration,
   33046      to use that work under the conditions stated herein.  The
   33047      "Document", below, refers to any such manual or work.  Any member
   33048      of the public is a licensee, and is addressed as "you".  You
   33049      accept the license if you copy, modify or distribute the work in a
   33050      way requiring permission under copyright law.
   33051 
   33052      A "Modified Version" of the Document means any work containing the
   33053      Document or a portion of it, either copied verbatim, or with
   33054      modifications and/or translated into another language.
   33055 
   33056      A "Secondary Section" is a named appendix or a front-matter section
   33057      of the Document that deals exclusively with the relationship of the
   33058      publishers or authors of the Document to the Document's overall
   33059      subject (or to related matters) and contains nothing that could
   33060      fall directly within that overall subject.  (Thus, if the Document
   33061      is in part a textbook of mathematics, a Secondary Section may not
   33062      explain any mathematics.)  The relationship could be a matter of
   33063      historical connection with the subject or with related matters, or
   33064      of legal, commercial, philosophical, ethical or political position
   33065      regarding them.
   33066 
   33067      The "Invariant Sections" are certain Secondary Sections whose
   33068      titles are designated, as being those of Invariant Sections, in
   33069      the notice that says that the Document is released under this
   33070      License.  If a section does not fit the above definition of
   33071      Secondary then it is not allowed to be designated as Invariant.
   33072      The Document may contain zero Invariant Sections.  If the Document
   33073      does not identify any Invariant Sections then there are none.
   33074 
   33075      The "Cover Texts" are certain short passages of text that are
   33076      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
   33077      that says that the Document is released under this License.  A
   33078      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
   33079      be at most 25 words.
   33080 
   33081      A "Transparent" copy of the Document means a machine-readable copy,
   33082      represented in a format whose specification is available to the
   33083      general public, that is suitable for revising the document
   33084      straightforwardly with generic text editors or (for images
   33085      composed of pixels) generic paint programs or (for drawings) some
   33086      widely available drawing editor, and that is suitable for input to
   33087      text formatters or for automatic translation to a variety of
   33088      formats suitable for input to text formatters.  A copy made in an
   33089      otherwise Transparent file format whose markup, or absence of
   33090      markup, has been arranged to thwart or discourage subsequent
   33091      modification by readers is not Transparent.  An image format is
   33092      not Transparent if used for any substantial amount of text.  A
   33093      copy that is not "Transparent" is called "Opaque".
   33094 
   33095      Examples of suitable formats for Transparent copies include plain
   33096      ASCII without markup, Texinfo input format, LaTeX input format,
   33097      SGML or XML using a publicly available DTD, and
   33098      standard-conforming simple HTML, PostScript or PDF designed for
   33099      human modification.  Examples of transparent image formats include
   33100      PNG, XCF and JPG.  Opaque formats include proprietary formats that
   33101      can be read and edited only by proprietary word processors, SGML or
   33102      XML for which the DTD and/or processing tools are not generally
   33103      available, and the machine-generated HTML, PostScript or PDF
   33104      produced by some word processors for output purposes only.
   33105 
   33106      The "Title Page" means, for a printed book, the title page itself,
   33107      plus such following pages as are needed to hold, legibly, the
   33108      material this License requires to appear in the title page.  For
   33109      works in formats which do not have any title page as such, "Title
   33110      Page" means the text near the most prominent appearance of the
   33111      work's title, preceding the beginning of the body of the text.
   33112 
   33113      A section "Entitled XYZ" means a named subunit of the Document
   33114      whose title either is precisely XYZ or contains XYZ in parentheses
   33115      following text that translates XYZ in another language.  (Here XYZ
   33116      stands for a specific section name mentioned below, such as
   33117      "Acknowledgements", "Dedications", "Endorsements", or "History".)
   33118      To "Preserve the Title" of such a section when you modify the
   33119      Document means that it remains a section "Entitled XYZ" according
   33120      to this definition.
   33121 
   33122      The Document may include Warranty Disclaimers next to the notice
   33123      which states that this License applies to the Document.  These
   33124      Warranty Disclaimers are considered to be included by reference in
   33125      this License, but only as regards disclaiming warranties: any other
   33126      implication that these Warranty Disclaimers may have is void and
   33127      has no effect on the meaning of this License.
   33128 
   33129   2. VERBATIM COPYING
   33130 
   33131      You may copy and distribute the Document in any medium, either
   33132      commercially or noncommercially, provided that this License, the
   33133      copyright notices, and the license notice saying this License
   33134      applies to the Document are reproduced in all copies, and that you
   33135      add no other conditions whatsoever to those of this License.  You
   33136      may not use technical measures to obstruct or control the reading
   33137      or further copying of the copies you make or distribute.  However,
   33138      you may accept compensation in exchange for copies.  If you
   33139      distribute a large enough number of copies you must also follow
   33140      the conditions in section 3.
   33141 
   33142      You may also lend copies, under the same conditions stated above,
   33143      and you may publicly display copies.
   33144 
   33145   3. COPYING IN QUANTITY
   33146 
   33147      If you publish printed copies (or copies in media that commonly
   33148      have printed covers) of the Document, numbering more than 100, and
   33149      the Document's license notice requires Cover Texts, you must
   33150      enclose the copies in covers that carry, clearly and legibly, all
   33151      these Cover Texts: Front-Cover Texts on the front cover, and
   33152      Back-Cover Texts on the back cover.  Both covers must also clearly
   33153      and legibly identify you as the publisher of these copies.  The
   33154      front cover must present the full title with all words of the
   33155      title equally prominent and visible.  You may add other material
   33156      on the covers in addition.  Copying with changes limited to the
   33157      covers, as long as they preserve the title of the Document and
   33158      satisfy these conditions, can be treated as verbatim copying in
   33159      other respects.
   33160 
   33161      If the required texts for either cover are too voluminous to fit
   33162      legibly, you should put the first ones listed (as many as fit
   33163      reasonably) on the actual cover, and continue the rest onto
   33164      adjacent pages.
   33165 
   33166      If you publish or distribute Opaque copies of the Document
   33167      numbering more than 100, you must either include a
   33168      machine-readable Transparent copy along with each Opaque copy, or
   33169      state in or with each Opaque copy a computer-network location from
   33170      which the general network-using public has access to download
   33171      using public-standard network protocols a complete Transparent
   33172      copy of the Document, free of added material.  If you use the
   33173      latter option, you must take reasonably prudent steps, when you
   33174      begin distribution of Opaque copies in quantity, to ensure that
   33175      this Transparent copy will remain thus accessible at the stated
   33176      location until at least one year after the last time you
   33177      distribute an Opaque copy (directly or through your agents or
   33178      retailers) of that edition to the public.
   33179 
   33180      It is requested, but not required, that you contact the authors of
   33181      the Document well before redistributing any large number of
   33182      copies, to give them a chance to provide you with an updated
   33183      version of the Document.
   33184 
   33185   4. MODIFICATIONS
   33186 
   33187      You may copy and distribute a Modified Version of the Document
   33188      under the conditions of sections 2 and 3 above, provided that you
   33189      release the Modified Version under precisely this License, with
   33190      the Modified Version filling the role of the Document, thus
   33191      licensing distribution and modification of the Modified Version to
   33192      whoever possesses a copy of it.  In addition, you must do these
   33193      things in the Modified Version:
   33194 
   33195        A. Use in the Title Page (and on the covers, if any) a title
   33196           distinct from that of the Document, and from those of
   33197           previous versions (which should, if there were any, be listed
   33198           in the History section of the Document).  You may use the
   33199           same title as a previous version if the original publisher of
   33200           that version gives permission.
   33201 
   33202        B. List on the Title Page, as authors, one or more persons or
   33203           entities responsible for authorship of the modifications in
   33204           the Modified Version, together with at least five of the
   33205           principal authors of the Document (all of its principal
   33206           authors, if it has fewer than five), unless they release you
   33207           from this requirement.
   33208 
   33209        C. State on the Title page the name of the publisher of the
   33210           Modified Version, as the publisher.
   33211 
   33212        D. Preserve all the copyright notices of the Document.
   33213 
   33214        E. Add an appropriate copyright notice for your modifications
   33215           adjacent to the other copyright notices.
   33216 
   33217        F. Include, immediately after the copyright notices, a license
   33218           notice giving the public permission to use the Modified
   33219           Version under the terms of this License, in the form shown in
   33220           the Addendum below.
   33221 
   33222        G. Preserve in that license notice the full lists of Invariant
   33223           Sections and required Cover Texts given in the Document's
   33224           license notice.
   33225 
   33226        H. Include an unaltered copy of this License.
   33227 
   33228        I. Preserve the section Entitled "History", Preserve its Title,
   33229           and add to it an item stating at least the title, year, new
   33230           authors, and publisher of the Modified Version as given on
   33231           the Title Page.  If there is no section Entitled "History" in
   33232           the Document, create one stating the title, year, authors,
   33233           and publisher of the Document as given on its Title Page,
   33234           then add an item describing the Modified Version as stated in
   33235           the previous sentence.
   33236 
   33237        J. Preserve the network location, if any, given in the Document
   33238           for public access to a Transparent copy of the Document, and
   33239           likewise the network locations given in the Document for
   33240           previous versions it was based on.  These may be placed in
   33241           the "History" section.  You may omit a network location for a
   33242           work that was published at least four years before the
   33243           Document itself, or if the original publisher of the version
   33244           it refers to gives permission.
   33245 
   33246        K. For any section Entitled "Acknowledgements" or "Dedications",
   33247           Preserve the Title of the section, and preserve in the
   33248           section all the substance and tone of each of the contributor
   33249           acknowledgements and/or dedications given therein.
   33250 
   33251        L. Preserve all the Invariant Sections of the Document,
   33252           unaltered in their text and in their titles.  Section numbers
   33253           or the equivalent are not considered part of the section
   33254           titles.
   33255 
   33256        M. Delete any section Entitled "Endorsements".  Such a section
   33257           may not be included in the Modified Version.
   33258 
   33259        N. Do not retitle any existing section to be Entitled
   33260           "Endorsements" or to conflict in title with any Invariant
   33261           Section.
   33262 
   33263        O. Preserve any Warranty Disclaimers.
   33264 
   33265      If the Modified Version includes new front-matter sections or
   33266      appendices that qualify as Secondary Sections and contain no
   33267      material copied from the Document, you may at your option
   33268      designate some or all of these sections as invariant.  To do this,
   33269      add their titles to the list of Invariant Sections in the Modified
   33270      Version's license notice.  These titles must be distinct from any
   33271      other section titles.
   33272 
   33273      You may add a section Entitled "Endorsements", provided it contains
   33274      nothing but endorsements of your Modified Version by various
   33275      parties--for example, statements of peer review or that the text
   33276      has been approved by an organization as the authoritative
   33277      definition of a standard.
   33278 
   33279      You may add a passage of up to five words as a Front-Cover Text,
   33280      and a passage of up to 25 words as a Back-Cover Text, to the end
   33281      of the list of Cover Texts in the Modified Version.  Only one
   33282      passage of Front-Cover Text and one of Back-Cover Text may be
   33283      added by (or through arrangements made by) any one entity.  If the
   33284      Document already includes a cover text for the same cover,
   33285      previously added by you or by arrangement made by the same entity
   33286      you are acting on behalf of, you may not add another; but you may
   33287      replace the old one, on explicit permission from the previous
   33288      publisher that added the old one.
   33289 
   33290      The author(s) and publisher(s) of the Document do not by this
   33291      License give permission to use their names for publicity for or to
   33292      assert or imply endorsement of any Modified Version.
   33293 
   33294   5. COMBINING DOCUMENTS
   33295 
   33296      You may combine the Document with other documents released under
   33297      this License, under the terms defined in section 4 above for
   33298      modified versions, provided that you include in the combination
   33299      all of the Invariant Sections of all of the original documents,
   33300      unmodified, and list them all as Invariant Sections of your
   33301      combined work in its license notice, and that you preserve all
   33302      their Warranty Disclaimers.
   33303 
   33304      The combined work need only contain one copy of this License, and
   33305      multiple identical Invariant Sections may be replaced with a single
   33306      copy.  If there are multiple Invariant Sections with the same name
   33307      but different contents, make the title of each such section unique
   33308      by adding at the end of it, in parentheses, the name of the
   33309      original author or publisher of that section if known, or else a
   33310      unique number.  Make the same adjustment to the section titles in
   33311      the list of Invariant Sections in the license notice of the
   33312      combined work.
   33313 
   33314      In the combination, you must combine any sections Entitled
   33315      "History" in the various original documents, forming one section
   33316      Entitled "History"; likewise combine any sections Entitled
   33317      "Acknowledgements", and any sections Entitled "Dedications".  You
   33318      must delete all sections Entitled "Endorsements."
   33319 
   33320   6. COLLECTIONS OF DOCUMENTS
   33321 
   33322      You may make a collection consisting of the Document and other
   33323      documents released under this License, and replace the individual
   33324      copies of this License in the various documents with a single copy
   33325      that is included in the collection, provided that you follow the
   33326      rules of this License for verbatim copying of each of the
   33327      documents in all other respects.
   33328 
   33329      You may extract a single document from such a collection, and
   33330      distribute it individually under this License, provided you insert
   33331      a copy of this License into the extracted document, and follow
   33332      this License in all other respects regarding verbatim copying of
   33333      that document.
   33334 
   33335   7. AGGREGATION WITH INDEPENDENT WORKS
   33336 
   33337      A compilation of the Document or its derivatives with other
   33338      separate and independent documents or works, in or on a volume of
   33339      a storage or distribution medium, is called an "aggregate" if the
   33340      copyright resulting from the compilation is not used to limit the
   33341      legal rights of the compilation's users beyond what the individual
   33342      works permit.  When the Document is included in an aggregate, this
   33343      License does not apply to the other works in the aggregate which
   33344      are not themselves derivative works of the Document.
   33345 
   33346      If the Cover Text requirement of section 3 is applicable to these
   33347      copies of the Document, then if the Document is less than one half
   33348      of the entire aggregate, the Document's Cover Texts may be placed
   33349      on covers that bracket the Document within the aggregate, or the
   33350      electronic equivalent of covers if the Document is in electronic
   33351      form.  Otherwise they must appear on printed covers that bracket
   33352      the whole aggregate.
   33353 
   33354   8. TRANSLATION
   33355 
   33356      Translation is considered a kind of modification, so you may
   33357      distribute translations of the Document under the terms of section
   33358      4.  Replacing Invariant Sections with translations requires special
   33359      permission from their copyright holders, but you may include
   33360      translations of some or all Invariant Sections in addition to the
   33361      original versions of these Invariant Sections.  You may include a
   33362      translation of this License, and all the license notices in the
   33363      Document, and any Warranty Disclaimers, provided that you also
   33364      include the original English version of this License and the
   33365      original versions of those notices and disclaimers.  In case of a
   33366      disagreement between the translation and the original version of
   33367      this License or a notice or disclaimer, the original version will
   33368      prevail.
   33369 
   33370      If a section in the Document is Entitled "Acknowledgements",
   33371      "Dedications", or "History", the requirement (section 4) to
   33372      Preserve its Title (section 1) will typically require changing the
   33373      actual title.
   33374 
   33375   9. TERMINATION
   33376 
   33377      You may not copy, modify, sublicense, or distribute the Document
   33378      except as expressly provided for under this License.  Any other
   33379      attempt to copy, modify, sublicense or distribute the Document is
   33380      void, and will automatically terminate your rights under this
   33381      License.  However, parties who have received copies, or rights,
   33382      from you under this License will not have their licenses
   33383      terminated so long as such parties remain in full compliance.
   33384 
   33385  10. FUTURE REVISIONS OF THIS LICENSE
   33386 
   33387      The Free Software Foundation may publish new, revised versions of
   33388      the GNU Free Documentation License from time to time.  Such new
   33389      versions will be similar in spirit to the present version, but may
   33390      differ in detail to address new problems or concerns.  See
   33391      `http://www.gnu.org/copyleft/'.
   33392 
   33393      Each version of the License is given a distinguishing version
   33394      number.  If the Document specifies that a particular numbered
   33395      version of this License "or any later version" applies to it, you
   33396      have the option of following the terms and conditions either of
   33397      that specified version or of any later version that has been
   33398      published (not as a draft) by the Free Software Foundation.  If
   33399      the Document does not specify a version number of this License,
   33400      you may choose any version ever published (not as a draft) by the
   33401      Free Software Foundation.
   33402 
   33403 ADDENDUM: How to use this License for your documents
   33404 ====================================================
   33405 
   33406 To use this License in a document you have written, include a copy of
   33407 the License in the document and put the following copyright and license
   33408 notices just after the title page:
   33409 
   33410        Copyright (C)  YEAR  YOUR NAME.
   33411        Permission is granted to copy, distribute and/or modify this document
   33412        under the terms of the GNU Free Documentation License, Version 1.2
   33413        or any later version published by the Free Software Foundation;
   33414        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
   33415        Texts.  A copy of the license is included in the section entitled ``GNU
   33416        Free Documentation License''.
   33417 
   33418  If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
   33419 replace the "with...Texts." line with this:
   33420 
   33421          with the Invariant Sections being LIST THEIR TITLES, with
   33422          the Front-Cover Texts being LIST, and with the Back-Cover Texts
   33423          being LIST.
   33424 
   33425  If you have Invariant Sections without Cover Texts, or some other
   33426 combination of the three, merge those two alternatives to suit the
   33427 situation.
   33428 
   33429  If your document contains nontrivial examples of program code, we
   33430 recommend releasing these examples in parallel under your choice of
   33431 free software license, such as the GNU General Public License, to
   33432 permit their use in free software.
   33433 
   33434 
   33435 File: gccint.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
   33436 
   33437 Contributors to GCC
   33438 *******************
   33439 
   33440 The GCC project would like to thank its many contributors.  Without
   33441 them the project would not have been nearly as successful as it has
   33442 been.  Any omissions in this list are accidental.  Feel free to contact
   33443 <law (a] redhat.com> or <gerald (a] pfeifer.com> if you have been left out or
   33444 some of your contributions are not listed.  Please keep this list in
   33445 alphabetical order.
   33446 
   33447    * Analog Devices helped implement the support for complex data types
   33448      and iterators.
   33449 
   33450    * John David Anglin for threading-related fixes and improvements to
   33451      libstdc++-v3, and the HP-UX port.
   33452 
   33453    * James van Artsdalen wrote the code that makes efficient use of the
   33454      Intel 80387 register stack.
   33455 
   33456    * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
   33457      Series port.
   33458 
   33459    * Alasdair Baird for various bug fixes.
   33460 
   33461    * Giovanni Bajo for analyzing lots of complicated C++ problem
   33462      reports.
   33463 
   33464    * Peter Barada for his work to improve code generation for new
   33465      ColdFire cores.
   33466 
   33467    * Gerald Baumgartner added the signature extension to the C++ front
   33468      end.
   33469 
   33470    * Godmar Back for his Java improvements and encouragement.
   33471 
   33472    * Scott Bambrough for help porting the Java compiler.
   33473 
   33474    * Wolfgang Bangerth for processing tons of bug reports.
   33475 
   33476    * Jon Beniston for his Microsoft Windows port of Java.
   33477 
   33478    * Daniel Berlin for better DWARF2 support, faster/better
   33479      optimizations, improved alias analysis, plus migrating GCC to
   33480      Bugzilla.
   33481 
   33482    * Geoff Berry for his Java object serialization work and various
   33483      patches.
   33484 
   33485    * Uros Bizjak for the implementation of x87 math built-in functions
   33486      and for various middle end and i386 back end improvements and bug
   33487      fixes.
   33488 
   33489    * Eric Blake for helping to make GCJ and libgcj conform to the
   33490      specifications.
   33491 
   33492    * Janne Blomqvist for contributions to GNU Fortran.
   33493 
   33494    * Segher Boessenkool for various fixes.
   33495 
   33496    * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
   33497      other Java work.
   33498 
   33499    * Neil Booth for work on cpplib, lang hooks, debug hooks and other
   33500      miscellaneous clean-ups.
   33501 
   33502    * Steven Bosscher for integrating the GNU Fortran front end into GCC
   33503      and for contributing to the tree-ssa branch.
   33504 
   33505    * Eric Botcazou for fixing middle- and backend bugs left and right.
   33506 
   33507    * Per Bothner for his direction via the steering committee and
   33508      various improvements to the infrastructure for supporting new
   33509      languages.  Chill front end implementation.  Initial
   33510      implementations of cpplib, fix-header, config.guess, libio, and
   33511      past C++ library (libg++) maintainer.  Dreaming up, designing and
   33512      implementing much of GCJ.
   33513 
   33514    * Devon Bowen helped port GCC to the Tahoe.
   33515 
   33516    * Don Bowman for mips-vxworks contributions.
   33517 
   33518    * Dave Brolley for work on cpplib and Chill.
   33519 
   33520    * Paul Brook for work on the ARM architecture and maintaining GNU
   33521      Fortran.
   33522 
   33523    * Robert Brown implemented the support for Encore 32000 systems.
   33524 
   33525    * Christian Bruel for improvements to local store elimination.
   33526 
   33527    * Herman A.J. ten Brugge for various fixes.
   33528 
   33529    * Joerg Brunsmann for Java compiler hacking and help with the GCJ
   33530      FAQ.
   33531 
   33532    * Joe Buck for his direction via the steering committee.
   33533 
   33534    * Craig Burley for leadership of the G77 Fortran effort.
   33535 
   33536    * Stephan Buys for contributing Doxygen notes for libstdc++.
   33537 
   33538    * Paolo Carlini for libstdc++ work: lots of efficiency improvements
   33539      to the C++ strings, streambufs and formatted I/O, hard detective
   33540      work on the frustrating localization issues, and keeping up with
   33541      the problem reports.
   33542 
   33543    * John Carr for his alias work, SPARC hacking, infrastructure
   33544      improvements, previous contributions to the steering committee,
   33545      loop optimizations, etc.
   33546 
   33547    * Stephane Carrez for 68HC11 and 68HC12 ports.
   33548 
   33549    * Steve Chamberlain for support for the Renesas SH and H8 processors
   33550      and the PicoJava processor, and for GCJ config fixes.
   33551 
   33552    * Glenn Chambers for help with the GCJ FAQ.
   33553 
   33554    * John-Marc Chandonia for various libgcj patches.
   33555 
   33556    * Scott Christley for his Objective-C contributions.
   33557 
   33558    * Eric Christopher for his Java porting help and clean-ups.
   33559 
   33560    * Branko Cibej for more warning contributions.
   33561 
   33562    * The GNU Classpath project for all of their merged runtime code.
   33563 
   33564    * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and
   33565      other random hacking.
   33566 
   33567    * Michael Cook for libstdc++ cleanup patches to reduce warnings.
   33568 
   33569    * R. Kelley Cook for making GCC buildable from a read-only directory
   33570      as well as other miscellaneous build process and documentation
   33571      clean-ups.
   33572 
   33573    * Ralf Corsepius for SH testing and minor bug fixing.
   33574 
   33575    * Stan Cox for care and feeding of the x86 port and lots of behind
   33576      the scenes hacking.
   33577 
   33578    * Alex Crain provided changes for the 3b1.
   33579 
   33580    * Ian Dall for major improvements to the NS32k port.
   33581 
   33582    * Paul Dale for his work to add uClinux platform support to the m68k
   33583      backend.
   33584 
   33585    * Dario Dariol contributed the four varieties of sample programs
   33586      that print a copy of their source.
   33587 
   33588    * Russell Davidson for fstream and stringstream fixes in libstdc++.
   33589 
   33590    * Bud Davis for work on the G77 and GNU Fortran compilers.
   33591 
   33592    * Mo DeJong for GCJ and libgcj bug fixes.
   33593 
   33594    * DJ Delorie for the DJGPP port, build and libiberty maintenance,
   33595      various bug fixes, and the M32C port.
   33596 
   33597    * Arnaud Desitter for helping to debug GNU Fortran.
   33598 
   33599    * Gabriel Dos Reis for contributions to G++, contributions and
   33600      maintenance of GCC diagnostics infrastructure, libstdc++-v3,
   33601      including `valarray<>', `complex<>', maintaining the numerics
   33602      library (including that pesky `<limits>' :-) and keeping
   33603      up-to-date anything to do with numbers.
   33604 
   33605    * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
   33606      ISO C99 support, CFG dumping support, etc., plus support of the
   33607      C++ runtime libraries including for all kinds of C interface
   33608      issues, contributing and maintaining `complex<>', sanity checking
   33609      and disbursement, configuration architecture, libio maintenance,
   33610      and early math work.
   33611 
   33612    * Zdenek Dvorak for a new loop unroller and various fixes.
   33613 
   33614    * Richard Earnshaw for his ongoing work with the ARM.
   33615 
   33616    * David Edelsohn for his direction via the steering committee,
   33617      ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
   33618      loop changes, doing the entire AIX port of libstdc++ with his bare
   33619      hands, and for ensuring GCC properly keeps working on AIX.
   33620 
   33621    * Kevin Ediger for the floating point formatting of num_put::do_put
   33622      in libstdc++.
   33623 
   33624    * Phil Edwards for libstdc++ work including configuration hackery,
   33625      documentation maintainer, chief breaker of the web pages, the
   33626      occasional iostream bug fix, and work on shared library symbol
   33627      versioning.
   33628 
   33629    * Paul Eggert for random hacking all over GCC.
   33630 
   33631    * Mark Elbrecht for various DJGPP improvements, and for libstdc++
   33632      configuration support for locales and fstream-related fixes.
   33633 
   33634    * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
   33635      iostreams.
   33636 
   33637    * Christian Ehrhardt for dealing with bug reports.
   33638 
   33639    * Ben Elliston for his work to move the Objective-C runtime into its
   33640      own subdirectory and for his work on autoconf.
   33641 
   33642    * Revital Eres for work on the PowerPC 750CL port.
   33643 
   33644    * Marc Espie for OpenBSD support.
   33645 
   33646    * Doug Evans for much of the global optimization framework, arc,
   33647      m32r, and SPARC work.
   33648 
   33649    * Christopher Faylor for his work on the Cygwin port and for caring
   33650      and feeding the gcc.gnu.org box and saving its users tons of spam.
   33651 
   33652    * Fred Fish for BeOS support and Ada fixes.
   33653 
   33654    * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
   33655 
   33656    * Peter Gerwinski for various bug fixes and the Pascal front end.
   33657 
   33658    * Kaveh R. Ghazi for his direction via the steering committee,
   33659      amazing work to make `-W -Wall -W* -Werror' useful, and
   33660      continuously testing GCC on a plethora of platforms.  Kaveh
   33661      extends his gratitude to the CAIP Center at Rutgers University for
   33662      providing him with computing resources to work on Free Software
   33663      since the late 1980s.
   33664 
   33665    * John Gilmore for a donation to the FSF earmarked improving GNU
   33666      Java.
   33667 
   33668    * Judy Goldberg for c++ contributions.
   33669 
   33670    * Torbjorn Granlund for various fixes and the c-torture testsuite,
   33671      multiply- and divide-by-constant optimization, improved long long
   33672      support, improved leaf function register allocation, and his
   33673      direction via the steering committee.
   33674 
   33675    * Anthony Green for his `-Os' contributions and Java front end work.
   33676 
   33677    * Stu Grossman for gdb hacking, allowing GCJ developers to debug
   33678      Java code.
   33679 
   33680    * Michael K. Gschwind contributed the port to the PDP-11.
   33681 
   33682    * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
   33683      the support for Dwarf symbolic debugging information, and much of
   33684      the support for System V Release 4.  He has also worked heavily on
   33685      the Intel 386 and 860 support.
   33686 
   33687    * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
   33688      GCSE.
   33689 
   33690    * Bruno Haible for improvements in the runtime overhead for EH, new
   33691      warnings and assorted bug fixes.
   33692 
   33693    * Andrew Haley for his amazing Java compiler and library efforts.
   33694 
   33695    * Chris Hanson assisted in making GCC work on HP-UX for the 9000
   33696      series 300.
   33697 
   33698    * Michael Hayes for various thankless work he's done trying to get
   33699      the c30/c40 ports functional.  Lots of loop and unroll
   33700      improvements and fixes.
   33701 
   33702    * Dara Hazeghi for wading through myriads of target-specific bug
   33703      reports.
   33704 
   33705    * Kate Hedstrom for staking the G77 folks with an initial testsuite.
   33706 
   33707    * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
   33708      work, loop opts, and generally fixing lots of old problems we've
   33709      ignored for years, flow rewrite and lots of further stuff,
   33710      including reviewing tons of patches.
   33711 
   33712    * Aldy Hernandez for working on the PowerPC port, SIMD support, and
   33713      various fixes.
   33714 
   33715    * Nobuyuki Hikichi of Software Research Associates, Tokyo,
   33716      contributed the support for the Sony NEWS machine.
   33717 
   33718    * Kazu Hirata for caring and feeding the Renesas H8/300 port and
   33719      various fixes.
   33720 
   33721    * Katherine Holcomb for work on GNU Fortran.
   33722 
   33723    * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
   33724      of testing and bug fixing, particularly of GCC configury code.
   33725 
   33726    * Steve Holmgren for MachTen patches.
   33727 
   33728    * Jan Hubicka for his x86 port improvements.
   33729 
   33730    * Falk Hueffner for working on C and optimization bug reports.
   33731 
   33732    * Bernardo Innocenti for his m68k work, including merging of
   33733      ColdFire improvements and uClinux support.
   33734 
   33735    * Christian Iseli for various bug fixes.
   33736 
   33737    * Kamil Iskra for general m68k hacking.
   33738 
   33739    * Lee Iverson for random fixes and MIPS testing.
   33740 
   33741    * Andreas Jaeger for testing and benchmarking of GCC and various bug
   33742      fixes.
   33743 
   33744    * Jakub Jelinek for his SPARC work and sibling call optimizations as
   33745      well as lots of bug fixes and test cases, and for improving the
   33746      Java build system.
   33747 
   33748    * Janis Johnson for ia64 testing and fixes, her quality improvement
   33749      sidetracks, and web page maintenance.
   33750 
   33751    * Kean Johnston for SCO OpenServer support and various fixes.
   33752 
   33753    * Tim Josling for the sample language treelang based originally on
   33754      Richard Kenner's "toy" language.
   33755 
   33756    * Nicolai Josuttis for additional libstdc++ documentation.
   33757 
   33758    * Klaus Kaempf for his ongoing work to make alpha-vms a viable
   33759      target.
   33760 
   33761    * Steven G. Kargl for work on GNU Fortran.
   33762 
   33763    * David Kashtan of SRI adapted GCC to VMS.
   33764 
   33765    * Ryszard Kabatek for many, many libstdc++ bug fixes and
   33766      optimizations of strings, especially member functions, and for
   33767      auto_ptr fixes.
   33768 
   33769    * Geoffrey Keating for his ongoing work to make the PPC work for
   33770      GNU/Linux and his automatic regression tester.
   33771 
   33772    * Brendan Kehoe for his ongoing work with G++ and for a lot of early
   33773      work in just about every part of libstdc++.
   33774 
   33775    * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
   33776      MIL-STD-1750A.
   33777 
   33778    * Richard Kenner of the New York University Ultracomputer Research
   33779      Laboratory wrote the machine descriptions for the AMD 29000, the
   33780      DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
   33781      support for instruction attributes.  He also made changes to
   33782      better support RISC processors including changes to common
   33783      subexpression elimination, strength reduction, function calling
   33784      sequence handling, and condition code support, in addition to
   33785      generalizing the code for frame pointer elimination and delay slot
   33786      scheduling.  Richard Kenner was also the head maintainer of GCC
   33787      for several years.
   33788 
   33789    * Mumit Khan for various contributions to the Cygwin and Mingw32
   33790      ports and maintaining binary releases for Microsoft Windows hosts,
   33791      and for massive libstdc++ porting work to Cygwin/Mingw32.
   33792 
   33793    * Robin Kirkham for cpu32 support.
   33794 
   33795    * Mark Klein for PA improvements.
   33796 
   33797    * Thomas Koenig for various bug fixes.
   33798 
   33799    * Bruce Korb for the new and improved fixincludes code.
   33800 
   33801    * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
   33802      effort.
   33803 
   33804    * Charles LaBrec contributed the support for the Integrated Solutions
   33805      68020 system.
   33806 
   33807    * Asher Langton and Mike Kumbera for contributing Cray pointer
   33808      support to GNU Fortran, and for other GNU Fortran improvements.
   33809 
   33810    * Jeff Law for his direction via the steering committee,
   33811      coordinating the entire egcs project and GCC 2.95, rolling out
   33812      snapshots and releases, handling merges from GCC2, reviewing tons
   33813      of patches that might have fallen through the cracks else, and
   33814      random but extensive hacking.
   33815 
   33816    * Marc Lehmann for his direction via the steering committee and
   33817      helping with analysis and improvements of x86 performance.
   33818 
   33819    * Victor Leikehman for work on GNU Fortran.
   33820 
   33821    * Ted Lemon wrote parts of the RTL reader and printer.
   33822 
   33823    * Kriang Lerdsuwanakij for C++ improvements including template as
   33824      template parameter support, and many C++ fixes.
   33825 
   33826    * Warren Levy for tremendous work on libgcj (Java Runtime Library)
   33827      and random work on the Java front end.
   33828 
   33829    * Alain Lichnewsky ported GCC to the MIPS CPU.
   33830 
   33831    * Oskar Liljeblad for hacking on AWT and his many Java bug reports
   33832      and patches.
   33833 
   33834    * Robert Lipe for OpenServer support, new testsuites, testing, etc.
   33835 
   33836    * Chen Liqin for various S+core related fixes/improvement, and for
   33837      maintaining the S+core port.
   33838 
   33839    * Weiwen Liu for testing and various bug fixes.
   33840 
   33841    * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other
   33842      diagnostics fixes and improvements.
   33843 
   33844    * Dave Love for his ongoing work with the Fortran front end and
   33845      runtime libraries.
   33846 
   33847    * Martin von Lo"wis for internal consistency checking infrastructure,
   33848      various C++ improvements including namespace support, and tons of
   33849      assistance with libstdc++/compiler merges.
   33850 
   33851    * H.J. Lu for his previous contributions to the steering committee,
   33852      many x86 bug reports, prototype patches, and keeping the GNU/Linux
   33853      ports working.
   33854 
   33855    * Greg McGary for random fixes and (someday) bounded pointers.
   33856 
   33857    * Andrew MacLeod for his ongoing work in building a real EH system,
   33858      various code generation improvements, work on the global
   33859      optimizer, etc.
   33860 
   33861    * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
   33862      hacking improvements to compile-time performance, overall
   33863      knowledge and direction in the area of instruction scheduling, and
   33864      design and implementation of the automaton based instruction
   33865      scheduler.
   33866 
   33867    * Bob Manson for his behind the scenes work on dejagnu.
   33868 
   33869    * Philip Martin for lots of libstdc++ string and vector iterator
   33870      fixes and improvements, and string clean up and testsuites.
   33871 
   33872    * All of the Mauve project contributors, for Java test code.
   33873 
   33874    * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
   33875 
   33876    * Adam Megacz for his work on the Microsoft Windows port of GCJ.
   33877 
   33878    * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
   33879      powerpc, haifa, ECOFF debug support, and other assorted hacking.
   33880 
   33881    * Jason Merrill for his direction via the steering committee and
   33882      leading the G++ effort.
   33883 
   33884    * Martin Michlmayr for testing GCC on several architectures using the
   33885      entire Debian archive.
   33886 
   33887    * David Miller for his direction via the steering committee, lots of
   33888      SPARC work, improvements in jump.c and interfacing with the Linux
   33889      kernel developers.
   33890 
   33891    * Gary Miller ported GCC to Charles River Data Systems machines.
   33892 
   33893    * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
   33894      the entire libstdc++ testsuite namespace-compatible.
   33895 
   33896    * Mark Mitchell for his direction via the steering committee,
   33897      mountains of C++ work, load/store hoisting out of loops, alias
   33898      analysis improvements, ISO C `restrict' support, and serving as
   33899      release manager for GCC 3.x.
   33900 
   33901    * Alan Modra for various GNU/Linux bits and testing.
   33902 
   33903    * Toon Moene for his direction via the steering committee, Fortran
   33904      maintenance, and his ongoing work to make us make Fortran run fast.
   33905 
   33906    * Jason Molenda for major help in the care and feeding of all the
   33907      services on the gcc.gnu.org (formerly egcs.cygnus.com)
   33908      machine--mail, web services, ftp services, etc etc.  Doing all
   33909      this work on scrap paper and the backs of envelopes would have
   33910      been... difficult.
   33911 
   33912    * Catherine Moore for fixing various ugly problems we have sent her
   33913      way, including the haifa bug which was killing the Alpha & PowerPC
   33914      Linux kernels.
   33915 
   33916    * Mike Moreton for his various Java patches.
   33917 
   33918    * David Mosberger-Tang for various Alpha improvements, and for the
   33919      initial IA-64 port.
   33920 
   33921    * Stephen Moshier contributed the floating point emulator that
   33922      assists in cross-compilation and permits support for floating
   33923      point numbers wider than 64 bits and for ISO C99 support.
   33924 
   33925    * Bill Moyer for his behind the scenes work on various issues.
   33926 
   33927    * Philippe De Muyter for his work on the m68k port.
   33928 
   33929    * Joseph S. Myers for his work on the PDP-11 port, format checking
   33930      and ISO C99 support, and continuous emphasis on (and contributions
   33931      to) documentation.
   33932 
   33933    * Nathan Myers for his work on libstdc++-v3: architecture and
   33934      authorship through the first three snapshots, including
   33935      implementation of locale infrastructure, string, shadow C headers,
   33936      and the initial project documentation (DESIGN, CHECKLIST, and so
   33937      forth).  Later, more work on MT-safe string and shadow headers.
   33938 
   33939    * Felix Natter for documentation on porting libstdc++.
   33940 
   33941    * Nathanael Nerode for cleaning up the configuration/build process.
   33942 
   33943    * NeXT, Inc. donated the front end that supports the Objective-C
   33944      language.
   33945 
   33946    * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
   33947      the search engine setup, various documentation fixes and other
   33948      small fixes.
   33949 
   33950    * Geoff Noer for his work on getting cygwin native builds working.
   33951 
   33952    * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
   33953      tracking web pages and assorted fixes.
   33954 
   33955    * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
   33956      FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
   33957      related infrastructure improvements.
   33958 
   33959    * Alexandre Oliva for various build infrastructure improvements,
   33960      scripts and amazing testing work, including keeping libtool issues
   33961      sane and happy.
   33962 
   33963    * Stefan Olsson for work on mt_alloc.
   33964 
   33965    * Melissa O'Neill for various NeXT fixes.
   33966 
   33967    * Rainer Orth for random MIPS work, including improvements to GCC's
   33968      o32 ABI support, improvements to dejagnu's MIPS support, Java
   33969      configuration clean-ups and porting work, etc.
   33970 
   33971    * Hartmut Penner for work on the s390 port.
   33972 
   33973    * Paul Petersen wrote the machine description for the Alliant FX/8.
   33974 
   33975    * Alexandre Petit-Bianco for implementing much of the Java compiler
   33976      and continued Java maintainership.
   33977 
   33978    * Matthias Pfaller for major improvements to the NS32k port.
   33979 
   33980    * Gerald Pfeifer for his direction via the steering committee,
   33981      pointing out lots of problems we need to solve, maintenance of the
   33982      web pages, and taking care of documentation maintenance in general.
   33983 
   33984    * Andrew Pinski for processing bug reports by the dozen.
   33985 
   33986    * Ovidiu Predescu for his work on the Objective-C front end and
   33987      runtime libraries.
   33988 
   33989    * Jerry Quinn for major performance improvements in C++ formatted
   33990      I/O.
   33991 
   33992    * Ken Raeburn for various improvements to checker, MIPS ports and
   33993      various cleanups in the compiler.
   33994 
   33995    * Rolf W. Rasmussen for hacking on AWT.
   33996 
   33997    * David Reese of Sun Microsystems contributed to the Solaris on
   33998      PowerPC port.
   33999 
   34000    * Volker Reichelt for keeping up with the problem reports.
   34001 
   34002    * Joern Rennecke for maintaining the sh port, loop, regmove & reload
   34003      hacking.
   34004 
   34005    * Loren J. Rittle for improvements to libstdc++-v3 including the
   34006      FreeBSD port, threading fixes, thread-related configury changes,
   34007      critical threading documentation, and solutions to really tricky
   34008      I/O problems, as well as keeping GCC properly working on FreeBSD
   34009      and continuous testing.
   34010 
   34011    * Craig Rodrigues for processing tons of bug reports.
   34012 
   34013    * Ola Ro"nnerup for work on mt_alloc.
   34014 
   34015    * Gavin Romig-Koch for lots of behind the scenes MIPS work.
   34016 
   34017    * David Ronis inspired and encouraged Craig to rewrite the G77
   34018      documentation in texinfo format by contributing a first pass at a
   34019      translation of the old `g77-0.5.16/f/DOC' file.
   34020 
   34021    * Ken Rose for fixes to GCC's delay slot filling code.
   34022 
   34023    * Paul Rubin wrote most of the preprocessor.
   34024 
   34025    * Pe'tur Runo'lfsson for major performance improvements in C++
   34026      formatted I/O and large file support in C++ filebuf.
   34027 
   34028    * Chip Salzenberg for libstdc++ patches and improvements to locales,
   34029      traits, Makefiles, libio, libtool hackery, and "long long" support.
   34030 
   34031    * Juha Sarlin for improvements to the H8 code generator.
   34032 
   34033    * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
   34034      300.
   34035 
   34036    * Roger Sayle for improvements to constant folding and GCC's RTL
   34037      optimizers as well as for fixing numerous bugs.
   34038 
   34039    * Bradley Schatz for his work on the GCJ FAQ.
   34040 
   34041    * Peter Schauer wrote the code to allow debugging to work on the
   34042      Alpha.
   34043 
   34044    * William Schelter did most of the work on the Intel 80386 support.
   34045 
   34046    * Tobias Schlu"ter for work on GNU Fortran.
   34047 
   34048    * Bernd Schmidt for various code generation improvements and major
   34049      work in the reload pass as well a serving as release manager for
   34050      GCC 2.95.3.
   34051 
   34052    * Peter Schmid for constant testing of libstdc++--especially
   34053      application testing, going above and beyond what was requested for
   34054      the release criteria--and libstdc++ header file tweaks.
   34055 
   34056    * Jason Schroeder for jcf-dump patches.
   34057 
   34058    * Andreas Schwab for his work on the m68k port.
   34059 
   34060    * Lars Segerlund for work on GNU Fortran.
   34061 
   34062    * Joel Sherrill for his direction via the steering committee, RTEMS
   34063      contributions and RTEMS testing.
   34064 
   34065    * Nathan Sidwell for many C++ fixes/improvements.
   34066 
   34067    * Jeffrey Siegal for helping RMS with the original design of GCC,
   34068      some code which handles the parse tree and RTL data structures,
   34069      constant folding and help with the original VAX & m68k ports.
   34070 
   34071    * Kenny Simpson for prompting libstdc++ fixes due to defect reports
   34072      from the LWG (thereby keeping GCC in line with updates from the
   34073      ISO).
   34074 
   34075    * Franz Sirl for his ongoing work with making the PPC port stable
   34076      for GNU/Linux.
   34077 
   34078    * Andrey Slepuhin for assorted AIX hacking.
   34079 
   34080    * Trevor Smigiel for contributing the SPU port.
   34081 
   34082    * Christopher Smith did the port for Convex machines.
   34083 
   34084    * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
   34085 
   34086    * Randy Smith finished the Sun FPA support.
   34087 
   34088    * Scott Snyder for queue, iterator, istream, and string fixes and
   34089      libstdc++ testsuite entries.  Also for providing the patch to G77
   34090      to add rudimentary support for `INTEGER*1', `INTEGER*2', and
   34091      `LOGICAL*1'.
   34092 
   34093    * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
   34094 
   34095    * Richard Stallman, for writing the original GCC and launching the
   34096      GNU project.
   34097 
   34098    * Jan Stein of the Chalmers Computer Society provided support for
   34099      Genix, as well as part of the 32000 machine description.
   34100 
   34101    * Nigel Stephens for various mips16 related fixes/improvements.
   34102 
   34103    * Jonathan Stone wrote the machine description for the Pyramid
   34104      computer.
   34105 
   34106    * Graham Stott for various infrastructure improvements.
   34107 
   34108    * John Stracke for his Java HTTP protocol fixes.
   34109 
   34110    * Mike Stump for his Elxsi port, G++ contributions over the years
   34111      and more recently his vxworks contributions
   34112 
   34113    * Jeff Sturm for Java porting help, bug fixes, and encouragement.
   34114 
   34115    * Shigeya Suzuki for this fixes for the bsdi platforms.
   34116 
   34117    * Ian Lance Taylor for his mips16 work, general configury hacking,
   34118      fixincludes, etc.
   34119 
   34120    * Holger Teutsch provided the support for the Clipper CPU.
   34121 
   34122    * Gary Thomas for his ongoing work to make the PPC work for
   34123      GNU/Linux.
   34124 
   34125    * Philipp Thomas for random bug fixes throughout the compiler
   34126 
   34127    * Jason Thorpe for thread support in libstdc++ on NetBSD.
   34128 
   34129    * Kresten Krab Thorup wrote the run time support for the Objective-C
   34130      language and the fantastic Java bytecode interpreter.
   34131 
   34132    * Michael Tiemann for random bug fixes, the first instruction
   34133      scheduler, initial C++ support, function integration, NS32k, SPARC
   34134      and M88k machine description work, delay slot scheduling.
   34135 
   34136    * Andreas Tobler for his work porting libgcj to Darwin.
   34137 
   34138    * Teemu Torma for thread safe exception handling support.
   34139 
   34140    * Leonard Tower wrote parts of the parser, RTL generator, and RTL
   34141      definitions, and of the VAX machine description.
   34142 
   34143    * Tom Tromey for internationalization support and for his many Java
   34144      contributions and libgcj maintainership.
   34145 
   34146    * Lassi Tuura for improvements to config.guess to determine HP
   34147      processor types.
   34148 
   34149    * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
   34150 
   34151    * Andy Vaught for the design and initial implementation of the GNU
   34152      Fortran front end.
   34153 
   34154    * Brent Verner for work with the libstdc++ cshadow files and their
   34155      associated configure steps.
   34156 
   34157    * Todd Vierling for contributions for NetBSD ports.
   34158 
   34159    * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
   34160      guidance.
   34161 
   34162    * Dean Wakerley for converting the install documentation from HTML
   34163      to texinfo in time for GCC 3.0.
   34164 
   34165    * Krister Walfridsson for random bug fixes.
   34166 
   34167    * Feng Wang for contributions to GNU Fortran.
   34168 
   34169    * Stephen M. Webb for time and effort on making libstdc++ shadow
   34170      files work with the tricky Solaris 8+ headers, and for pushing the
   34171      build-time header tree.
   34172 
   34173    * John Wehle for various improvements for the x86 code generator,
   34174      related infrastructure improvements to help x86 code generation,
   34175      value range propagation and other work, WE32k port.
   34176 
   34177    * Ulrich Weigand for work on the s390 port.
   34178 
   34179    * Zack Weinberg for major work on cpplib and various other bug fixes.
   34180 
   34181    * Matt Welsh for help with Linux Threads support in GCJ.
   34182 
   34183    * Urban Widmark for help fixing java.io.
   34184 
   34185    * Mark Wielaard for new Java library code and his work integrating
   34186      with Classpath.
   34187 
   34188    * Dale Wiles helped port GCC to the Tahoe.
   34189 
   34190    * Bob Wilson from Tensilica, Inc. for the Xtensa port.
   34191 
   34192    * Jim Wilson for his direction via the steering committee, tackling
   34193      hard problems in various places that nobody else wanted to work
   34194      on, strength reduction and other loop optimizations.
   34195 
   34196    * Paul Woegerer and Tal Agmon for the CRX port.
   34197 
   34198    * Carlo Wood for various fixes.
   34199 
   34200    * Tom Wood for work on the m88k port.
   34201 
   34202    * Canqun Yang for work on GNU Fortran.
   34203 
   34204    * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
   34205      description for the Tron architecture (specifically, the Gmicro).
   34206 
   34207    * Kevin Zachmann helped port GCC to the Tahoe.
   34208 
   34209    * Ayal Zaks for Swing Modulo Scheduling (SMS).
   34210 
   34211    * Xiaoqiang Zhang for work on GNU Fortran.
   34212 
   34213    * Gilles Zunino for help porting Java to Irix.
   34214 
   34215 
   34216  The following people are recognized for their contributions to GNAT,
   34217 the Ada front end of GCC:
   34218    * Bernard Banner
   34219 
   34220    * Romain Berrendonner
   34221 
   34222    * Geert Bosch
   34223 
   34224    * Emmanuel Briot
   34225 
   34226    * Joel Brobecker
   34227 
   34228    * Ben Brosgol
   34229 
   34230    * Vincent Celier
   34231 
   34232    * Arnaud Charlet
   34233 
   34234    * Chien Chieng
   34235 
   34236    * Cyrille Comar
   34237 
   34238    * Cyrille Crozes
   34239 
   34240    * Robert Dewar
   34241 
   34242    * Gary Dismukes
   34243 
   34244    * Robert Duff
   34245 
   34246    * Ed Falis
   34247 
   34248    * Ramon Fernandez
   34249 
   34250    * Sam Figueroa
   34251 
   34252    * Vasiliy Fofanov
   34253 
   34254    * Michael Friess
   34255 
   34256    * Franco Gasperoni
   34257 
   34258    * Ted Giering
   34259 
   34260    * Matthew Gingell
   34261 
   34262    * Laurent Guerby
   34263 
   34264    * Jerome Guitton
   34265 
   34266    * Olivier Hainque
   34267 
   34268    * Jerome Hugues
   34269 
   34270    * Hristian Kirtchev
   34271 
   34272    * Jerome Lambourg
   34273 
   34274    * Bruno Leclerc
   34275 
   34276    * Albert Lee
   34277 
   34278    * Sean McNeil
   34279 
   34280    * Javier Miranda
   34281 
   34282    * Laurent Nana
   34283 
   34284    * Pascal Obry
   34285 
   34286    * Dong-Ik Oh
   34287 
   34288    * Laurent Pautet
   34289 
   34290    * Brett Porter
   34291 
   34292    * Thomas Quinot
   34293 
   34294    * Nicolas Roche
   34295 
   34296    * Pat Rogers
   34297 
   34298    * Jose Ruiz
   34299 
   34300    * Douglas Rupp
   34301 
   34302    * Sergey Rybin
   34303 
   34304    * Gail Schenker
   34305 
   34306    * Ed Schonberg
   34307 
   34308    * Nicolas Setton
   34309 
   34310    * Samuel Tardieu
   34311 
   34312 
   34313  The following people are recognized for their contributions of new
   34314 features, bug reports, testing and integration of classpath/libgcj for
   34315 GCC version 4.1:
   34316    * Lillian Angel for `JTree' implementation and lots Free Swing
   34317      additions and bug fixes.
   34318 
   34319    * Wolfgang Baer for `GapContent' bug fixes.
   34320 
   34321    * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
   34322      event fixes, lots of Free Swing work including `JTable' editing.
   34323 
   34324    * Stuart Ballard for RMI constant fixes.
   34325 
   34326    * Goffredo Baroncelli for `HTTPURLConnection' fixes.
   34327 
   34328    * Gary Benson for `MessageFormat' fixes.
   34329 
   34330    * Daniel Bonniot for `Serialization' fixes.
   34331 
   34332    * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
   34333      and `DOM xml:id' support.
   34334 
   34335    * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
   34336 
   34337    * Archie Cobbs for build fixes, VM interface updates,
   34338      `URLClassLoader' updates.
   34339 
   34340    * Kelley Cook for build fixes.
   34341 
   34342    * Martin Cordova for Suggestions for better `SocketTimeoutException'.
   34343 
   34344    * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite
   34345      and improvements.
   34346 
   34347    * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
   34348      2D support. Lots of imageio framework additions, lots of AWT and
   34349      Free Swing bug fixes.
   34350 
   34351    * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
   34352      fixes, better `Proxy' support, bug fixes and IKVM integration.
   34353 
   34354    * Santiago Gala for `AccessControlContext' fixes.
   34355 
   34356    * Nicolas Geoffray for `VMClassLoader' and `AccessController'
   34357      improvements.
   34358 
   34359    * David Gilbert for `basic' and `metal' icon and plaf support and
   34360      lots of documenting, Lots of Free Swing and metal theme additions.
   34361      `MetalIconFactory' implementation.
   34362 
   34363    * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
   34364 
   34365    * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
   34366      build speedups.
   34367 
   34368    * Kim Ho for `JFileChooser' implementation.
   34369 
   34370    * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
   34371      updates, `Serialization' fixes, `Properties' XML support and
   34372      generic branch work, VMIntegration guide update.
   34373 
   34374    * Bastiaan Huisman for `TimeZone' bug fixing.
   34375 
   34376    * Andreas Jaeger for mprec updates.
   34377 
   34378    * Paul Jenner for better `-Werror' support.
   34379 
   34380    * Ito Kazumitsu for `NetworkInterface' implementation and updates.
   34381 
   34382    * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
   34383      bug fixes all over. Lots of Free Swing work including styled text.
   34384 
   34385    * Simon Kitching for `String' cleanups and optimization suggestions.
   34386 
   34387    * Michael Koch for configuration fixes, `Locale' updates, bug and
   34388      build fixes.
   34389 
   34390    * Guilhem Lavaux for configuration, thread and channel fixes and
   34391      Kaffe integration. JCL native `Pointer' updates. Logger bug fixes.
   34392 
   34393    * David Lichteblau for JCL support library global/local reference
   34394      cleanups.
   34395 
   34396    * Aaron Luchko for JDWP updates and documentation fixes.
   34397 
   34398    * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
   34399      features.
   34400 
   34401    * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
   34402      fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
   34403      and implementing the Qt4 peers.
   34404 
   34405    * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
   34406      `SystemLogger' and `FileHandler' rotate implementations, NIO
   34407      `FileChannel.map' support, security and policy updates.
   34408 
   34409    * Bryce McKinlay for RMI work.
   34410 
   34411    * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
   34412      testing and documenting.
   34413 
   34414    * Kalle Olavi Niemitalo for build fixes.
   34415 
   34416    * Rainer Orth for build fixes.
   34417 
   34418    * Andrew Overholt for `File' locking fixes.
   34419 
   34420    * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
   34421 
   34422    * Olga Rodimina for `MenuSelectionManager' implementation.
   34423 
   34424    * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
   34425 
   34426    * Julian Scheid for documentation updates and gjdoc support.
   34427 
   34428    * Christian Schlichtherle for zip fixes and cleanups.
   34429 
   34430    * Robert Schuster for documentation updates and beans fixes,
   34431      `TreeNode' enumerations and `ActionCommand' and various fixes, XML
   34432      and URL, AWT and Free Swing bug fixes.
   34433 
   34434    * Keith Seitz for lots of JDWP work.
   34435 
   34436    * Christian Thalinger for 64-bit cleanups, Configuration and VM
   34437      interface fixes and `CACAO' integration, `fdlibm' updates.
   34438 
   34439    * Gael Thomas for `VMClassLoader' boot packages support suggestions.
   34440 
   34441    * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
   34442      support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
   34443 
   34444    * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
   34445      integration. `Qt4' build infrastructure, `SHA1PRNG' and
   34446      `GdkPixbugDecoder' updates.
   34447 
   34448    * Tom Tromey for Eclipse integration, generics work, lots of bug
   34449      fixes and gcj integration including coordinating The Big Merge.
   34450 
   34451    * Mark Wielaard for bug fixes, packaging and release management,
   34452      `Clipboard' implementation, system call interrupts and network
   34453      timeouts and `GdkPixpufDecoder' fixes.
   34454 
   34455 
   34456  In addition to the above, all of which also contributed time and
   34457 energy in testing GCC, we would like to thank the following for their
   34458 contributions to testing:
   34459 
   34460    * Michael Abd-El-Malek
   34461 
   34462    * Thomas Arend
   34463 
   34464    * Bonzo Armstrong
   34465 
   34466    * Steven Ashe
   34467 
   34468    * Chris Baldwin
   34469 
   34470    * David Billinghurst
   34471 
   34472    * Jim Blandy
   34473 
   34474    * Stephane Bortzmeyer
   34475 
   34476    * Horst von Brand
   34477 
   34478    * Frank Braun
   34479 
   34480    * Rodney Brown
   34481 
   34482    * Sidney Cadot
   34483 
   34484    * Bradford Castalia
   34485 
   34486    * Jonathan Corbet
   34487 
   34488    * Ralph Doncaster
   34489 
   34490    * Richard Emberson
   34491 
   34492    * Levente Farkas
   34493 
   34494    * Graham Fawcett
   34495 
   34496    * Mark Fernyhough
   34497 
   34498    * Robert A. French
   34499 
   34500    * Jo"rgen Freyh
   34501 
   34502    * Mark K. Gardner
   34503 
   34504    * Charles-Antoine Gauthier
   34505 
   34506    * Yung Shing Gene
   34507 
   34508    * David Gilbert
   34509 
   34510    * Simon Gornall
   34511 
   34512    * Fred Gray
   34513 
   34514    * John Griffin
   34515 
   34516    * Patrik Hagglund
   34517 
   34518    * Phil Hargett
   34519 
   34520    * Amancio Hasty
   34521 
   34522    * Takafumi Hayashi
   34523 
   34524    * Bryan W. Headley
   34525 
   34526    * Kevin B. Hendricks
   34527 
   34528    * Joep Jansen
   34529 
   34530    * Christian Joensson
   34531 
   34532    * Michel Kern
   34533 
   34534    * David Kidd
   34535 
   34536    * Tobias Kuipers
   34537 
   34538    * Anand Krishnaswamy
   34539 
   34540    * A. O. V. Le Blanc
   34541 
   34542    * llewelly
   34543 
   34544    * Damon Love
   34545 
   34546    * Brad Lucier
   34547 
   34548    * Matthias Klose
   34549 
   34550    * Martin Knoblauch
   34551 
   34552    * Rick Lutowski
   34553 
   34554    * Jesse Macnish
   34555 
   34556    * Stefan Morrell
   34557 
   34558    * Anon A. Mous
   34559 
   34560    * Matthias Mueller
   34561 
   34562    * Pekka Nikander
   34563 
   34564    * Rick Niles
   34565 
   34566    * Jon Olson
   34567 
   34568    * Magnus Persson
   34569 
   34570    * Chris Pollard
   34571 
   34572    * Richard Polton
   34573 
   34574    * Derk Reefman
   34575 
   34576    * David Rees
   34577 
   34578    * Paul Reilly
   34579 
   34580    * Tom Reilly
   34581 
   34582    * Torsten Rueger
   34583 
   34584    * Danny Sadinoff
   34585 
   34586    * Marc Schifer
   34587 
   34588    * Erik Schnetter
   34589 
   34590    * Wayne K. Schroll
   34591 
   34592    * David Schuler
   34593 
   34594    * Vin Shelton
   34595 
   34596    * Tim Souder
   34597 
   34598    * Adam Sulmicki
   34599 
   34600    * Bill Thorson
   34601 
   34602    * George Talbot
   34603 
   34604    * Pedro A. M. Vazquez
   34605 
   34606    * Gregory Warnes
   34607 
   34608    * Ian Watson
   34609 
   34610    * David E. Young
   34611 
   34612    * And many others
   34613 
   34614  And finally we'd like to thank everyone who uses the compiler, submits
   34615 bug reports and generally reminds us why we're doing this work in the
   34616 first place.
   34617 
   34618 
   34619 File: gccint.info,  Node: Option Index,  Next: Concept Index,  Prev: Contributors,  Up: Top
   34620 
   34621 Option Index
   34622 ************
   34623 
   34624 GCC's command line options are indexed here without any initial `-' or
   34625 `--'.  Where an option has both positive and negative forms (such as
   34626 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
   34627 indexed under the most appropriate form; it may sometimes be useful to
   34628 look up both forms.
   34629 
   34630 [index]
   34631 * Menu:
   34632 
   34633 * msoft-float:                           Soft float library routines.
   34634                                                                 (line 6)
   34635 
   34636 
   34637 File: gccint.info,  Node: Concept Index,  Prev: Option Index,  Up: Top
   34638 
   34639 Concept Index
   34640 *************
   34641 
   34642 [index]
   34643 * Menu:
   34644 
   34645 * ! in constraint:                       Multi-Alternative.  (line   47)
   34646 * # in constraint:                       Modifiers.          (line   67)
   34647 * # in template:                         Output Template.    (line   66)
   34648 * #pragma:                               Misc.               (line  381)
   34649 * % in constraint:                       Modifiers.          (line   45)
   34650 * % in GTY option:                       GTY Options.        (line   18)
   34651 * % in template:                         Output Template.    (line    6)
   34652 * & in constraint:                       Modifiers.          (line   25)
   34653 * (:                                     Sections.           (line  160)
   34654 * (nil):                                 RTL Objects.        (line   73)
   34655 * *:                                     Host Common.        (line   17)
   34656 * * in constraint:                       Modifiers.          (line   72)
   34657 * * in template:                         Output Statement.   (line   29)
   34658 * *TARGET_GET_PCH_VALIDITY:              PCH Target.         (line    7)
   34659 * + in constraint:                       Modifiers.          (line   12)
   34660 * -fsection-anchors <1>:                 Anchored Addresses. (line    6)
   34661 * -fsection-anchors:                     Special Accessors.  (line  106)
   34662 * /c in RTL dump:                        Flags.              (line  219)
   34663 * /f in RTL dump:                        Flags.              (line  224)
   34664 * /i in RTL dump:                        Flags.              (line  276)
   34665 * /j in RTL dump:                        Flags.              (line  289)
   34666 * /s in RTL dump:                        Flags.              (line  240)
   34667 * /u in RTL dump:                        Flags.              (line  299)
   34668 * /v in RTL dump:                        Flags.              (line  331)
   34669 * 0 in constraint:                       Simple Constraints. (line  118)
   34670 * < in constraint:                       Simple Constraints. (line   46)
   34671 * = in constraint:                       Modifiers.          (line    8)
   34672 * > in constraint:                       Simple Constraints. (line   50)
   34673 * ? in constraint:                       Multi-Alternative.  (line   41)
   34674 * \:                                     Output Template.    (line   46)
   34675 * __absvdi2:                             Integer library routines.
   34676                                                              (line  107)
   34677 * __absvsi2:                             Integer library routines.
   34678                                                              (line  106)
   34679 * __addda3:                              Fixed-point fractional library routines.
   34680                                                              (line   45)
   34681 * __adddf3:                              Soft float library routines.
   34682                                                              (line   23)
   34683 * __adddq3:                              Fixed-point fractional library routines.
   34684                                                              (line   33)
   34685 * __addha3:                              Fixed-point fractional library routines.
   34686                                                              (line   43)
   34687 * __addhq3:                              Fixed-point fractional library routines.
   34688                                                              (line   30)
   34689 * __addqq3:                              Fixed-point fractional library routines.
   34690                                                              (line   29)
   34691 * __addsa3:                              Fixed-point fractional library routines.
   34692                                                              (line   44)
   34693 * __addsf3:                              Soft float library routines.
   34694                                                              (line   22)
   34695 * __addsq3:                              Fixed-point fractional library routines.
   34696                                                              (line   31)
   34697 * __addta3:                              Fixed-point fractional library routines.
   34698                                                              (line   47)
   34699 * __addtf3:                              Soft float library routines.
   34700                                                              (line   25)
   34701 * __adduda3:                             Fixed-point fractional library routines.
   34702                                                              (line   53)
   34703 * __addudq3:                             Fixed-point fractional library routines.
   34704                                                              (line   41)
   34705 * __adduha3:                             Fixed-point fractional library routines.
   34706                                                              (line   49)
   34707 * __adduhq3:                             Fixed-point fractional library routines.
   34708                                                              (line   37)
   34709 * __adduqq3:                             Fixed-point fractional library routines.
   34710                                                              (line   35)
   34711 * __addusa3:                             Fixed-point fractional library routines.
   34712                                                              (line   51)
   34713 * __addusq3:                             Fixed-point fractional library routines.
   34714                                                              (line   39)
   34715 * __adduta3:                             Fixed-point fractional library routines.
   34716                                                              (line   55)
   34717 * __addvdi3:                             Integer library routines.
   34718                                                              (line  111)
   34719 * __addvsi3:                             Integer library routines.
   34720                                                              (line  110)
   34721 * __addxf3:                              Soft float library routines.
   34722                                                              (line   27)
   34723 * __ashlda3:                             Fixed-point fractional library routines.
   34724                                                              (line  351)
   34725 * __ashldi3:                             Integer library routines.
   34726                                                              (line   14)
   34727 * __ashldq3:                             Fixed-point fractional library routines.
   34728                                                              (line  340)
   34729 * __ashlha3:                             Fixed-point fractional library routines.
   34730                                                              (line  349)
   34731 * __ashlhq3:                             Fixed-point fractional library routines.
   34732                                                              (line  337)
   34733 * __ashlqq3:                             Fixed-point fractional library routines.
   34734                                                              (line  336)
   34735 * __ashlsa3:                             Fixed-point fractional library routines.
   34736                                                              (line  350)
   34737 * __ashlsi3:                             Integer library routines.
   34738                                                              (line   13)
   34739 * __ashlsq3:                             Fixed-point fractional library routines.
   34740                                                              (line  338)
   34741 * __ashlta3:                             Fixed-point fractional library routines.
   34742                                                              (line  353)
   34743 * __ashlti3:                             Integer library routines.
   34744                                                              (line   15)
   34745 * __ashluda3:                            Fixed-point fractional library routines.
   34746                                                              (line  359)
   34747 * __ashludq3:                            Fixed-point fractional library routines.
   34748                                                              (line  348)
   34749 * __ashluha3:                            Fixed-point fractional library routines.
   34750                                                              (line  355)
   34751 * __ashluhq3:                            Fixed-point fractional library routines.
   34752                                                              (line  344)
   34753 * __ashluqq3:                            Fixed-point fractional library routines.
   34754                                                              (line  342)
   34755 * __ashlusa3:                            Fixed-point fractional library routines.
   34756                                                              (line  357)
   34757 * __ashlusq3:                            Fixed-point fractional library routines.
   34758                                                              (line  346)
   34759 * __ashluta3:                            Fixed-point fractional library routines.
   34760                                                              (line  361)
   34761 * __ashrda3:                             Fixed-point fractional library routines.
   34762                                                              (line  371)
   34763 * __ashrdi3:                             Integer library routines.
   34764                                                              (line   19)
   34765 * __ashrdq3:                             Fixed-point fractional library routines.
   34766                                                              (line  368)
   34767 * __ashrha3:                             Fixed-point fractional library routines.
   34768                                                              (line  369)
   34769 * __ashrhq3:                             Fixed-point fractional library routines.
   34770                                                              (line  365)
   34771 * __ashrqq3:                             Fixed-point fractional library routines.
   34772                                                              (line  364)
   34773 * __ashrsa3:                             Fixed-point fractional library routines.
   34774                                                              (line  370)
   34775 * __ashrsi3:                             Integer library routines.
   34776                                                              (line   18)
   34777 * __ashrsq3:                             Fixed-point fractional library routines.
   34778                                                              (line  366)
   34779 * __ashrta3:                             Fixed-point fractional library routines.
   34780                                                              (line  373)
   34781 * __ashrti3:                             Integer library routines.
   34782                                                              (line   20)
   34783 * __bid_adddd3:                          Decimal float library routines.
   34784                                                              (line   25)
   34785 * __bid_addsd3:                          Decimal float library routines.
   34786                                                              (line   21)
   34787 * __bid_addtd3:                          Decimal float library routines.
   34788                                                              (line   29)
   34789 * __bid_divdd3:                          Decimal float library routines.
   34790                                                              (line   68)
   34791 * __bid_divsd3:                          Decimal float library routines.
   34792                                                              (line   64)
   34793 * __bid_divtd3:                          Decimal float library routines.
   34794                                                              (line   72)
   34795 * __bid_eqdd2:                           Decimal float library routines.
   34796                                                              (line  259)
   34797 * __bid_eqsd2:                           Decimal float library routines.
   34798                                                              (line  257)
   34799 * __bid_eqtd2:                           Decimal float library routines.
   34800                                                              (line  261)
   34801 * __bid_extendddtd2:                     Decimal float library routines.
   34802                                                              (line   92)
   34803 * __bid_extendddtf:                      Decimal float library routines.
   34804                                                              (line  140)
   34805 * __bid_extendddxf:                      Decimal float library routines.
   34806                                                              (line  134)
   34807 * __bid_extenddfdd:                      Decimal float library routines.
   34808                                                              (line  147)
   34809 * __bid_extenddftd:                      Decimal float library routines.
   34810                                                              (line  107)
   34811 * __bid_extendsddd2:                     Decimal float library routines.
   34812                                                              (line   88)
   34813 * __bid_extendsddf:                      Decimal float library routines.
   34814                                                              (line  128)
   34815 * __bid_extendsdtd2:                     Decimal float library routines.
   34816                                                              (line   90)
   34817 * __bid_extendsdtf:                      Decimal float library routines.
   34818                                                              (line  138)
   34819 * __bid_extendsdxf:                      Decimal float library routines.
   34820                                                              (line  132)
   34821 * __bid_extendsfdd:                      Decimal float library routines.
   34822                                                              (line  103)
   34823 * __bid_extendsfsd:                      Decimal float library routines.
   34824                                                              (line  145)
   34825 * __bid_extendsftd:                      Decimal float library routines.
   34826                                                              (line  105)
   34827 * __bid_extendtftd:                      Decimal float library routines.
   34828                                                              (line  149)
   34829 * __bid_extendxftd:                      Decimal float library routines.
   34830                                                              (line  109)
   34831 * __bid_fixdddi:                         Decimal float library routines.
   34832                                                              (line  170)
   34833 * __bid_fixddsi:                         Decimal float library routines.
   34834                                                              (line  162)
   34835 * __bid_fixsddi:                         Decimal float library routines.
   34836                                                              (line  168)
   34837 * __bid_fixsdsi:                         Decimal float library routines.
   34838                                                              (line  160)
   34839 * __bid_fixtddi:                         Decimal float library routines.
   34840                                                              (line  172)
   34841 * __bid_fixtdsi:                         Decimal float library routines.
   34842                                                              (line  164)
   34843 * __bid_fixunsdddi:                      Decimal float library routines.
   34844                                                              (line  187)
   34845 * __bid_fixunsddsi:                      Decimal float library routines.
   34846                                                              (line  178)
   34847 * __bid_fixunssddi:                      Decimal float library routines.
   34848                                                              (line  185)
   34849 * __bid_fixunssdsi:                      Decimal float library routines.
   34850                                                              (line  176)
   34851 * __bid_fixunstddi:                      Decimal float library routines.
   34852                                                              (line  189)
   34853 * __bid_fixunstdsi:                      Decimal float library routines.
   34854                                                              (line  180)
   34855 * __bid_floatdidd:                       Decimal float library routines.
   34856                                                              (line  205)
   34857 * __bid_floatdisd:                       Decimal float library routines.
   34858                                                              (line  203)
   34859 * __bid_floatditd:                       Decimal float library routines.
   34860                                                              (line  207)
   34861 * __bid_floatsidd:                       Decimal float library routines.
   34862                                                              (line  196)
   34863 * __bid_floatsisd:                       Decimal float library routines.
   34864                                                              (line  194)
   34865 * __bid_floatsitd:                       Decimal float library routines.
   34866                                                              (line  198)
   34867 * __bid_floatunsdidd:                    Decimal float library routines.
   34868                                                              (line  223)
   34869 * __bid_floatunsdisd:                    Decimal float library routines.
   34870                                                              (line  221)
   34871 * __bid_floatunsditd:                    Decimal float library routines.
   34872                                                              (line  225)
   34873 * __bid_floatunssidd:                    Decimal float library routines.
   34874                                                              (line  214)
   34875 * __bid_floatunssisd:                    Decimal float library routines.
   34876                                                              (line  212)
   34877 * __bid_floatunssitd:                    Decimal float library routines.
   34878                                                              (line  216)
   34879 * __bid_gedd2:                           Decimal float library routines.
   34880                                                              (line  277)
   34881 * __bid_gesd2:                           Decimal float library routines.
   34882                                                              (line  275)
   34883 * __bid_getd2:                           Decimal float library routines.
   34884                                                              (line  279)
   34885 * __bid_gtdd2:                           Decimal float library routines.
   34886                                                              (line  304)
   34887 * __bid_gtsd2:                           Decimal float library routines.
   34888                                                              (line  302)
   34889 * __bid_gttd2:                           Decimal float library routines.
   34890                                                              (line  306)
   34891 * __bid_ledd2:                           Decimal float library routines.
   34892                                                              (line  295)
   34893 * __bid_lesd2:                           Decimal float library routines.
   34894                                                              (line  293)
   34895 * __bid_letd2:                           Decimal float library routines.
   34896                                                              (line  297)
   34897 * __bid_ltdd2:                           Decimal float library routines.
   34898                                                              (line  286)
   34899 * __bid_ltsd2:                           Decimal float library routines.
   34900                                                              (line  284)
   34901 * __bid_lttd2:                           Decimal float library routines.
   34902                                                              (line  288)
   34903 * __bid_muldd3:                          Decimal float library routines.
   34904                                                              (line   54)
   34905 * __bid_mulsd3:                          Decimal float library routines.
   34906                                                              (line   50)
   34907 * __bid_multd3:                          Decimal float library routines.
   34908                                                              (line   58)
   34909 * __bid_nedd2:                           Decimal float library routines.
   34910                                                              (line  268)
   34911 * __bid_negdd2:                          Decimal float library routines.
   34912                                                              (line   78)
   34913 * __bid_negsd2:                          Decimal float library routines.
   34914                                                              (line   76)
   34915 * __bid_negtd2:                          Decimal float library routines.
   34916                                                              (line   80)
   34917 * __bid_nesd2:                           Decimal float library routines.
   34918                                                              (line  266)
   34919 * __bid_netd2:                           Decimal float library routines.
   34920                                                              (line  270)
   34921 * __bid_subdd3:                          Decimal float library routines.
   34922                                                              (line   39)
   34923 * __bid_subsd3:                          Decimal float library routines.
   34924                                                              (line   35)
   34925 * __bid_subtd3:                          Decimal float library routines.
   34926                                                              (line   43)
   34927 * __bid_truncdddf:                       Decimal float library routines.
   34928                                                              (line  153)
   34929 * __bid_truncddsd2:                      Decimal float library routines.
   34930                                                              (line   94)
   34931 * __bid_truncddsf:                       Decimal float library routines.
   34932                                                              (line  124)
   34933 * __bid_truncdfsd:                       Decimal float library routines.
   34934                                                              (line  111)
   34935 * __bid_truncsdsf:                       Decimal float library routines.
   34936                                                              (line  151)
   34937 * __bid_trunctddd2:                      Decimal float library routines.
   34938                                                              (line   98)
   34939 * __bid_trunctddf:                       Decimal float library routines.
   34940                                                              (line  130)
   34941 * __bid_trunctdsd2:                      Decimal float library routines.
   34942                                                              (line   96)
   34943 * __bid_trunctdsf:                       Decimal float library routines.
   34944                                                              (line  126)
   34945 * __bid_trunctdtf:                       Decimal float library routines.
   34946                                                              (line  155)
   34947 * __bid_trunctdxf:                       Decimal float library routines.
   34948                                                              (line  136)
   34949 * __bid_trunctfdd:                       Decimal float library routines.
   34950                                                              (line  119)
   34951 * __bid_trunctfsd:                       Decimal float library routines.
   34952                                                              (line  115)
   34953 * __bid_truncxfdd:                       Decimal float library routines.
   34954                                                              (line  117)
   34955 * __bid_truncxfsd:                       Decimal float library routines.
   34956                                                              (line  113)
   34957 * __bid_unorddd2:                        Decimal float library routines.
   34958                                                              (line  235)
   34959 * __bid_unordsd2:                        Decimal float library routines.
   34960                                                              (line  233)
   34961 * __bid_unordtd2:                        Decimal float library routines.
   34962                                                              (line  237)
   34963 * __bswapdi2:                            Integer library routines.
   34964                                                              (line  162)
   34965 * __bswapsi2:                            Integer library routines.
   34966                                                              (line  161)
   34967 * __builtin_args_info:                   Varargs.            (line   42)
   34968 * __builtin_classify_type:               Varargs.            (line   76)
   34969 * __builtin_next_arg:                    Varargs.            (line   66)
   34970 * __builtin_saveregs:                    Varargs.            (line   24)
   34971 * __clear_cache:                         Miscellaneous routines.
   34972                                                              (line   10)
   34973 * __clzdi2:                              Integer library routines.
   34974                                                              (line  131)
   34975 * __clzsi2:                              Integer library routines.
   34976                                                              (line  130)
   34977 * __clzti2:                              Integer library routines.
   34978                                                              (line  132)
   34979 * __cmpda2:                              Fixed-point fractional library routines.
   34980                                                              (line  451)
   34981 * __cmpdf2:                              Soft float library routines.
   34982                                                              (line  164)
   34983 * __cmpdi2:                              Integer library routines.
   34984                                                              (line   87)
   34985 * __cmpdq2:                              Fixed-point fractional library routines.
   34986                                                              (line  441)
   34987 * __cmpha2:                              Fixed-point fractional library routines.
   34988                                                              (line  449)
   34989 * __cmphq2:                              Fixed-point fractional library routines.
   34990                                                              (line  438)
   34991 * __cmpqq2:                              Fixed-point fractional library routines.
   34992                                                              (line  437)
   34993 * __cmpsa2:                              Fixed-point fractional library routines.
   34994                                                              (line  450)
   34995 * __cmpsf2:                              Soft float library routines.
   34996                                                              (line  163)
   34997 * __cmpsq2:                              Fixed-point fractional library routines.
   34998                                                              (line  439)
   34999 * __cmpta2:                              Fixed-point fractional library routines.
   35000                                                              (line  453)
   35001 * __cmptf2:                              Soft float library routines.
   35002                                                              (line  165)
   35003 * __cmpti2:                              Integer library routines.
   35004                                                              (line   88)
   35005 * __cmpuda2:                             Fixed-point fractional library routines.
   35006                                                              (line  458)
   35007 * __cmpudq2:                             Fixed-point fractional library routines.
   35008                                                              (line  448)
   35009 * __cmpuha2:                             Fixed-point fractional library routines.
   35010                                                              (line  455)
   35011 * __cmpuhq2:                             Fixed-point fractional library routines.
   35012                                                              (line  444)
   35013 * __cmpuqq2:                             Fixed-point fractional library routines.
   35014                                                              (line  443)
   35015 * __cmpusa2:                             Fixed-point fractional library routines.
   35016                                                              (line  456)
   35017 * __cmpusq2:                             Fixed-point fractional library routines.
   35018                                                              (line  446)
   35019 * __cmputa2:                             Fixed-point fractional library routines.
   35020                                                              (line  460)
   35021 * __CTOR_LIST__:                         Initialization.     (line   25)
   35022 * __ctzdi2:                              Integer library routines.
   35023                                                              (line  138)
   35024 * __ctzsi2:                              Integer library routines.
   35025                                                              (line  137)
   35026 * __ctzti2:                              Integer library routines.
   35027                                                              (line  139)
   35028 * __divda3:                              Fixed-point fractional library routines.
   35029                                                              (line  227)
   35030 * __divdc3:                              Soft float library routines.
   35031                                                              (line  252)
   35032 * __divdf3:                              Soft float library routines.
   35033                                                              (line   48)
   35034 * __divdi3:                              Integer library routines.
   35035                                                              (line   25)
   35036 * __divdq3:                              Fixed-point fractional library routines.
   35037                                                              (line  223)
   35038 * __divha3:                              Fixed-point fractional library routines.
   35039                                                              (line  225)
   35040 * __divhq3:                              Fixed-point fractional library routines.
   35041                                                              (line  220)
   35042 * __divqq3:                              Fixed-point fractional library routines.
   35043                                                              (line  219)
   35044 * __divsa3:                              Fixed-point fractional library routines.
   35045                                                              (line  226)
   35046 * __divsc3:                              Soft float library routines.
   35047                                                              (line  250)
   35048 * __divsf3:                              Soft float library routines.
   35049                                                              (line   47)
   35050 * __divsi3:                              Integer library routines.
   35051                                                              (line   24)
   35052 * __divsq3:                              Fixed-point fractional library routines.
   35053                                                              (line  221)
   35054 * __divta3:                              Fixed-point fractional library routines.
   35055                                                              (line  229)
   35056 * __divtc3:                              Soft float library routines.
   35057                                                              (line  254)
   35058 * __divtf3:                              Soft float library routines.
   35059                                                              (line   50)
   35060 * __divti3:                              Integer library routines.
   35061                                                              (line   26)
   35062 * __divxc3:                              Soft float library routines.
   35063                                                              (line  256)
   35064 * __divxf3:                              Soft float library routines.
   35065                                                              (line   52)
   35066 * __dpd_adddd3:                          Decimal float library routines.
   35067                                                              (line   23)
   35068 * __dpd_addsd3:                          Decimal float library routines.
   35069                                                              (line   19)
   35070 * __dpd_addtd3:                          Decimal float library routines.
   35071                                                              (line   27)
   35072 * __dpd_divdd3:                          Decimal float library routines.
   35073                                                              (line   66)
   35074 * __dpd_divsd3:                          Decimal float library routines.
   35075                                                              (line   62)
   35076 * __dpd_divtd3:                          Decimal float library routines.
   35077                                                              (line   70)
   35078 * __dpd_eqdd2:                           Decimal float library routines.
   35079                                                              (line  258)
   35080 * __dpd_eqsd2:                           Decimal float library routines.
   35081                                                              (line  256)
   35082 * __dpd_eqtd2:                           Decimal float library routines.
   35083                                                              (line  260)
   35084 * __dpd_extendddtd2:                     Decimal float library routines.
   35085                                                              (line   91)
   35086 * __dpd_extendddtf:                      Decimal float library routines.
   35087                                                              (line  139)
   35088 * __dpd_extendddxf:                      Decimal float library routines.
   35089                                                              (line  133)
   35090 * __dpd_extenddfdd:                      Decimal float library routines.
   35091                                                              (line  146)
   35092 * __dpd_extenddftd:                      Decimal float library routines.
   35093                                                              (line  106)
   35094 * __dpd_extendsddd2:                     Decimal float library routines.
   35095                                                              (line   87)
   35096 * __dpd_extendsddf:                      Decimal float library routines.
   35097                                                              (line  127)
   35098 * __dpd_extendsdtd2:                     Decimal float library routines.
   35099                                                              (line   89)
   35100 * __dpd_extendsdtf:                      Decimal float library routines.
   35101                                                              (line  137)
   35102 * __dpd_extendsdxf:                      Decimal float library routines.
   35103                                                              (line  131)
   35104 * __dpd_extendsfdd:                      Decimal float library routines.
   35105                                                              (line  102)
   35106 * __dpd_extendsfsd:                      Decimal float library routines.
   35107                                                              (line  144)
   35108 * __dpd_extendsftd:                      Decimal float library routines.
   35109                                                              (line  104)
   35110 * __dpd_extendtftd:                      Decimal float library routines.
   35111                                                              (line  148)
   35112 * __dpd_extendxftd:                      Decimal float library routines.
   35113                                                              (line  108)
   35114 * __dpd_fixdddi:                         Decimal float library routines.
   35115                                                              (line  169)
   35116 * __dpd_fixddsi:                         Decimal float library routines.
   35117                                                              (line  161)
   35118 * __dpd_fixsddi:                         Decimal float library routines.
   35119                                                              (line  167)
   35120 * __dpd_fixsdsi:                         Decimal float library routines.
   35121                                                              (line  159)
   35122 * __dpd_fixtddi:                         Decimal float library routines.
   35123                                                              (line  171)
   35124 * __dpd_fixtdsi:                         Decimal float library routines.
   35125                                                              (line  163)
   35126 * __dpd_fixunsdddi:                      Decimal float library routines.
   35127                                                              (line  186)
   35128 * __dpd_fixunsddsi:                      Decimal float library routines.
   35129                                                              (line  177)
   35130 * __dpd_fixunssddi:                      Decimal float library routines.
   35131                                                              (line  184)
   35132 * __dpd_fixunssdsi:                      Decimal float library routines.
   35133                                                              (line  175)
   35134 * __dpd_fixunstddi:                      Decimal float library routines.
   35135                                                              (line  188)
   35136 * __dpd_fixunstdsi:                      Decimal float library routines.
   35137                                                              (line  179)
   35138 * __dpd_floatdidd:                       Decimal float library routines.
   35139                                                              (line  204)
   35140 * __dpd_floatdisd:                       Decimal float library routines.
   35141                                                              (line  202)
   35142 * __dpd_floatditd:                       Decimal float library routines.
   35143                                                              (line  206)
   35144 * __dpd_floatsidd:                       Decimal float library routines.
   35145                                                              (line  195)
   35146 * __dpd_floatsisd:                       Decimal float library routines.
   35147                                                              (line  193)
   35148 * __dpd_floatsitd:                       Decimal float library routines.
   35149                                                              (line  197)
   35150 * __dpd_floatunsdidd:                    Decimal float library routines.
   35151                                                              (line  222)
   35152 * __dpd_floatunsdisd:                    Decimal float library routines.
   35153                                                              (line  220)
   35154 * __dpd_floatunsditd:                    Decimal float library routines.
   35155                                                              (line  224)
   35156 * __dpd_floatunssidd:                    Decimal float library routines.
   35157                                                              (line  213)
   35158 * __dpd_floatunssisd:                    Decimal float library routines.
   35159                                                              (line  211)
   35160 * __dpd_floatunssitd:                    Decimal float library routines.
   35161                                                              (line  215)
   35162 * __dpd_gedd2:                           Decimal float library routines.
   35163                                                              (line  276)
   35164 * __dpd_gesd2:                           Decimal float library routines.
   35165                                                              (line  274)
   35166 * __dpd_getd2:                           Decimal float library routines.
   35167                                                              (line  278)
   35168 * __dpd_gtdd2:                           Decimal float library routines.
   35169                                                              (line  303)
   35170 * __dpd_gtsd2:                           Decimal float library routines.
   35171                                                              (line  301)
   35172 * __dpd_gttd2:                           Decimal float library routines.
   35173                                                              (line  305)
   35174 * __dpd_ledd2:                           Decimal float library routines.
   35175                                                              (line  294)
   35176 * __dpd_lesd2:                           Decimal float library routines.
   35177                                                              (line  292)
   35178 * __dpd_letd2:                           Decimal float library routines.
   35179                                                              (line  296)
   35180 * __dpd_ltdd2:                           Decimal float library routines.
   35181                                                              (line  285)
   35182 * __dpd_ltsd2:                           Decimal float library routines.
   35183                                                              (line  283)
   35184 * __dpd_lttd2:                           Decimal float library routines.
   35185                                                              (line  287)
   35186 * __dpd_muldd3:                          Decimal float library routines.
   35187                                                              (line   52)
   35188 * __dpd_mulsd3:                          Decimal float library routines.
   35189                                                              (line   48)
   35190 * __dpd_multd3:                          Decimal float library routines.
   35191                                                              (line   56)
   35192 * __dpd_nedd2:                           Decimal float library routines.
   35193                                                              (line  267)
   35194 * __dpd_negdd2:                          Decimal float library routines.
   35195                                                              (line   77)
   35196 * __dpd_negsd2:                          Decimal float library routines.
   35197                                                              (line   75)
   35198 * __dpd_negtd2:                          Decimal float library routines.
   35199                                                              (line   79)
   35200 * __dpd_nesd2:                           Decimal float library routines.
   35201                                                              (line  265)
   35202 * __dpd_netd2:                           Decimal float library routines.
   35203                                                              (line  269)
   35204 * __dpd_subdd3:                          Decimal float library routines.
   35205                                                              (line   37)
   35206 * __dpd_subsd3:                          Decimal float library routines.
   35207                                                              (line   33)
   35208 * __dpd_subtd3:                          Decimal float library routines.
   35209                                                              (line   41)
   35210 * __dpd_truncdddf:                       Decimal float library routines.
   35211                                                              (line  152)
   35212 * __dpd_truncddsd2:                      Decimal float library routines.
   35213                                                              (line   93)
   35214 * __dpd_truncddsf:                       Decimal float library routines.
   35215                                                              (line  123)
   35216 * __dpd_truncdfsd:                       Decimal float library routines.
   35217                                                              (line  110)
   35218 * __dpd_truncsdsf:                       Decimal float library routines.
   35219                                                              (line  150)
   35220 * __dpd_trunctddd2:                      Decimal float library routines.
   35221                                                              (line   97)
   35222 * __dpd_trunctddf:                       Decimal float library routines.
   35223                                                              (line  129)
   35224 * __dpd_trunctdsd2:                      Decimal float library routines.
   35225                                                              (line   95)
   35226 * __dpd_trunctdsf:                       Decimal float library routines.
   35227                                                              (line  125)
   35228 * __dpd_trunctdtf:                       Decimal float library routines.
   35229                                                              (line  154)
   35230 * __dpd_trunctdxf:                       Decimal float library routines.
   35231                                                              (line  135)
   35232 * __dpd_trunctfdd:                       Decimal float library routines.
   35233                                                              (line  118)
   35234 * __dpd_trunctfsd:                       Decimal float library routines.
   35235                                                              (line  114)
   35236 * __dpd_truncxfdd:                       Decimal float library routines.
   35237                                                              (line  116)
   35238 * __dpd_truncxfsd:                       Decimal float library routines.
   35239                                                              (line  112)
   35240 * __dpd_unorddd2:                        Decimal float library routines.
   35241                                                              (line  234)
   35242 * __dpd_unordsd2:                        Decimal float library routines.
   35243                                                              (line  232)
   35244 * __dpd_unordtd2:                        Decimal float library routines.
   35245                                                              (line  236)
   35246 * __DTOR_LIST__:                         Initialization.     (line   25)
   35247 * __eqdf2:                               Soft float library routines.
   35248                                                              (line  194)
   35249 * __eqsf2:                               Soft float library routines.
   35250                                                              (line  193)
   35251 * __eqtf2:                               Soft float library routines.
   35252                                                              (line  195)
   35253 * __extenddftf2:                         Soft float library routines.
   35254                                                              (line   68)
   35255 * __extenddfxf2:                         Soft float library routines.
   35256                                                              (line   69)
   35257 * __extendsfdf2:                         Soft float library routines.
   35258                                                              (line   65)
   35259 * __extendsftf2:                         Soft float library routines.
   35260                                                              (line   66)
   35261 * __extendsfxf2:                         Soft float library routines.
   35262                                                              (line   67)
   35263 * __ffsdi2:                              Integer library routines.
   35264                                                              (line  144)
   35265 * __ffsti2:                              Integer library routines.
   35266                                                              (line  145)
   35267 * __fixdfdi:                             Soft float library routines.
   35268                                                              (line   88)
   35269 * __fixdfsi:                             Soft float library routines.
   35270                                                              (line   81)
   35271 * __fixdfti:                             Soft float library routines.
   35272                                                              (line   94)
   35273 * __fixsfdi:                             Soft float library routines.
   35274                                                              (line   87)
   35275 * __fixsfsi:                             Soft float library routines.
   35276                                                              (line   80)
   35277 * __fixsfti:                             Soft float library routines.
   35278                                                              (line   93)
   35279 * __fixtfdi:                             Soft float library routines.
   35280                                                              (line   89)
   35281 * __fixtfsi:                             Soft float library routines.
   35282                                                              (line   82)
   35283 * __fixtfti:                             Soft float library routines.
   35284                                                              (line   95)
   35285 * __fixunsdfdi:                          Soft float library routines.
   35286                                                              (line  108)
   35287 * __fixunsdfsi:                          Soft float library routines.
   35288                                                              (line  101)
   35289 * __fixunsdfti:                          Soft float library routines.
   35290                                                              (line  115)
   35291 * __fixunssfdi:                          Soft float library routines.
   35292                                                              (line  107)
   35293 * __fixunssfsi:                          Soft float library routines.
   35294                                                              (line  100)
   35295 * __fixunssfti:                          Soft float library routines.
   35296                                                              (line  114)
   35297 * __fixunstfdi:                          Soft float library routines.
   35298                                                              (line  109)
   35299 * __fixunstfsi:                          Soft float library routines.
   35300                                                              (line  102)
   35301 * __fixunstfti:                          Soft float library routines.
   35302                                                              (line  116)
   35303 * __fixunsxfdi:                          Soft float library routines.
   35304                                                              (line  110)
   35305 * __fixunsxfsi:                          Soft float library routines.
   35306                                                              (line  103)
   35307 * __fixunsxfti:                          Soft float library routines.
   35308                                                              (line  117)
   35309 * __fixxfdi:                             Soft float library routines.
   35310                                                              (line   90)
   35311 * __fixxfsi:                             Soft float library routines.
   35312                                                              (line   83)
   35313 * __fixxfti:                             Soft float library routines.
   35314                                                              (line   96)
   35315 * __floatdidf:                           Soft float library routines.
   35316                                                              (line  128)
   35317 * __floatdisf:                           Soft float library routines.
   35318                                                              (line  127)
   35319 * __floatditf:                           Soft float library routines.
   35320                                                              (line  129)
   35321 * __floatdixf:                           Soft float library routines.
   35322                                                              (line  130)
   35323 * __floatsidf:                           Soft float library routines.
   35324                                                              (line  122)
   35325 * __floatsisf:                           Soft float library routines.
   35326                                                              (line  121)
   35327 * __floatsitf:                           Soft float library routines.
   35328                                                              (line  123)
   35329 * __floatsixf:                           Soft float library routines.
   35330                                                              (line  124)
   35331 * __floattidf:                           Soft float library routines.
   35332                                                              (line  134)
   35333 * __floattisf:                           Soft float library routines.
   35334                                                              (line  133)
   35335 * __floattitf:                           Soft float library routines.
   35336                                                              (line  135)
   35337 * __floattixf:                           Soft float library routines.
   35338                                                              (line  136)
   35339 * __floatundidf:                         Soft float library routines.
   35340                                                              (line  146)
   35341 * __floatundisf:                         Soft float library routines.
   35342                                                              (line  145)
   35343 * __floatunditf:                         Soft float library routines.
   35344                                                              (line  147)
   35345 * __floatundixf:                         Soft float library routines.
   35346                                                              (line  148)
   35347 * __floatunsidf:                         Soft float library routines.
   35348                                                              (line  140)
   35349 * __floatunsisf:                         Soft float library routines.
   35350                                                              (line  139)
   35351 * __floatunsitf:                         Soft float library routines.
   35352                                                              (line  141)
   35353 * __floatunsixf:                         Soft float library routines.
   35354                                                              (line  142)
   35355 * __floatuntidf:                         Soft float library routines.
   35356                                                              (line  152)
   35357 * __floatuntisf:                         Soft float library routines.
   35358                                                              (line  151)
   35359 * __floatuntitf:                         Soft float library routines.
   35360                                                              (line  153)
   35361 * __floatuntixf:                         Soft float library routines.
   35362                                                              (line  154)
   35363 * __fractdadf:                           Fixed-point fractional library routines.
   35364                                                              (line  636)
   35365 * __fractdadi:                           Fixed-point fractional library routines.
   35366                                                              (line  633)
   35367 * __fractdadq:                           Fixed-point fractional library routines.
   35368                                                              (line  616)
   35369 * __fractdaha2:                          Fixed-point fractional library routines.
   35370                                                              (line  617)
   35371 * __fractdahi:                           Fixed-point fractional library routines.
   35372                                                              (line  631)
   35373 * __fractdahq:                           Fixed-point fractional library routines.
   35374                                                              (line  614)
   35375 * __fractdaqi:                           Fixed-point fractional library routines.
   35376                                                              (line  630)
   35377 * __fractdaqq:                           Fixed-point fractional library routines.
   35378                                                              (line  613)
   35379 * __fractdasa2:                          Fixed-point fractional library routines.
   35380                                                              (line  618)
   35381 * __fractdasf:                           Fixed-point fractional library routines.
   35382                                                              (line  635)
   35383 * __fractdasi:                           Fixed-point fractional library routines.
   35384                                                              (line  632)
   35385 * __fractdasq:                           Fixed-point fractional library routines.
   35386                                                              (line  615)
   35387 * __fractdata2:                          Fixed-point fractional library routines.
   35388                                                              (line  619)
   35389 * __fractdati:                           Fixed-point fractional library routines.
   35390                                                              (line  634)
   35391 * __fractdauda:                          Fixed-point fractional library routines.
   35392                                                              (line  627)
   35393 * __fractdaudq:                          Fixed-point fractional library routines.
   35394                                                              (line  624)
   35395 * __fractdauha:                          Fixed-point fractional library routines.
   35396                                                              (line  625)
   35397 * __fractdauhq:                          Fixed-point fractional library routines.
   35398                                                              (line  621)
   35399 * __fractdauqq:                          Fixed-point fractional library routines.
   35400                                                              (line  620)
   35401 * __fractdausa:                          Fixed-point fractional library routines.
   35402                                                              (line  626)
   35403 * __fractdausq:                          Fixed-point fractional library routines.
   35404                                                              (line  622)
   35405 * __fractdauta:                          Fixed-point fractional library routines.
   35406                                                              (line  629)
   35407 * __fractdfda:                           Fixed-point fractional library routines.
   35408                                                              (line 1025)
   35409 * __fractdfdq:                           Fixed-point fractional library routines.
   35410                                                              (line 1022)
   35411 * __fractdfha:                           Fixed-point fractional library routines.
   35412                                                              (line 1023)
   35413 * __fractdfhq:                           Fixed-point fractional library routines.
   35414                                                              (line 1020)
   35415 * __fractdfqq:                           Fixed-point fractional library routines.
   35416                                                              (line 1019)
   35417 * __fractdfsa:                           Fixed-point fractional library routines.
   35418                                                              (line 1024)
   35419 * __fractdfsq:                           Fixed-point fractional library routines.
   35420                                                              (line 1021)
   35421 * __fractdfta:                           Fixed-point fractional library routines.
   35422                                                              (line 1026)
   35423 * __fractdfuda:                          Fixed-point fractional library routines.
   35424                                                              (line 1033)
   35425 * __fractdfudq:                          Fixed-point fractional library routines.
   35426                                                              (line 1030)
   35427 * __fractdfuha:                          Fixed-point fractional library routines.
   35428                                                              (line 1031)
   35429 * __fractdfuhq:                          Fixed-point fractional library routines.
   35430                                                              (line 1028)
   35431 * __fractdfuqq:                          Fixed-point fractional library routines.
   35432                                                              (line 1027)
   35433 * __fractdfusa:                          Fixed-point fractional library routines.
   35434                                                              (line 1032)
   35435 * __fractdfusq:                          Fixed-point fractional library routines.
   35436                                                              (line 1029)
   35437 * __fractdfuta:                          Fixed-point fractional library routines.
   35438                                                              (line 1034)
   35439 * __fractdida:                           Fixed-point fractional library routines.
   35440                                                              (line  975)
   35441 * __fractdidq:                           Fixed-point fractional library routines.
   35442                                                              (line  972)
   35443 * __fractdiha:                           Fixed-point fractional library routines.
   35444                                                              (line  973)
   35445 * __fractdihq:                           Fixed-point fractional library routines.
   35446                                                              (line  970)
   35447 * __fractdiqq:                           Fixed-point fractional library routines.
   35448                                                              (line  969)
   35449 * __fractdisa:                           Fixed-point fractional library routines.
   35450                                                              (line  974)
   35451 * __fractdisq:                           Fixed-point fractional library routines.
   35452                                                              (line  971)
   35453 * __fractdita:                           Fixed-point fractional library routines.
   35454                                                              (line  976)
   35455 * __fractdiuda:                          Fixed-point fractional library routines.
   35456                                                              (line  983)
   35457 * __fractdiudq:                          Fixed-point fractional library routines.
   35458                                                              (line  980)
   35459 * __fractdiuha:                          Fixed-point fractional library routines.
   35460                                                              (line  981)
   35461 * __fractdiuhq:                          Fixed-point fractional library routines.
   35462                                                              (line  978)
   35463 * __fractdiuqq:                          Fixed-point fractional library routines.
   35464                                                              (line  977)
   35465 * __fractdiusa:                          Fixed-point fractional library routines.
   35466                                                              (line  982)
   35467 * __fractdiusq:                          Fixed-point fractional library routines.
   35468                                                              (line  979)
   35469 * __fractdiuta:                          Fixed-point fractional library routines.
   35470                                                              (line  984)
   35471 * __fractdqda:                           Fixed-point fractional library routines.
   35472                                                              (line  544)
   35473 * __fractdqdf:                           Fixed-point fractional library routines.
   35474                                                              (line  566)
   35475 * __fractdqdi:                           Fixed-point fractional library routines.
   35476                                                              (line  563)
   35477 * __fractdqha:                           Fixed-point fractional library routines.
   35478                                                              (line  542)
   35479 * __fractdqhi:                           Fixed-point fractional library routines.
   35480                                                              (line  561)
   35481 * __fractdqhq2:                          Fixed-point fractional library routines.
   35482                                                              (line  540)
   35483 * __fractdqqi:                           Fixed-point fractional library routines.
   35484                                                              (line  560)
   35485 * __fractdqqq2:                          Fixed-point fractional library routines.
   35486                                                              (line  539)
   35487 * __fractdqsa:                           Fixed-point fractional library routines.
   35488                                                              (line  543)
   35489 * __fractdqsf:                           Fixed-point fractional library routines.
   35490                                                              (line  565)
   35491 * __fractdqsi:                           Fixed-point fractional library routines.
   35492                                                              (line  562)
   35493 * __fractdqsq2:                          Fixed-point fractional library routines.
   35494                                                              (line  541)
   35495 * __fractdqta:                           Fixed-point fractional library routines.
   35496                                                              (line  545)
   35497 * __fractdqti:                           Fixed-point fractional library routines.
   35498                                                              (line  564)
   35499 * __fractdquda:                          Fixed-point fractional library routines.
   35500                                                              (line  557)
   35501 * __fractdqudq:                          Fixed-point fractional library routines.
   35502                                                              (line  552)
   35503 * __fractdquha:                          Fixed-point fractional library routines.
   35504                                                              (line  554)
   35505 * __fractdquhq:                          Fixed-point fractional library routines.
   35506                                                              (line  548)
   35507 * __fractdquqq:                          Fixed-point fractional library routines.
   35508                                                              (line  547)
   35509 * __fractdqusa:                          Fixed-point fractional library routines.
   35510                                                              (line  555)
   35511 * __fractdqusq:                          Fixed-point fractional library routines.
   35512                                                              (line  550)
   35513 * __fractdquta:                          Fixed-point fractional library routines.
   35514                                                              (line  559)
   35515 * __fracthada2:                          Fixed-point fractional library routines.
   35516                                                              (line  572)
   35517 * __fracthadf:                           Fixed-point fractional library routines.
   35518                                                              (line  590)
   35519 * __fracthadi:                           Fixed-point fractional library routines.
   35520                                                              (line  587)
   35521 * __fracthadq:                           Fixed-point fractional library routines.
   35522                                                              (line  570)
   35523 * __fracthahi:                           Fixed-point fractional library routines.
   35524                                                              (line  585)
   35525 * __fracthahq:                           Fixed-point fractional library routines.
   35526                                                              (line  568)
   35527 * __fracthaqi:                           Fixed-point fractional library routines.
   35528                                                              (line  584)
   35529 * __fracthaqq:                           Fixed-point fractional library routines.
   35530                                                              (line  567)
   35531 * __fracthasa2:                          Fixed-point fractional library routines.
   35532                                                              (line  571)
   35533 * __fracthasf:                           Fixed-point fractional library routines.
   35534                                                              (line  589)
   35535 * __fracthasi:                           Fixed-point fractional library routines.
   35536                                                              (line  586)
   35537 * __fracthasq:                           Fixed-point fractional library routines.
   35538                                                              (line  569)
   35539 * __fracthata2:                          Fixed-point fractional library routines.
   35540                                                              (line  573)
   35541 * __fracthati:                           Fixed-point fractional library routines.
   35542                                                              (line  588)
   35543 * __fracthauda:                          Fixed-point fractional library routines.
   35544                                                              (line  581)
   35545 * __fracthaudq:                          Fixed-point fractional library routines.
   35546                                                              (line  578)
   35547 * __fracthauha:                          Fixed-point fractional library routines.
   35548                                                              (line  579)
   35549 * __fracthauhq:                          Fixed-point fractional library routines.
   35550                                                              (line  575)
   35551 * __fracthauqq:                          Fixed-point fractional library routines.
   35552                                                              (line  574)
   35553 * __fracthausa:                          Fixed-point fractional library routines.
   35554                                                              (line  580)
   35555 * __fracthausq:                          Fixed-point fractional library routines.
   35556                                                              (line  576)
   35557 * __fracthauta:                          Fixed-point fractional library routines.
   35558                                                              (line  583)
   35559 * __fracthida:                           Fixed-point fractional library routines.
   35560                                                              (line  943)
   35561 * __fracthidq:                           Fixed-point fractional library routines.
   35562                                                              (line  940)
   35563 * __fracthiha:                           Fixed-point fractional library routines.
   35564                                                              (line  941)
   35565 * __fracthihq:                           Fixed-point fractional library routines.
   35566                                                              (line  938)
   35567 * __fracthiqq:                           Fixed-point fractional library routines.
   35568                                                              (line  937)
   35569 * __fracthisa:                           Fixed-point fractional library routines.
   35570                                                              (line  942)
   35571 * __fracthisq:                           Fixed-point fractional library routines.
   35572                                                              (line  939)
   35573 * __fracthita:                           Fixed-point fractional library routines.
   35574                                                              (line  944)
   35575 * __fracthiuda:                          Fixed-point fractional library routines.
   35576                                                              (line  951)
   35577 * __fracthiudq:                          Fixed-point fractional library routines.
   35578                                                              (line  948)
   35579 * __fracthiuha:                          Fixed-point fractional library routines.
   35580                                                              (line  949)
   35581 * __fracthiuhq:                          Fixed-point fractional library routines.
   35582                                                              (line  946)
   35583 * __fracthiuqq:                          Fixed-point fractional library routines.
   35584                                                              (line  945)
   35585 * __fracthiusa:                          Fixed-point fractional library routines.
   35586                                                              (line  950)
   35587 * __fracthiusq:                          Fixed-point fractional library routines.
   35588                                                              (line  947)
   35589 * __fracthiuta:                          Fixed-point fractional library routines.
   35590                                                              (line  952)
   35591 * __fracthqda:                           Fixed-point fractional library routines.
   35592                                                              (line  498)
   35593 * __fracthqdf:                           Fixed-point fractional library routines.
   35594                                                              (line  514)
   35595 * __fracthqdi:                           Fixed-point fractional library routines.
   35596                                                              (line  511)
   35597 * __fracthqdq2:                          Fixed-point fractional library routines.
   35598                                                              (line  495)
   35599 * __fracthqha:                           Fixed-point fractional library routines.
   35600                                                              (line  496)
   35601 * __fracthqhi:                           Fixed-point fractional library routines.
   35602                                                              (line  509)
   35603 * __fracthqqi:                           Fixed-point fractional library routines.
   35604                                                              (line  508)
   35605 * __fracthqqq2:                          Fixed-point fractional library routines.
   35606                                                              (line  493)
   35607 * __fracthqsa:                           Fixed-point fractional library routines.
   35608                                                              (line  497)
   35609 * __fracthqsf:                           Fixed-point fractional library routines.
   35610                                                              (line  513)
   35611 * __fracthqsi:                           Fixed-point fractional library routines.
   35612                                                              (line  510)
   35613 * __fracthqsq2:                          Fixed-point fractional library routines.
   35614                                                              (line  494)
   35615 * __fracthqta:                           Fixed-point fractional library routines.
   35616                                                              (line  499)
   35617 * __fracthqti:                           Fixed-point fractional library routines.
   35618                                                              (line  512)
   35619 * __fracthquda:                          Fixed-point fractional library routines.
   35620                                                              (line  506)
   35621 * __fracthqudq:                          Fixed-point fractional library routines.
   35622                                                              (line  503)
   35623 * __fracthquha:                          Fixed-point fractional library routines.
   35624                                                              (line  504)
   35625 * __fracthquhq:                          Fixed-point fractional library routines.
   35626                                                              (line  501)
   35627 * __fracthquqq:                          Fixed-point fractional library routines.
   35628                                                              (line  500)
   35629 * __fracthqusa:                          Fixed-point fractional library routines.
   35630                                                              (line  505)
   35631 * __fracthqusq:                          Fixed-point fractional library routines.
   35632                                                              (line  502)
   35633 * __fracthquta:                          Fixed-point fractional library routines.
   35634                                                              (line  507)
   35635 * __fractqida:                           Fixed-point fractional library routines.
   35636                                                              (line  925)
   35637 * __fractqidq:                           Fixed-point fractional library routines.
   35638                                                              (line  922)
   35639 * __fractqiha:                           Fixed-point fractional library routines.
   35640                                                              (line  923)
   35641 * __fractqihq:                           Fixed-point fractional library routines.
   35642                                                              (line  920)
   35643 * __fractqiqq:                           Fixed-point fractional library routines.
   35644                                                              (line  919)
   35645 * __fractqisa:                           Fixed-point fractional library routines.
   35646                                                              (line  924)
   35647 * __fractqisq:                           Fixed-point fractional library routines.
   35648                                                              (line  921)
   35649 * __fractqita:                           Fixed-point fractional library routines.
   35650                                                              (line  926)
   35651 * __fractqiuda:                          Fixed-point fractional library routines.
   35652                                                              (line  934)
   35653 * __fractqiudq:                          Fixed-point fractional library routines.
   35654                                                              (line  931)
   35655 * __fractqiuha:                          Fixed-point fractional library routines.
   35656                                                              (line  932)
   35657 * __fractqiuhq:                          Fixed-point fractional library routines.
   35658                                                              (line  928)
   35659 * __fractqiuqq:                          Fixed-point fractional library routines.
   35660                                                              (line  927)
   35661 * __fractqiusa:                          Fixed-point fractional library routines.
   35662                                                              (line  933)
   35663 * __fractqiusq:                          Fixed-point fractional library routines.
   35664                                                              (line  929)
   35665 * __fractqiuta:                          Fixed-point fractional library routines.
   35666                                                              (line  936)
   35667 * __fractqqda:                           Fixed-point fractional library routines.
   35668                                                              (line  474)
   35669 * __fractqqdf:                           Fixed-point fractional library routines.
   35670                                                              (line  492)
   35671 * __fractqqdi:                           Fixed-point fractional library routines.
   35672                                                              (line  489)
   35673 * __fractqqdq2:                          Fixed-point fractional library routines.
   35674                                                              (line  471)
   35675 * __fractqqha:                           Fixed-point fractional library routines.
   35676                                                              (line  472)
   35677 * __fractqqhi:                           Fixed-point fractional library routines.
   35678                                                              (line  487)
   35679 * __fractqqhq2:                          Fixed-point fractional library routines.
   35680                                                              (line  469)
   35681 * __fractqqqi:                           Fixed-point fractional library routines.
   35682                                                              (line  486)
   35683 * __fractqqsa:                           Fixed-point fractional library routines.
   35684                                                              (line  473)
   35685 * __fractqqsf:                           Fixed-point fractional library routines.
   35686                                                              (line  491)
   35687 * __fractqqsi:                           Fixed-point fractional library routines.
   35688                                                              (line  488)
   35689 * __fractqqsq2:                          Fixed-point fractional library routines.
   35690                                                              (line  470)
   35691 * __fractqqta:                           Fixed-point fractional library routines.
   35692                                                              (line  475)
   35693 * __fractqqti:                           Fixed-point fractional library routines.
   35694                                                              (line  490)
   35695 * __fractqquda:                          Fixed-point fractional library routines.
   35696                                                              (line  483)
   35697 * __fractqqudq:                          Fixed-point fractional library routines.
   35698                                                              (line  480)
   35699 * __fractqquha:                          Fixed-point fractional library routines.
   35700                                                              (line  481)
   35701 * __fractqquhq:                          Fixed-point fractional library routines.
   35702                                                              (line  477)
   35703 * __fractqquqq:                          Fixed-point fractional library routines.
   35704                                                              (line  476)
   35705 * __fractqqusa:                          Fixed-point fractional library routines.
   35706                                                              (line  482)
   35707 * __fractqqusq:                          Fixed-point fractional library routines.
   35708                                                              (line  478)
   35709 * __fractqquta:                          Fixed-point fractional library routines.
   35710                                                              (line  485)
   35711 * __fractsada2:                          Fixed-point fractional library routines.
   35712                                                              (line  596)
   35713 * __fractsadf:                           Fixed-point fractional library routines.
   35714                                                              (line  612)
   35715 * __fractsadi:                           Fixed-point fractional library routines.
   35716                                                              (line  609)
   35717 * __fractsadq:                           Fixed-point fractional library routines.
   35718                                                              (line  594)
   35719 * __fractsaha2:                          Fixed-point fractional library routines.
   35720                                                              (line  595)
   35721 * __fractsahi:                           Fixed-point fractional library routines.
   35722                                                              (line  607)
   35723 * __fractsahq:                           Fixed-point fractional library routines.
   35724                                                              (line  592)
   35725 * __fractsaqi:                           Fixed-point fractional library routines.
   35726                                                              (line  606)
   35727 * __fractsaqq:                           Fixed-point fractional library routines.
   35728                                                              (line  591)
   35729 * __fractsasf:                           Fixed-point fractional library routines.
   35730                                                              (line  611)
   35731 * __fractsasi:                           Fixed-point fractional library routines.
   35732                                                              (line  608)
   35733 * __fractsasq:                           Fixed-point fractional library routines.
   35734                                                              (line  593)
   35735 * __fractsata2:                          Fixed-point fractional library routines.
   35736                                                              (line  597)
   35737 * __fractsati:                           Fixed-point fractional library routines.
   35738                                                              (line  610)
   35739 * __fractsauda:                          Fixed-point fractional library routines.
   35740                                                              (line  604)
   35741 * __fractsaudq:                          Fixed-point fractional library routines.
   35742                                                              (line  601)
   35743 * __fractsauha:                          Fixed-point fractional library routines.
   35744                                                              (line  602)
   35745 * __fractsauhq:                          Fixed-point fractional library routines.
   35746                                                              (line  599)
   35747 * __fractsauqq:                          Fixed-point fractional library routines.
   35748                                                              (line  598)
   35749 * __fractsausa:                          Fixed-point fractional library routines.
   35750                                                              (line  603)
   35751 * __fractsausq:                          Fixed-point fractional library routines.
   35752                                                              (line  600)
   35753 * __fractsauta:                          Fixed-point fractional library routines.
   35754                                                              (line  605)
   35755 * __fractsfda:                           Fixed-point fractional library routines.
   35756                                                              (line 1009)
   35757 * __fractsfdq:                           Fixed-point fractional library routines.
   35758                                                              (line 1006)
   35759 * __fractsfha:                           Fixed-point fractional library routines.
   35760                                                              (line 1007)
   35761 * __fractsfhq:                           Fixed-point fractional library routines.
   35762                                                              (line 1004)
   35763 * __fractsfqq:                           Fixed-point fractional library routines.
   35764                                                              (line 1003)
   35765 * __fractsfsa:                           Fixed-point fractional library routines.
   35766                                                              (line 1008)
   35767 * __fractsfsq:                           Fixed-point fractional library routines.
   35768                                                              (line 1005)
   35769 * __fractsfta:                           Fixed-point fractional library routines.
   35770                                                              (line 1010)
   35771 * __fractsfuda:                          Fixed-point fractional library routines.
   35772                                                              (line 1017)
   35773 * __fractsfudq:                          Fixed-point fractional library routines.
   35774                                                              (line 1014)
   35775 * __fractsfuha:                          Fixed-point fractional library routines.
   35776                                                              (line 1015)
   35777 * __fractsfuhq:                          Fixed-point fractional library routines.
   35778                                                              (line 1012)
   35779 * __fractsfuqq:                          Fixed-point fractional library routines.
   35780                                                              (line 1011)
   35781 * __fractsfusa:                          Fixed-point fractional library routines.
   35782                                                              (line 1016)
   35783 * __fractsfusq:                          Fixed-point fractional library routines.
   35784                                                              (line 1013)
   35785 * __fractsfuta:                          Fixed-point fractional library routines.
   35786                                                              (line 1018)
   35787 * __fractsida:                           Fixed-point fractional library routines.
   35788                                                              (line  959)
   35789 * __fractsidq:                           Fixed-point fractional library routines.
   35790                                                              (line  956)
   35791 * __fractsiha:                           Fixed-point fractional library routines.
   35792                                                              (line  957)
   35793 * __fractsihq:                           Fixed-point fractional library routines.
   35794                                                              (line  954)
   35795 * __fractsiqq:                           Fixed-point fractional library routines.
   35796                                                              (line  953)
   35797 * __fractsisa:                           Fixed-point fractional library routines.
   35798                                                              (line  958)
   35799 * __fractsisq:                           Fixed-point fractional library routines.
   35800                                                              (line  955)
   35801 * __fractsita:                           Fixed-point fractional library routines.
   35802                                                              (line  960)
   35803 * __fractsiuda:                          Fixed-point fractional library routines.
   35804                                                              (line  967)
   35805 * __fractsiudq:                          Fixed-point fractional library routines.
   35806                                                              (line  964)
   35807 * __fractsiuha:                          Fixed-point fractional library routines.
   35808                                                              (line  965)
   35809 * __fractsiuhq:                          Fixed-point fractional library routines.
   35810                                                              (line  962)
   35811 * __fractsiuqq:                          Fixed-point fractional library routines.
   35812                                                              (line  961)
   35813 * __fractsiusa:                          Fixed-point fractional library routines.
   35814                                                              (line  966)
   35815 * __fractsiusq:                          Fixed-point fractional library routines.
   35816                                                              (line  963)
   35817 * __fractsiuta:                          Fixed-point fractional library routines.
   35818                                                              (line  968)
   35819 * __fractsqda:                           Fixed-point fractional library routines.
   35820                                                              (line  520)
   35821 * __fractsqdf:                           Fixed-point fractional library routines.
   35822                                                              (line  538)
   35823 * __fractsqdi:                           Fixed-point fractional library routines.
   35824                                                              (line  535)
   35825 * __fractsqdq2:                          Fixed-point fractional library routines.
   35826                                                              (line  517)
   35827 * __fractsqha:                           Fixed-point fractional library routines.
   35828                                                              (line  518)
   35829 * __fractsqhi:                           Fixed-point fractional library routines.
   35830                                                              (line  533)
   35831 * __fractsqhq2:                          Fixed-point fractional library routines.
   35832                                                              (line  516)
   35833 * __fractsqqi:                           Fixed-point fractional library routines.
   35834                                                              (line  532)
   35835 * __fractsqqq2:                          Fixed-point fractional library routines.
   35836                                                              (line  515)
   35837 * __fractsqsa:                           Fixed-point fractional library routines.
   35838                                                              (line  519)
   35839 * __fractsqsf:                           Fixed-point fractional library routines.
   35840                                                              (line  537)
   35841 * __fractsqsi:                           Fixed-point fractional library routines.
   35842                                                              (line  534)
   35843 * __fractsqta:                           Fixed-point fractional library routines.
   35844                                                              (line  521)
   35845 * __fractsqti:                           Fixed-point fractional library routines.
   35846                                                              (line  536)
   35847 * __fractsquda:                          Fixed-point fractional library routines.
   35848                                                              (line  529)
   35849 * __fractsqudq:                          Fixed-point fractional library routines.
   35850                                                              (line  526)
   35851 * __fractsquha:                          Fixed-point fractional library routines.
   35852                                                              (line  527)
   35853 * __fractsquhq:                          Fixed-point fractional library routines.
   35854                                                              (line  523)
   35855 * __fractsquqq:                          Fixed-point fractional library routines.
   35856                                                              (line  522)
   35857 * __fractsqusa:                          Fixed-point fractional library routines.
   35858                                                              (line  528)
   35859 * __fractsqusq:                          Fixed-point fractional library routines.
   35860                                                              (line  524)
   35861 * __fractsquta:                          Fixed-point fractional library routines.
   35862                                                              (line  531)
   35863 * __fracttada2:                          Fixed-point fractional library routines.
   35864                                                              (line  643)
   35865 * __fracttadf:                           Fixed-point fractional library routines.
   35866                                                              (line  664)
   35867 * __fracttadi:                           Fixed-point fractional library routines.
   35868                                                              (line  661)
   35869 * __fracttadq:                           Fixed-point fractional library routines.
   35870                                                              (line  640)
   35871 * __fracttaha2:                          Fixed-point fractional library routines.
   35872                                                              (line  641)
   35873 * __fracttahi:                           Fixed-point fractional library routines.
   35874                                                              (line  659)
   35875 * __fracttahq:                           Fixed-point fractional library routines.
   35876                                                              (line  638)
   35877 * __fracttaqi:                           Fixed-point fractional library routines.
   35878                                                              (line  658)
   35879 * __fracttaqq:                           Fixed-point fractional library routines.
   35880                                                              (line  637)
   35881 * __fracttasa2:                          Fixed-point fractional library routines.
   35882                                                              (line  642)
   35883 * __fracttasf:                           Fixed-point fractional library routines.
   35884                                                              (line  663)
   35885 * __fracttasi:                           Fixed-point fractional library routines.
   35886                                                              (line  660)
   35887 * __fracttasq:                           Fixed-point fractional library routines.
   35888                                                              (line  639)
   35889 * __fracttati:                           Fixed-point fractional library routines.
   35890                                                              (line  662)
   35891 * __fracttauda:                          Fixed-point fractional library routines.
   35892                                                              (line  655)
   35893 * __fracttaudq:                          Fixed-point fractional library routines.
   35894                                                              (line  650)
   35895 * __fracttauha:                          Fixed-point fractional library routines.
   35896                                                              (line  652)
   35897 * __fracttauhq:                          Fixed-point fractional library routines.
   35898                                                              (line  646)
   35899 * __fracttauqq:                          Fixed-point fractional library routines.
   35900                                                              (line  645)
   35901 * __fracttausa:                          Fixed-point fractional library routines.
   35902                                                              (line  653)
   35903 * __fracttausq:                          Fixed-point fractional library routines.
   35904                                                              (line  648)
   35905 * __fracttauta:                          Fixed-point fractional library routines.
   35906                                                              (line  657)
   35907 * __fracttida:                           Fixed-point fractional library routines.
   35908                                                              (line  991)
   35909 * __fracttidq:                           Fixed-point fractional library routines.
   35910                                                              (line  988)
   35911 * __fracttiha:                           Fixed-point fractional library routines.
   35912                                                              (line  989)
   35913 * __fracttihq:                           Fixed-point fractional library routines.
   35914                                                              (line  986)
   35915 * __fracttiqq:                           Fixed-point fractional library routines.
   35916                                                              (line  985)
   35917 * __fracttisa:                           Fixed-point fractional library routines.
   35918                                                              (line  990)
   35919 * __fracttisq:                           Fixed-point fractional library routines.
   35920                                                              (line  987)
   35921 * __fracttita:                           Fixed-point fractional library routines.
   35922                                                              (line  992)
   35923 * __fracttiuda:                          Fixed-point fractional library routines.
   35924                                                              (line 1000)
   35925 * __fracttiudq:                          Fixed-point fractional library routines.
   35926                                                              (line  997)
   35927 * __fracttiuha:                          Fixed-point fractional library routines.
   35928                                                              (line  998)
   35929 * __fracttiuhq:                          Fixed-point fractional library routines.
   35930                                                              (line  994)
   35931 * __fracttiuqq:                          Fixed-point fractional library routines.
   35932                                                              (line  993)
   35933 * __fracttiusa:                          Fixed-point fractional library routines.
   35934                                                              (line  999)
   35935 * __fracttiusq:                          Fixed-point fractional library routines.
   35936                                                              (line  995)
   35937 * __fracttiuta:                          Fixed-point fractional library routines.
   35938                                                              (line 1002)
   35939 * __fractudada:                          Fixed-point fractional library routines.
   35940                                                              (line  858)
   35941 * __fractudadf:                          Fixed-point fractional library routines.
   35942                                                              (line  881)
   35943 * __fractudadi:                          Fixed-point fractional library routines.
   35944                                                              (line  878)
   35945 * __fractudadq:                          Fixed-point fractional library routines.
   35946                                                              (line  855)
   35947 * __fractudaha:                          Fixed-point fractional library routines.
   35948                                                              (line  856)
   35949 * __fractudahi:                          Fixed-point fractional library routines.
   35950                                                              (line  876)
   35951 * __fractudahq:                          Fixed-point fractional library routines.
   35952                                                              (line  852)
   35953 * __fractudaqi:                          Fixed-point fractional library routines.
   35954                                                              (line  875)
   35955 * __fractudaqq:                          Fixed-point fractional library routines.
   35956                                                              (line  851)
   35957 * __fractudasa:                          Fixed-point fractional library routines.
   35958                                                              (line  857)
   35959 * __fractudasf:                          Fixed-point fractional library routines.
   35960                                                              (line  880)
   35961 * __fractudasi:                          Fixed-point fractional library routines.
   35962                                                              (line  877)
   35963 * __fractudasq:                          Fixed-point fractional library routines.
   35964                                                              (line  853)
   35965 * __fractudata:                          Fixed-point fractional library routines.
   35966                                                              (line  860)
   35967 * __fractudati:                          Fixed-point fractional library routines.
   35968                                                              (line  879)
   35969 * __fractudaudq:                         Fixed-point fractional library routines.
   35970                                                              (line  868)
   35971 * __fractudauha2:                        Fixed-point fractional library routines.
   35972                                                              (line  870)
   35973 * __fractudauhq:                         Fixed-point fractional library routines.
   35974                                                              (line  864)
   35975 * __fractudauqq:                         Fixed-point fractional library routines.
   35976                                                              (line  862)
   35977 * __fractudausa2:                        Fixed-point fractional library routines.
   35978                                                              (line  872)
   35979 * __fractudausq:                         Fixed-point fractional library routines.
   35980                                                              (line  866)
   35981 * __fractudauta2:                        Fixed-point fractional library routines.
   35982                                                              (line  874)
   35983 * __fractudqda:                          Fixed-point fractional library routines.
   35984                                                              (line  766)
   35985 * __fractudqdf:                          Fixed-point fractional library routines.
   35986                                                              (line  791)
   35987 * __fractudqdi:                          Fixed-point fractional library routines.
   35988                                                              (line  787)
   35989 * __fractudqdq:                          Fixed-point fractional library routines.
   35990                                                              (line  761)
   35991 * __fractudqha:                          Fixed-point fractional library routines.
   35992                                                              (line  763)
   35993 * __fractudqhi:                          Fixed-point fractional library routines.
   35994                                                              (line  785)
   35995 * __fractudqhq:                          Fixed-point fractional library routines.
   35996                                                              (line  757)
   35997 * __fractudqqi:                          Fixed-point fractional library routines.
   35998                                                              (line  784)
   35999 * __fractudqqq:                          Fixed-point fractional library routines.
   36000                                                              (line  756)
   36001 * __fractudqsa:                          Fixed-point fractional library routines.
   36002                                                              (line  764)
   36003 * __fractudqsf:                          Fixed-point fractional library routines.
   36004                                                              (line  790)
   36005 * __fractudqsi:                          Fixed-point fractional library routines.
   36006                                                              (line  786)
   36007 * __fractudqsq:                          Fixed-point fractional library routines.
   36008                                                              (line  759)
   36009 * __fractudqta:                          Fixed-point fractional library routines.
   36010                                                              (line  768)
   36011 * __fractudqti:                          Fixed-point fractional library routines.
   36012                                                              (line  789)
   36013 * __fractudquda:                         Fixed-point fractional library routines.
   36014                                                              (line  780)
   36015 * __fractudquha:                         Fixed-point fractional library routines.
   36016                                                              (line  776)
   36017 * __fractudquhq2:                        Fixed-point fractional library routines.
   36018                                                              (line  772)
   36019 * __fractudquqq2:                        Fixed-point fractional library routines.
   36020                                                              (line  770)
   36021 * __fractudqusa:                         Fixed-point fractional library routines.
   36022                                                              (line  778)
   36023 * __fractudqusq2:                        Fixed-point fractional library routines.
   36024                                                              (line  774)
   36025 * __fractudquta:                         Fixed-point fractional library routines.
   36026                                                              (line  782)
   36027 * __fractuhada:                          Fixed-point fractional library routines.
   36028                                                              (line  799)
   36029 * __fractuhadf:                          Fixed-point fractional library routines.
   36030                                                              (line  822)
   36031 * __fractuhadi:                          Fixed-point fractional library routines.
   36032                                                              (line  819)
   36033 * __fractuhadq:                          Fixed-point fractional library routines.
   36034                                                              (line  796)
   36035 * __fractuhaha:                          Fixed-point fractional library routines.
   36036                                                              (line  797)
   36037 * __fractuhahi:                          Fixed-point fractional library routines.
   36038                                                              (line  817)
   36039 * __fractuhahq:                          Fixed-point fractional library routines.
   36040                                                              (line  793)
   36041 * __fractuhaqi:                          Fixed-point fractional library routines.
   36042                                                              (line  816)
   36043 * __fractuhaqq:                          Fixed-point fractional library routines.
   36044                                                              (line  792)
   36045 * __fractuhasa:                          Fixed-point fractional library routines.
   36046                                                              (line  798)
   36047 * __fractuhasf:                          Fixed-point fractional library routines.
   36048                                                              (line  821)
   36049 * __fractuhasi:                          Fixed-point fractional library routines.
   36050                                                              (line  818)
   36051 * __fractuhasq:                          Fixed-point fractional library routines.
   36052                                                              (line  794)
   36053 * __fractuhata:                          Fixed-point fractional library routines.
   36054                                                              (line  801)
   36055 * __fractuhati:                          Fixed-point fractional library routines.
   36056                                                              (line  820)
   36057 * __fractuhauda2:                        Fixed-point fractional library routines.
   36058                                                              (line  813)
   36059 * __fractuhaudq:                         Fixed-point fractional library routines.
   36060                                                              (line  809)
   36061 * __fractuhauhq:                         Fixed-point fractional library routines.
   36062                                                              (line  805)
   36063 * __fractuhauqq:                         Fixed-point fractional library routines.
   36064                                                              (line  803)
   36065 * __fractuhausa2:                        Fixed-point fractional library routines.
   36066                                                              (line  811)
   36067 * __fractuhausq:                         Fixed-point fractional library routines.
   36068                                                              (line  807)
   36069 * __fractuhauta2:                        Fixed-point fractional library routines.
   36070                                                              (line  815)
   36071 * __fractuhqda:                          Fixed-point fractional library routines.
   36072                                                              (line  702)
   36073 * __fractuhqdf:                          Fixed-point fractional library routines.
   36074                                                              (line  723)
   36075 * __fractuhqdi:                          Fixed-point fractional library routines.
   36076                                                              (line  720)
   36077 * __fractuhqdq:                          Fixed-point fractional library routines.
   36078                                                              (line  699)
   36079 * __fractuhqha:                          Fixed-point fractional library routines.
   36080                                                              (line  700)
   36081 * __fractuhqhi:                          Fixed-point fractional library routines.
   36082                                                              (line  718)
   36083 * __fractuhqhq:                          Fixed-point fractional library routines.
   36084                                                              (line  697)
   36085 * __fractuhqqi:                          Fixed-point fractional library routines.
   36086                                                              (line  717)
   36087 * __fractuhqqq:                          Fixed-point fractional library routines.
   36088                                                              (line  696)
   36089 * __fractuhqsa:                          Fixed-point fractional library routines.
   36090                                                              (line  701)
   36091 * __fractuhqsf:                          Fixed-point fractional library routines.
   36092                                                              (line  722)
   36093 * __fractuhqsi:                          Fixed-point fractional library routines.
   36094                                                              (line  719)
   36095 * __fractuhqsq:                          Fixed-point fractional library routines.
   36096                                                              (line  698)
   36097 * __fractuhqta:                          Fixed-point fractional library routines.
   36098                                                              (line  703)
   36099 * __fractuhqti:                          Fixed-point fractional library routines.
   36100                                                              (line  721)
   36101 * __fractuhquda:                         Fixed-point fractional library routines.
   36102                                                              (line  714)
   36103 * __fractuhqudq2:                        Fixed-point fractional library routines.
   36104                                                              (line  709)
   36105 * __fractuhquha:                         Fixed-point fractional library routines.
   36106                                                              (line  711)
   36107 * __fractuhquqq2:                        Fixed-point fractional library routines.
   36108                                                              (line  705)
   36109 * __fractuhqusa:                         Fixed-point fractional library routines.
   36110                                                              (line  712)
   36111 * __fractuhqusq2:                        Fixed-point fractional library routines.
   36112                                                              (line  707)
   36113 * __fractuhquta:                         Fixed-point fractional library routines.
   36114                                                              (line  716)
   36115 * __fractunsdadi:                        Fixed-point fractional library routines.
   36116                                                              (line 1555)
   36117 * __fractunsdahi:                        Fixed-point fractional library routines.
   36118                                                              (line 1553)
   36119 * __fractunsdaqi:                        Fixed-point fractional library routines.
   36120                                                              (line 1552)
   36121 * __fractunsdasi:                        Fixed-point fractional library routines.
   36122                                                              (line 1554)
   36123 * __fractunsdati:                        Fixed-point fractional library routines.
   36124                                                              (line 1556)
   36125 * __fractunsdida:                        Fixed-point fractional library routines.
   36126                                                              (line 1707)
   36127 * __fractunsdidq:                        Fixed-point fractional library routines.
   36128                                                              (line 1704)
   36129 * __fractunsdiha:                        Fixed-point fractional library routines.
   36130                                                              (line 1705)
   36131 * __fractunsdihq:                        Fixed-point fractional library routines.
   36132                                                              (line 1702)
   36133 * __fractunsdiqq:                        Fixed-point fractional library routines.
   36134                                                              (line 1701)
   36135 * __fractunsdisa:                        Fixed-point fractional library routines.
   36136                                                              (line 1706)
   36137 * __fractunsdisq:                        Fixed-point fractional library routines.
   36138                                                              (line 1703)
   36139 * __fractunsdita:                        Fixed-point fractional library routines.
   36140                                                              (line 1708)
   36141 * __fractunsdiuda:                       Fixed-point fractional library routines.
   36142                                                              (line 1720)
   36143 * __fractunsdiudq:                       Fixed-point fractional library routines.
   36144                                                              (line 1715)
   36145 * __fractunsdiuha:                       Fixed-point fractional library routines.
   36146                                                              (line 1717)
   36147 * __fractunsdiuhq:                       Fixed-point fractional library routines.
   36148                                                              (line 1711)
   36149 * __fractunsdiuqq:                       Fixed-point fractional library routines.
   36150                                                              (line 1710)
   36151 * __fractunsdiusa:                       Fixed-point fractional library routines.
   36152                                                              (line 1718)
   36153 * __fractunsdiusq:                       Fixed-point fractional library routines.
   36154                                                              (line 1713)
   36155 * __fractunsdiuta:                       Fixed-point fractional library routines.
   36156                                                              (line 1722)
   36157 * __fractunsdqdi:                        Fixed-point fractional library routines.
   36158                                                              (line 1539)
   36159 * __fractunsdqhi:                        Fixed-point fractional library routines.
   36160                                                              (line 1537)
   36161 * __fractunsdqqi:                        Fixed-point fractional library routines.
   36162                                                              (line 1536)
   36163 * __fractunsdqsi:                        Fixed-point fractional library routines.
   36164                                                              (line 1538)
   36165 * __fractunsdqti:                        Fixed-point fractional library routines.
   36166                                                              (line 1541)
   36167 * __fractunshadi:                        Fixed-point fractional library routines.
   36168                                                              (line 1545)
   36169 * __fractunshahi:                        Fixed-point fractional library routines.
   36170                                                              (line 1543)
   36171 * __fractunshaqi:                        Fixed-point fractional library routines.
   36172                                                              (line 1542)
   36173 * __fractunshasi:                        Fixed-point fractional library routines.
   36174                                                              (line 1544)
   36175 * __fractunshati:                        Fixed-point fractional library routines.
   36176                                                              (line 1546)
   36177 * __fractunshida:                        Fixed-point fractional library routines.
   36178                                                              (line 1663)
   36179 * __fractunshidq:                        Fixed-point fractional library routines.
   36180                                                              (line 1660)
   36181 * __fractunshiha:                        Fixed-point fractional library routines.
   36182                                                              (line 1661)
   36183 * __fractunshihq:                        Fixed-point fractional library routines.
   36184                                                              (line 1658)
   36185 * __fractunshiqq:                        Fixed-point fractional library routines.
   36186                                                              (line 1657)
   36187 * __fractunshisa:                        Fixed-point fractional library routines.
   36188                                                              (line 1662)
   36189 * __fractunshisq:                        Fixed-point fractional library routines.
   36190                                                              (line 1659)
   36191 * __fractunshita:                        Fixed-point fractional library routines.
   36192                                                              (line 1664)
   36193 * __fractunshiuda:                       Fixed-point fractional library routines.
   36194                                                              (line 1676)
   36195 * __fractunshiudq:                       Fixed-point fractional library routines.
   36196                                                              (line 1671)
   36197 * __fractunshiuha:                       Fixed-point fractional library routines.
   36198                                                              (line 1673)
   36199 * __fractunshiuhq:                       Fixed-point fractional library routines.
   36200                                                              (line 1667)
   36201 * __fractunshiuqq:                       Fixed-point fractional library routines.
   36202                                                              (line 1666)
   36203 * __fractunshiusa:                       Fixed-point fractional library routines.
   36204                                                              (line 1674)
   36205 * __fractunshiusq:                       Fixed-point fractional library routines.
   36206                                                              (line 1669)
   36207 * __fractunshiuta:                       Fixed-point fractional library routines.
   36208                                                              (line 1678)
   36209 * __fractunshqdi:                        Fixed-point fractional library routines.
   36210                                                              (line 1529)
   36211 * __fractunshqhi:                        Fixed-point fractional library routines.
   36212                                                              (line 1527)
   36213 * __fractunshqqi:                        Fixed-point fractional library routines.
   36214                                                              (line 1526)
   36215 * __fractunshqsi:                        Fixed-point fractional library routines.
   36216                                                              (line 1528)
   36217 * __fractunshqti:                        Fixed-point fractional library routines.
   36218                                                              (line 1530)
   36219 * __fractunsqida:                        Fixed-point fractional library routines.
   36220                                                              (line 1641)
   36221 * __fractunsqidq:                        Fixed-point fractional library routines.
   36222                                                              (line 1638)
   36223 * __fractunsqiha:                        Fixed-point fractional library routines.
   36224                                                              (line 1639)
   36225 * __fractunsqihq:                        Fixed-point fractional library routines.
   36226                                                              (line 1636)
   36227 * __fractunsqiqq:                        Fixed-point fractional library routines.
   36228                                                              (line 1635)
   36229 * __fractunsqisa:                        Fixed-point fractional library routines.
   36230                                                              (line 1640)
   36231 * __fractunsqisq:                        Fixed-point fractional library routines.
   36232                                                              (line 1637)
   36233 * __fractunsqita:                        Fixed-point fractional library routines.
   36234                                                              (line 1642)
   36235 * __fractunsqiuda:                       Fixed-point fractional library routines.
   36236                                                              (line 1654)
   36237 * __fractunsqiudq:                       Fixed-point fractional library routines.
   36238                                                              (line 1649)
   36239 * __fractunsqiuha:                       Fixed-point fractional library routines.
   36240                                                              (line 1651)
   36241 * __fractunsqiuhq:                       Fixed-point fractional library routines.
   36242                                                              (line 1645)
   36243 * __fractunsqiuqq:                       Fixed-point fractional library routines.
   36244                                                              (line 1644)
   36245 * __fractunsqiusa:                       Fixed-point fractional library routines.
   36246                                                              (line 1652)
   36247 * __fractunsqiusq:                       Fixed-point fractional library routines.
   36248                                                              (line 1647)
   36249 * __fractunsqiuta:                       Fixed-point fractional library routines.
   36250                                                              (line 1656)
   36251 * __fractunsqqdi:                        Fixed-point fractional library routines.
   36252                                                              (line 1524)
   36253 * __fractunsqqhi:                        Fixed-point fractional library routines.
   36254                                                              (line 1522)
   36255 * __fractunsqqqi:                        Fixed-point fractional library routines.
   36256                                                              (line 1521)
   36257 * __fractunsqqsi:                        Fixed-point fractional library routines.
   36258                                                              (line 1523)
   36259 * __fractunsqqti:                        Fixed-point fractional library routines.
   36260                                                              (line 1525)
   36261 * __fractunssadi:                        Fixed-point fractional library routines.
   36262                                                              (line 1550)
   36263 * __fractunssahi:                        Fixed-point fractional library routines.
   36264                                                              (line 1548)
   36265 * __fractunssaqi:                        Fixed-point fractional library routines.
   36266                                                              (line 1547)
   36267 * __fractunssasi:                        Fixed-point fractional library routines.
   36268                                                              (line 1549)
   36269 * __fractunssati:                        Fixed-point fractional library routines.
   36270                                                              (line 1551)
   36271 * __fractunssida:                        Fixed-point fractional library routines.
   36272                                                              (line 1685)
   36273 * __fractunssidq:                        Fixed-point fractional library routines.
   36274                                                              (line 1682)
   36275 * __fractunssiha:                        Fixed-point fractional library routines.
   36276                                                              (line 1683)
   36277 * __fractunssihq:                        Fixed-point fractional library routines.
   36278                                                              (line 1680)
   36279 * __fractunssiqq:                        Fixed-point fractional library routines.
   36280                                                              (line 1679)
   36281 * __fractunssisa:                        Fixed-point fractional library routines.
   36282                                                              (line 1684)
   36283 * __fractunssisq:                        Fixed-point fractional library routines.
   36284                                                              (line 1681)
   36285 * __fractunssita:                        Fixed-point fractional library routines.
   36286                                                              (line 1686)
   36287 * __fractunssiuda:                       Fixed-point fractional library routines.
   36288                                                              (line 1698)
   36289 * __fractunssiudq:                       Fixed-point fractional library routines.
   36290                                                              (line 1693)
   36291 * __fractunssiuha:                       Fixed-point fractional library routines.
   36292                                                              (line 1695)
   36293 * __fractunssiuhq:                       Fixed-point fractional library routines.
   36294                                                              (line 1689)
   36295 * __fractunssiuqq:                       Fixed-point fractional library routines.
   36296                                                              (line 1688)
   36297 * __fractunssiusa:                       Fixed-point fractional library routines.
   36298                                                              (line 1696)
   36299 * __fractunssiusq:                       Fixed-point fractional library routines.
   36300                                                              (line 1691)
   36301 * __fractunssiuta:                       Fixed-point fractional library routines.
   36302                                                              (line 1700)
   36303 * __fractunssqdi:                        Fixed-point fractional library routines.
   36304                                                              (line 1534)
   36305 * __fractunssqhi:                        Fixed-point fractional library routines.
   36306                                                              (line 1532)
   36307 * __fractunssqqi:                        Fixed-point fractional library routines.
   36308                                                              (line 1531)
   36309 * __fractunssqsi:                        Fixed-point fractional library routines.
   36310                                                              (line 1533)
   36311 * __fractunssqti:                        Fixed-point fractional library routines.
   36312                                                              (line 1535)
   36313 * __fractunstadi:                        Fixed-point fractional library routines.
   36314                                                              (line 1560)
   36315 * __fractunstahi:                        Fixed-point fractional library routines.
   36316                                                              (line 1558)
   36317 * __fractunstaqi:                        Fixed-point fractional library routines.
   36318                                                              (line 1557)
   36319 * __fractunstasi:                        Fixed-point fractional library routines.
   36320                                                              (line 1559)
   36321 * __fractunstati:                        Fixed-point fractional library routines.
   36322                                                              (line 1562)
   36323 * __fractunstida:                        Fixed-point fractional library routines.
   36324                                                              (line 1730)
   36325 * __fractunstidq:                        Fixed-point fractional library routines.
   36326                                                              (line 1727)
   36327 * __fractunstiha:                        Fixed-point fractional library routines.
   36328                                                              (line 1728)
   36329 * __fractunstihq:                        Fixed-point fractional library routines.
   36330                                                              (line 1724)
   36331 * __fractunstiqq:                        Fixed-point fractional library routines.
   36332                                                              (line 1723)
   36333 * __fractunstisa:                        Fixed-point fractional library routines.
   36334                                                              (line 1729)
   36335 * __fractunstisq:                        Fixed-point fractional library routines.
   36336                                                              (line 1725)
   36337 * __fractunstita:                        Fixed-point fractional library routines.
   36338                                                              (line 1732)
   36339 * __fractunstiuda:                       Fixed-point fractional library routines.
   36340                                                              (line 1746)
   36341 * __fractunstiudq:                       Fixed-point fractional library routines.
   36342                                                              (line 1740)
   36343 * __fractunstiuha:                       Fixed-point fractional library routines.
   36344                                                              (line 1742)
   36345 * __fractunstiuhq:                       Fixed-point fractional library routines.
   36346                                                              (line 1736)
   36347 * __fractunstiuqq:                       Fixed-point fractional library routines.
   36348                                                              (line 1734)
   36349 * __fractunstiusa:                       Fixed-point fractional library routines.
   36350                                                              (line 1744)
   36351 * __fractunstiusq:                       Fixed-point fractional library routines.
   36352                                                              (line 1738)
   36353 * __fractunstiuta:                       Fixed-point fractional library routines.
   36354                                                              (line 1748)
   36355 * __fractunsudadi:                       Fixed-point fractional library routines.
   36356                                                              (line 1622)
   36357 * __fractunsudahi:                       Fixed-point fractional library routines.
   36358                                                              (line 1618)
   36359 * __fractunsudaqi:                       Fixed-point fractional library routines.
   36360                                                              (line 1616)
   36361 * __fractunsudasi:                       Fixed-point fractional library routines.
   36362                                                              (line 1620)
   36363 * __fractunsudati:                       Fixed-point fractional library routines.
   36364                                                              (line 1624)
   36365 * __fractunsudqdi:                       Fixed-point fractional library routines.
   36366                                                              (line 1596)
   36367 * __fractunsudqhi:                       Fixed-point fractional library routines.
   36368                                                              (line 1592)
   36369 * __fractunsudqqi:                       Fixed-point fractional library routines.
   36370                                                              (line 1590)
   36371 * __fractunsudqsi:                       Fixed-point fractional library routines.
   36372                                                              (line 1594)
   36373 * __fractunsudqti:                       Fixed-point fractional library routines.
   36374                                                              (line 1598)
   36375 * __fractunsuhadi:                       Fixed-point fractional library routines.
   36376                                                              (line 1606)
   36377 * __fractunsuhahi:                       Fixed-point fractional library routines.
   36378                                                              (line 1602)
   36379 * __fractunsuhaqi:                       Fixed-point fractional library routines.
   36380                                                              (line 1600)
   36381 * __fractunsuhasi:                       Fixed-point fractional library routines.
   36382                                                              (line 1604)
   36383 * __fractunsuhati:                       Fixed-point fractional library routines.
   36384                                                              (line 1608)
   36385 * __fractunsuhqdi:                       Fixed-point fractional library routines.
   36386                                                              (line 1576)
   36387 * __fractunsuhqhi:                       Fixed-point fractional library routines.
   36388                                                              (line 1574)
   36389 * __fractunsuhqqi:                       Fixed-point fractional library routines.
   36390                                                              (line 1573)
   36391 * __fractunsuhqsi:                       Fixed-point fractional library routines.
   36392                                                              (line 1575)
   36393 * __fractunsuhqti:                       Fixed-point fractional library routines.
   36394                                                              (line 1578)
   36395 * __fractunsuqqdi:                       Fixed-point fractional library routines.
   36396                                                              (line 1570)
   36397 * __fractunsuqqhi:                       Fixed-point fractional library routines.
   36398                                                              (line 1566)
   36399 * __fractunsuqqqi:                       Fixed-point fractional library routines.
   36400                                                              (line 1564)
   36401 * __fractunsuqqsi:                       Fixed-point fractional library routines.
   36402                                                              (line 1568)
   36403 * __fractunsuqqti:                       Fixed-point fractional library routines.
   36404                                                              (line 1572)
   36405 * __fractunsusadi:                       Fixed-point fractional library routines.
   36406                                                              (line 1612)
   36407 * __fractunsusahi:                       Fixed-point fractional library routines.
   36408                                                              (line 1610)
   36409 * __fractunsusaqi:                       Fixed-point fractional library routines.
   36410                                                              (line 1609)
   36411 * __fractunsusasi:                       Fixed-point fractional library routines.
   36412                                                              (line 1611)
   36413 * __fractunsusati:                       Fixed-point fractional library routines.
   36414                                                              (line 1614)
   36415 * __fractunsusqdi:                       Fixed-point fractional library routines.
   36416                                                              (line 1586)
   36417 * __fractunsusqhi:                       Fixed-point fractional library routines.
   36418                                                              (line 1582)
   36419 * __fractunsusqqi:                       Fixed-point fractional library routines.
   36420                                                              (line 1580)
   36421 * __fractunsusqsi:                       Fixed-point fractional library routines.
   36422                                                              (line 1584)
   36423 * __fractunsusqti:                       Fixed-point fractional library routines.
   36424                                                              (line 1588)
   36425 * __fractunsutadi:                       Fixed-point fractional library routines.
   36426                                                              (line 1632)
   36427 * __fractunsutahi:                       Fixed-point fractional library routines.
   36428                                                              (line 1628)
   36429 * __fractunsutaqi:                       Fixed-point fractional library routines.
   36430                                                              (line 1626)
   36431 * __fractunsutasi:                       Fixed-point fractional library routines.
   36432                                                              (line 1630)
   36433 * __fractunsutati:                       Fixed-point fractional library routines.
   36434                                                              (line 1634)
   36435 * __fractuqqda:                          Fixed-point fractional library routines.
   36436                                                              (line  672)
   36437 * __fractuqqdf:                          Fixed-point fractional library routines.
   36438                                                              (line  695)
   36439 * __fractuqqdi:                          Fixed-point fractional library routines.
   36440                                                              (line  692)
   36441 * __fractuqqdq:                          Fixed-point fractional library routines.
   36442                                                              (line  669)
   36443 * __fractuqqha:                          Fixed-point fractional library routines.
   36444                                                              (line  670)
   36445 * __fractuqqhi:                          Fixed-point fractional library routines.
   36446                                                              (line  690)
   36447 * __fractuqqhq:                          Fixed-point fractional library routines.
   36448                                                              (line  666)
   36449 * __fractuqqqi:                          Fixed-point fractional library routines.
   36450                                                              (line  689)
   36451 * __fractuqqqq:                          Fixed-point fractional library routines.
   36452                                                              (line  665)
   36453 * __fractuqqsa:                          Fixed-point fractional library routines.
   36454                                                              (line  671)
   36455 * __fractuqqsf:                          Fixed-point fractional library routines.
   36456                                                              (line  694)
   36457 * __fractuqqsi:                          Fixed-point fractional library routines.
   36458                                                              (line  691)
   36459 * __fractuqqsq:                          Fixed-point fractional library routines.
   36460                                                              (line  667)
   36461 * __fractuqqta:                          Fixed-point fractional library routines.
   36462                                                              (line  674)
   36463 * __fractuqqti:                          Fixed-point fractional library routines.
   36464                                                              (line  693)
   36465 * __fractuqquda:                         Fixed-point fractional library routines.
   36466                                                              (line  686)
   36467 * __fractuqqudq2:                        Fixed-point fractional library routines.
   36468                                                              (line  680)
   36469 * __fractuqquha:                         Fixed-point fractional library routines.
   36470                                                              (line  682)
   36471 * __fractuqquhq2:                        Fixed-point fractional library routines.
   36472                                                              (line  676)
   36473 * __fractuqqusa:                         Fixed-point fractional library routines.
   36474                                                              (line  684)
   36475 * __fractuqqusq2:                        Fixed-point fractional library routines.
   36476                                                              (line  678)
   36477 * __fractuqquta:                         Fixed-point fractional library routines.
   36478                                                              (line  688)
   36479 * __fractusada:                          Fixed-point fractional library routines.
   36480                                                              (line  829)
   36481 * __fractusadf:                          Fixed-point fractional library routines.
   36482                                                              (line  850)
   36483 * __fractusadi:                          Fixed-point fractional library routines.
   36484                                                              (line  847)
   36485 * __fractusadq:                          Fixed-point fractional library routines.
   36486                                                              (line  826)
   36487 * __fractusaha:                          Fixed-point fractional library routines.
   36488                                                              (line  827)
   36489 * __fractusahi:                          Fixed-point fractional library routines.
   36490                                                              (line  845)
   36491 * __fractusahq:                          Fixed-point fractional library routines.
   36492                                                              (line  824)
   36493 * __fractusaqi:                          Fixed-point fractional library routines.
   36494                                                              (line  844)
   36495 * __fractusaqq:                          Fixed-point fractional library routines.
   36496                                                              (line  823)
   36497 * __fractusasa:                          Fixed-point fractional library routines.
   36498                                                              (line  828)
   36499 * __fractusasf:                          Fixed-point fractional library routines.
   36500                                                              (line  849)
   36501 * __fractusasi:                          Fixed-point fractional library routines.
   36502                                                              (line  846)
   36503 * __fractusasq:                          Fixed-point fractional library routines.
   36504                                                              (line  825)
   36505 * __fractusata:                          Fixed-point fractional library routines.
   36506                                                              (line  830)
   36507 * __fractusati:                          Fixed-point fractional library routines.
   36508                                                              (line  848)
   36509 * __fractusauda2:                        Fixed-point fractional library routines.
   36510                                                              (line  841)
   36511 * __fractusaudq:                         Fixed-point fractional library routines.
   36512                                                              (line  837)
   36513 * __fractusauha2:                        Fixed-point fractional library routines.
   36514                                                              (line  839)
   36515 * __fractusauhq:                         Fixed-point fractional library routines.
   36516                                                              (line  833)
   36517 * __fractusauqq:                         Fixed-point fractional library routines.
   36518                                                              (line  832)
   36519 * __fractusausq:                         Fixed-point fractional library routines.
   36520                                                              (line  835)
   36521 * __fractusauta2:                        Fixed-point fractional library routines.
   36522                                                              (line  843)
   36523 * __fractusqda:                          Fixed-point fractional library routines.
   36524                                                              (line  731)
   36525 * __fractusqdf:                          Fixed-point fractional library routines.
   36526                                                              (line  754)
   36527 * __fractusqdi:                          Fixed-point fractional library routines.
   36528                                                              (line  751)
   36529 * __fractusqdq:                          Fixed-point fractional library routines.
   36530                                                              (line  728)
   36531 * __fractusqha:                          Fixed-point fractional library routines.
   36532                                                              (line  729)
   36533 * __fractusqhi:                          Fixed-point fractional library routines.
   36534                                                              (line  749)
   36535 * __fractusqhq:                          Fixed-point fractional library routines.
   36536                                                              (line  725)
   36537 * __fractusqqi:                          Fixed-point fractional library routines.
   36538                                                              (line  748)
   36539 * __fractusqqq:                          Fixed-point fractional library routines.
   36540                                                              (line  724)
   36541 * __fractusqsa:                          Fixed-point fractional library routines.
   36542                                                              (line  730)
   36543 * __fractusqsf:                          Fixed-point fractional library routines.
   36544                                                              (line  753)
   36545 * __fractusqsi:                          Fixed-point fractional library routines.
   36546                                                              (line  750)
   36547 * __fractusqsq:                          Fixed-point fractional library routines.
   36548                                                              (line  726)
   36549 * __fractusqta:                          Fixed-point fractional library routines.
   36550                                                              (line  733)
   36551 * __fractusqti:                          Fixed-point fractional library routines.
   36552                                                              (line  752)
   36553 * __fractusquda:                         Fixed-point fractional library routines.
   36554                                                              (line  745)
   36555 * __fractusqudq2:                        Fixed-point fractional library routines.
   36556                                                              (line  739)
   36557 * __fractusquha:                         Fixed-point fractional library routines.
   36558                                                              (line  741)
   36559 * __fractusquhq2:                        Fixed-point fractional library routines.
   36560                                                              (line  737)
   36561 * __fractusquqq2:                        Fixed-point fractional library routines.
   36562                                                              (line  735)
   36563 * __fractusqusa:                         Fixed-point fractional library routines.
   36564                                                              (line  743)
   36565 * __fractusquta:                         Fixed-point fractional library routines.
   36566                                                              (line  747)
   36567 * __fractutada:                          Fixed-point fractional library routines.
   36568                                                              (line  893)
   36569 * __fractutadf:                          Fixed-point fractional library routines.
   36570                                                              (line  918)
   36571 * __fractutadi:                          Fixed-point fractional library routines.
   36572                                                              (line  914)
   36573 * __fractutadq:                          Fixed-point fractional library routines.
   36574                                                              (line  888)
   36575 * __fractutaha:                          Fixed-point fractional library routines.
   36576                                                              (line  890)
   36577 * __fractutahi:                          Fixed-point fractional library routines.
   36578                                                              (line  912)
   36579 * __fractutahq:                          Fixed-point fractional library routines.
   36580                                                              (line  884)
   36581 * __fractutaqi:                          Fixed-point fractional library routines.
   36582                                                              (line  911)
   36583 * __fractutaqq:                          Fixed-point fractional library routines.
   36584                                                              (line  883)
   36585 * __fractutasa:                          Fixed-point fractional library routines.
   36586                                                              (line  891)
   36587 * __fractutasf:                          Fixed-point fractional library routines.
   36588                                                              (line  917)
   36589 * __fractutasi:                          Fixed-point fractional library routines.
   36590                                                              (line  913)
   36591 * __fractutasq:                          Fixed-point fractional library routines.
   36592                                                              (line  886)
   36593 * __fractutata:                          Fixed-point fractional library routines.
   36594                                                              (line  895)
   36595 * __fractutati:                          Fixed-point fractional library routines.
   36596                                                              (line  916)
   36597 * __fractutauda2:                        Fixed-point fractional library routines.
   36598                                                              (line  909)
   36599 * __fractutaudq:                         Fixed-point fractional library routines.
   36600                                                              (line  903)
   36601 * __fractutauha2:                        Fixed-point fractional library routines.
   36602                                                              (line  905)
   36603 * __fractutauhq:                         Fixed-point fractional library routines.
   36604                                                              (line  899)
   36605 * __fractutauqq:                         Fixed-point fractional library routines.
   36606                                                              (line  897)
   36607 * __fractutausa2:                        Fixed-point fractional library routines.
   36608                                                              (line  907)
   36609 * __fractutausq:                         Fixed-point fractional library routines.
   36610                                                              (line  901)
   36611 * __gedf2:                               Soft float library routines.
   36612                                                              (line  206)
   36613 * __gesf2:                               Soft float library routines.
   36614                                                              (line  205)
   36615 * __getf2:                               Soft float library routines.
   36616                                                              (line  207)
   36617 * __gtdf2:                               Soft float library routines.
   36618                                                              (line  224)
   36619 * __gtsf2:                               Soft float library routines.
   36620                                                              (line  223)
   36621 * __gttf2:                               Soft float library routines.
   36622                                                              (line  225)
   36623 * __ledf2:                               Soft float library routines.
   36624                                                              (line  218)
   36625 * __lesf2:                               Soft float library routines.
   36626                                                              (line  217)
   36627 * __letf2:                               Soft float library routines.
   36628                                                              (line  219)
   36629 * __lshrdi3:                             Integer library routines.
   36630                                                              (line   31)
   36631 * __lshrsi3:                             Integer library routines.
   36632                                                              (line   30)
   36633 * __lshrti3:                             Integer library routines.
   36634                                                              (line   32)
   36635 * __lshruda3:                            Fixed-point fractional library routines.
   36636                                                              (line  390)
   36637 * __lshrudq3:                            Fixed-point fractional library routines.
   36638                                                              (line  384)
   36639 * __lshruha3:                            Fixed-point fractional library routines.
   36640                                                              (line  386)
   36641 * __lshruhq3:                            Fixed-point fractional library routines.
   36642                                                              (line  380)
   36643 * __lshruqq3:                            Fixed-point fractional library routines.
   36644                                                              (line  378)
   36645 * __lshrusa3:                            Fixed-point fractional library routines.
   36646                                                              (line  388)
   36647 * __lshrusq3:                            Fixed-point fractional library routines.
   36648                                                              (line  382)
   36649 * __lshruta3:                            Fixed-point fractional library routines.
   36650                                                              (line  392)
   36651 * __ltdf2:                               Soft float library routines.
   36652                                                              (line  212)
   36653 * __ltsf2:                               Soft float library routines.
   36654                                                              (line  211)
   36655 * __lttf2:                               Soft float library routines.
   36656                                                              (line  213)
   36657 * __main:                                Collect2.           (line   15)
   36658 * __moddi3:                              Integer library routines.
   36659                                                              (line   37)
   36660 * __modsi3:                              Integer library routines.
   36661                                                              (line   36)
   36662 * __modti3:                              Integer library routines.
   36663                                                              (line   38)
   36664 * __mulda3:                              Fixed-point fractional library routines.
   36665                                                              (line  171)
   36666 * __muldc3:                              Soft float library routines.
   36667                                                              (line  241)
   36668 * __muldf3:                              Soft float library routines.
   36669                                                              (line   40)
   36670 * __muldi3:                              Integer library routines.
   36671                                                              (line   43)
   36672 * __muldq3:                              Fixed-point fractional library routines.
   36673                                                              (line  159)
   36674 * __mulha3:                              Fixed-point fractional library routines.
   36675                                                              (line  169)
   36676 * __mulhq3:                              Fixed-point fractional library routines.
   36677                                                              (line  156)
   36678 * __mulqq3:                              Fixed-point fractional library routines.
   36679                                                              (line  155)
   36680 * __mulsa3:                              Fixed-point fractional library routines.
   36681                                                              (line  170)
   36682 * __mulsc3:                              Soft float library routines.
   36683                                                              (line  239)
   36684 * __mulsf3:                              Soft float library routines.
   36685                                                              (line   39)
   36686 * __mulsi3:                              Integer library routines.
   36687                                                              (line   42)
   36688 * __mulsq3:                              Fixed-point fractional library routines.
   36689                                                              (line  157)
   36690 * __multa3:                              Fixed-point fractional library routines.
   36691                                                              (line  173)
   36692 * __multc3:                              Soft float library routines.
   36693                                                              (line  243)
   36694 * __multf3:                              Soft float library routines.
   36695                                                              (line   42)
   36696 * __multi3:                              Integer library routines.
   36697                                                              (line   44)
   36698 * __muluda3:                             Fixed-point fractional library routines.
   36699                                                              (line  179)
   36700 * __muludq3:                             Fixed-point fractional library routines.
   36701                                                              (line  167)
   36702 * __muluha3:                             Fixed-point fractional library routines.
   36703                                                              (line  175)
   36704 * __muluhq3:                             Fixed-point fractional library routines.
   36705                                                              (line  163)
   36706 * __muluqq3:                             Fixed-point fractional library routines.
   36707                                                              (line  161)
   36708 * __mulusa3:                             Fixed-point fractional library routines.
   36709                                                              (line  177)
   36710 * __mulusq3:                             Fixed-point fractional library routines.
   36711                                                              (line  165)
   36712 * __muluta3:                             Fixed-point fractional library routines.
   36713                                                              (line  181)
   36714 * __mulvdi3:                             Integer library routines.
   36715                                                              (line  115)
   36716 * __mulvsi3:                             Integer library routines.
   36717                                                              (line  114)
   36718 * __mulxc3:                              Soft float library routines.
   36719                                                              (line  245)
   36720 * __mulxf3:                              Soft float library routines.
   36721                                                              (line   44)
   36722 * __nedf2:                               Soft float library routines.
   36723                                                              (line  200)
   36724 * __negda2:                              Fixed-point fractional library routines.
   36725                                                              (line  299)
   36726 * __negdf2:                              Soft float library routines.
   36727                                                              (line   56)
   36728 * __negdi2:                              Integer library routines.
   36729                                                              (line   47)
   36730 * __negdq2:                              Fixed-point fractional library routines.
   36731                                                              (line  289)
   36732 * __negha2:                              Fixed-point fractional library routines.
   36733                                                              (line  297)
   36734 * __neghq2:                              Fixed-point fractional library routines.
   36735                                                              (line  287)
   36736 * __negqq2:                              Fixed-point fractional library routines.
   36737                                                              (line  286)
   36738 * __negsa2:                              Fixed-point fractional library routines.
   36739                                                              (line  298)
   36740 * __negsf2:                              Soft float library routines.
   36741                                                              (line   55)
   36742 * __negsq2:                              Fixed-point fractional library routines.
   36743                                                              (line  288)
   36744 * __negta2:                              Fixed-point fractional library routines.
   36745                                                              (line  300)
   36746 * __negtf2:                              Soft float library routines.
   36747                                                              (line   57)
   36748 * __negti2:                              Integer library routines.
   36749                                                              (line   48)
   36750 * __neguda2:                             Fixed-point fractional library routines.
   36751                                                              (line  305)
   36752 * __negudq2:                             Fixed-point fractional library routines.
   36753                                                              (line  296)
   36754 * __neguha2:                             Fixed-point fractional library routines.
   36755                                                              (line  302)
   36756 * __neguhq2:                             Fixed-point fractional library routines.
   36757                                                              (line  292)
   36758 * __neguqq2:                             Fixed-point fractional library routines.
   36759                                                              (line  291)
   36760 * __negusa2:                             Fixed-point fractional library routines.
   36761                                                              (line  303)
   36762 * __negusq2:                             Fixed-point fractional library routines.
   36763                                                              (line  294)
   36764 * __neguta2:                             Fixed-point fractional library routines.
   36765                                                              (line  307)
   36766 * __negvdi2:                             Integer library routines.
   36767                                                              (line  119)
   36768 * __negvsi2:                             Integer library routines.
   36769                                                              (line  118)
   36770 * __negxf2:                              Soft float library routines.
   36771                                                              (line   58)
   36772 * __nesf2:                               Soft float library routines.
   36773                                                              (line  199)
   36774 * __netf2:                               Soft float library routines.
   36775                                                              (line  201)
   36776 * __paritydi2:                           Integer library routines.
   36777                                                              (line  151)
   36778 * __paritysi2:                           Integer library routines.
   36779                                                              (line  150)
   36780 * __parityti2:                           Integer library routines.
   36781                                                              (line  152)
   36782 * __popcountdi2:                         Integer library routines.
   36783                                                              (line  157)
   36784 * __popcountsi2:                         Integer library routines.
   36785                                                              (line  156)
   36786 * __popcountti2:                         Integer library routines.
   36787                                                              (line  158)
   36788 * __powidf2:                             Soft float library routines.
   36789                                                              (line  233)
   36790 * __powisf2:                             Soft float library routines.
   36791                                                              (line  232)
   36792 * __powitf2:                             Soft float library routines.
   36793                                                              (line  234)
   36794 * __powixf2:                             Soft float library routines.
   36795                                                              (line  235)
   36796 * __satfractdadq:                        Fixed-point fractional library routines.
   36797                                                              (line 1153)
   36798 * __satfractdaha2:                       Fixed-point fractional library routines.
   36799                                                              (line 1154)
   36800 * __satfractdahq:                        Fixed-point fractional library routines.
   36801                                                              (line 1151)
   36802 * __satfractdaqq:                        Fixed-point fractional library routines.
   36803                                                              (line 1150)
   36804 * __satfractdasa2:                       Fixed-point fractional library routines.
   36805                                                              (line 1155)
   36806 * __satfractdasq:                        Fixed-point fractional library routines.
   36807                                                              (line 1152)
   36808 * __satfractdata2:                       Fixed-point fractional library routines.
   36809                                                              (line 1156)
   36810 * __satfractdauda:                       Fixed-point fractional library routines.
   36811                                                              (line 1166)
   36812 * __satfractdaudq:                       Fixed-point fractional library routines.
   36813                                                              (line 1162)
   36814 * __satfractdauha:                       Fixed-point fractional library routines.
   36815                                                              (line 1164)
   36816 * __satfractdauhq:                       Fixed-point fractional library routines.
   36817                                                              (line 1159)
   36818 * __satfractdauqq:                       Fixed-point fractional library routines.
   36819                                                              (line 1158)
   36820 * __satfractdausa:                       Fixed-point fractional library routines.
   36821                                                              (line 1165)
   36822 * __satfractdausq:                       Fixed-point fractional library routines.
   36823                                                              (line 1160)
   36824 * __satfractdauta:                       Fixed-point fractional library routines.
   36825                                                              (line 1168)
   36826 * __satfractdfda:                        Fixed-point fractional library routines.
   36827                                                              (line 1506)
   36828 * __satfractdfdq:                        Fixed-point fractional library routines.
   36829                                                              (line 1503)
   36830 * __satfractdfha:                        Fixed-point fractional library routines.
   36831                                                              (line 1504)
   36832 * __satfractdfhq:                        Fixed-point fractional library routines.
   36833                                                              (line 1501)
   36834 * __satfractdfqq:                        Fixed-point fractional library routines.
   36835                                                              (line 1500)
   36836 * __satfractdfsa:                        Fixed-point fractional library routines.
   36837                                                              (line 1505)
   36838 * __satfractdfsq:                        Fixed-point fractional library routines.
   36839                                                              (line 1502)
   36840 * __satfractdfta:                        Fixed-point fractional library routines.
   36841                                                              (line 1507)
   36842 * __satfractdfuda:                       Fixed-point fractional library routines.
   36843                                                              (line 1515)
   36844 * __satfractdfudq:                       Fixed-point fractional library routines.
   36845                                                              (line 1512)
   36846 * __satfractdfuha:                       Fixed-point fractional library routines.
   36847                                                              (line 1513)
   36848 * __satfractdfuhq:                       Fixed-point fractional library routines.
   36849                                                              (line 1509)
   36850 * __satfractdfuqq:                       Fixed-point fractional library routines.
   36851                                                              (line 1508)
   36852 * __satfractdfusa:                       Fixed-point fractional library routines.
   36853                                                              (line 1514)
   36854 * __satfractdfusq:                       Fixed-point fractional library routines.
   36855                                                              (line 1510)
   36856 * __satfractdfuta:                       Fixed-point fractional library routines.
   36857                                                              (line 1517)
   36858 * __satfractdida:                        Fixed-point fractional library routines.
   36859                                                              (line 1456)
   36860 * __satfractdidq:                        Fixed-point fractional library routines.
   36861                                                              (line 1453)
   36862 * __satfractdiha:                        Fixed-point fractional library routines.
   36863                                                              (line 1454)
   36864 * __satfractdihq:                        Fixed-point fractional library routines.
   36865                                                              (line 1451)
   36866 * __satfractdiqq:                        Fixed-point fractional library routines.
   36867                                                              (line 1450)
   36868 * __satfractdisa:                        Fixed-point fractional library routines.
   36869                                                              (line 1455)
   36870 * __satfractdisq:                        Fixed-point fractional library routines.
   36871                                                              (line 1452)
   36872 * __satfractdita:                        Fixed-point fractional library routines.
   36873                                                              (line 1457)
   36874 * __satfractdiuda:                       Fixed-point fractional library routines.
   36875                                                              (line 1464)
   36876 * __satfractdiudq:                       Fixed-point fractional library routines.
   36877                                                              (line 1461)
   36878 * __satfractdiuha:                       Fixed-point fractional library routines.
   36879                                                              (line 1462)
   36880 * __satfractdiuhq:                       Fixed-point fractional library routines.
   36881                                                              (line 1459)
   36882 * __satfractdiuqq:                       Fixed-point fractional library routines.
   36883                                                              (line 1458)
   36884 * __satfractdiusa:                       Fixed-point fractional library routines.
   36885                                                              (line 1463)
   36886 * __satfractdiusq:                       Fixed-point fractional library routines.
   36887                                                              (line 1460)
   36888 * __satfractdiuta:                       Fixed-point fractional library routines.
   36889                                                              (line 1465)
   36890 * __satfractdqda:                        Fixed-point fractional library routines.
   36891                                                              (line 1098)
   36892 * __satfractdqha:                        Fixed-point fractional library routines.
   36893                                                              (line 1096)
   36894 * __satfractdqhq2:                       Fixed-point fractional library routines.
   36895                                                              (line 1094)
   36896 * __satfractdqqq2:                       Fixed-point fractional library routines.
   36897                                                              (line 1093)
   36898 * __satfractdqsa:                        Fixed-point fractional library routines.
   36899                                                              (line 1097)
   36900 * __satfractdqsq2:                       Fixed-point fractional library routines.
   36901                                                              (line 1095)
   36902 * __satfractdqta:                        Fixed-point fractional library routines.
   36903                                                              (line 1099)
   36904 * __satfractdquda:                       Fixed-point fractional library routines.
   36905                                                              (line 1111)
   36906 * __satfractdqudq:                       Fixed-point fractional library routines.
   36907                                                              (line 1106)
   36908 * __satfractdquha:                       Fixed-point fractional library routines.
   36909                                                              (line 1108)
   36910 * __satfractdquhq:                       Fixed-point fractional library routines.
   36911                                                              (line 1102)
   36912 * __satfractdquqq:                       Fixed-point fractional library routines.
   36913                                                              (line 1101)
   36914 * __satfractdqusa:                       Fixed-point fractional library routines.
   36915                                                              (line 1109)
   36916 * __satfractdqusq:                       Fixed-point fractional library routines.
   36917                                                              (line 1104)
   36918 * __satfractdquta:                       Fixed-point fractional library routines.
   36919                                                              (line 1113)
   36920 * __satfracthada2:                       Fixed-point fractional library routines.
   36921                                                              (line 1119)
   36922 * __satfracthadq:                        Fixed-point fractional library routines.
   36923                                                              (line 1117)
   36924 * __satfracthahq:                        Fixed-point fractional library routines.
   36925                                                              (line 1115)
   36926 * __satfracthaqq:                        Fixed-point fractional library routines.
   36927                                                              (line 1114)
   36928 * __satfracthasa2:                       Fixed-point fractional library routines.
   36929                                                              (line 1118)
   36930 * __satfracthasq:                        Fixed-point fractional library routines.
   36931                                                              (line 1116)
   36932 * __satfracthata2:                       Fixed-point fractional library routines.
   36933                                                              (line 1120)
   36934 * __satfracthauda:                       Fixed-point fractional library routines.
   36935                                                              (line 1132)
   36936 * __satfracthaudq:                       Fixed-point fractional library routines.
   36937                                                              (line 1127)
   36938 * __satfracthauha:                       Fixed-point fractional library routines.
   36939                                                              (line 1129)
   36940 * __satfracthauhq:                       Fixed-point fractional library routines.
   36941                                                              (line 1123)
   36942 * __satfracthauqq:                       Fixed-point fractional library routines.
   36943                                                              (line 1122)
   36944 * __satfracthausa:                       Fixed-point fractional library routines.
   36945                                                              (line 1130)
   36946 * __satfracthausq:                       Fixed-point fractional library routines.
   36947                                                              (line 1125)
   36948 * __satfracthauta:                       Fixed-point fractional library routines.
   36949                                                              (line 1134)
   36950 * __satfracthida:                        Fixed-point fractional library routines.
   36951                                                              (line 1424)
   36952 * __satfracthidq:                        Fixed-point fractional library routines.
   36953                                                              (line 1421)
   36954 * __satfracthiha:                        Fixed-point fractional library routines.
   36955                                                              (line 1422)
   36956 * __satfracthihq:                        Fixed-point fractional library routines.
   36957                                                              (line 1419)
   36958 * __satfracthiqq:                        Fixed-point fractional library routines.
   36959                                                              (line 1418)
   36960 * __satfracthisa:                        Fixed-point fractional library routines.
   36961                                                              (line 1423)
   36962 * __satfracthisq:                        Fixed-point fractional library routines.
   36963                                                              (line 1420)
   36964 * __satfracthita:                        Fixed-point fractional library routines.
   36965                                                              (line 1425)
   36966 * __satfracthiuda:                       Fixed-point fractional library routines.
   36967                                                              (line 1432)
   36968 * __satfracthiudq:                       Fixed-point fractional library routines.
   36969                                                              (line 1429)
   36970 * __satfracthiuha:                       Fixed-point fractional library routines.
   36971                                                              (line 1430)
   36972 * __satfracthiuhq:                       Fixed-point fractional library routines.
   36973                                                              (line 1427)
   36974 * __satfracthiuqq:                       Fixed-point fractional library routines.
   36975                                                              (line 1426)
   36976 * __satfracthiusa:                       Fixed-point fractional library routines.
   36977                                                              (line 1431)
   36978 * __satfracthiusq:                       Fixed-point fractional library routines.
   36979                                                              (line 1428)
   36980 * __satfracthiuta:                       Fixed-point fractional library routines.
   36981                                                              (line 1433)
   36982 * __satfracthqda:                        Fixed-point fractional library routines.
   36983                                                              (line 1064)
   36984 * __satfracthqdq2:                       Fixed-point fractional library routines.
   36985                                                              (line 1061)
   36986 * __satfracthqha:                        Fixed-point fractional library routines.
   36987                                                              (line 1062)
   36988 * __satfracthqqq2:                       Fixed-point fractional library routines.
   36989                                                              (line 1059)
   36990 * __satfracthqsa:                        Fixed-point fractional library routines.
   36991                                                              (line 1063)
   36992 * __satfracthqsq2:                       Fixed-point fractional library routines.
   36993                                                              (line 1060)
   36994 * __satfracthqta:                        Fixed-point fractional library routines.
   36995                                                              (line 1065)
   36996 * __satfracthquda:                       Fixed-point fractional library routines.
   36997                                                              (line 1072)
   36998 * __satfracthqudq:                       Fixed-point fractional library routines.
   36999                                                              (line 1069)
   37000 * __satfracthquha:                       Fixed-point fractional library routines.
   37001                                                              (line 1070)
   37002 * __satfracthquhq:                       Fixed-point fractional library routines.
   37003                                                              (line 1067)
   37004 * __satfracthquqq:                       Fixed-point fractional library routines.
   37005                                                              (line 1066)
   37006 * __satfracthqusa:                       Fixed-point fractional library routines.
   37007                                                              (line 1071)
   37008 * __satfracthqusq:                       Fixed-point fractional library routines.
   37009                                                              (line 1068)
   37010 * __satfracthquta:                       Fixed-point fractional library routines.
   37011                                                              (line 1073)
   37012 * __satfractqida:                        Fixed-point fractional library routines.
   37013                                                              (line 1402)
   37014 * __satfractqidq:                        Fixed-point fractional library routines.
   37015                                                              (line 1399)
   37016 * __satfractqiha:                        Fixed-point fractional library routines.
   37017                                                              (line 1400)
   37018 * __satfractqihq:                        Fixed-point fractional library routines.
   37019                                                              (line 1397)
   37020 * __satfractqiqq:                        Fixed-point fractional library routines.
   37021                                                              (line 1396)
   37022 * __satfractqisa:                        Fixed-point fractional library routines.
   37023                                                              (line 1401)
   37024 * __satfractqisq:                        Fixed-point fractional library routines.
   37025                                                              (line 1398)
   37026 * __satfractqita:                        Fixed-point fractional library routines.
   37027                                                              (line 1403)
   37028 * __satfractqiuda:                       Fixed-point fractional library routines.
   37029                                                              (line 1415)
   37030 * __satfractqiudq:                       Fixed-point fractional library routines.
   37031                                                              (line 1410)
   37032 * __satfractqiuha:                       Fixed-point fractional library routines.
   37033                                                              (line 1412)
   37034 * __satfractqiuhq:                       Fixed-point fractional library routines.
   37035                                                              (line 1406)
   37036 * __satfractqiuqq:                       Fixed-point fractional library routines.
   37037                                                              (line 1405)
   37038 * __satfractqiusa:                       Fixed-point fractional library routines.
   37039                                                              (line 1413)
   37040 * __satfractqiusq:                       Fixed-point fractional library routines.
   37041                                                              (line 1408)
   37042 * __satfractqiuta:                       Fixed-point fractional library routines.
   37043                                                              (line 1417)
   37044 * __satfractqqda:                        Fixed-point fractional library routines.
   37045                                                              (line 1043)
   37046 * __satfractqqdq2:                       Fixed-point fractional library routines.
   37047                                                              (line 1040)
   37048 * __satfractqqha:                        Fixed-point fractional library routines.
   37049                                                              (line 1041)
   37050 * __satfractqqhq2:                       Fixed-point fractional library routines.
   37051                                                              (line 1038)
   37052 * __satfractqqsa:                        Fixed-point fractional library routines.
   37053                                                              (line 1042)
   37054 * __satfractqqsq2:                       Fixed-point fractional library routines.
   37055                                                              (line 1039)
   37056 * __satfractqqta:                        Fixed-point fractional library routines.
   37057                                                              (line 1044)
   37058 * __satfractqquda:                       Fixed-point fractional library routines.
   37059                                                              (line 1056)
   37060 * __satfractqqudq:                       Fixed-point fractional library routines.
   37061                                                              (line 1051)
   37062 * __satfractqquha:                       Fixed-point fractional library routines.
   37063                                                              (line 1053)
   37064 * __satfractqquhq:                       Fixed-point fractional library routines.
   37065                                                              (line 1047)
   37066 * __satfractqquqq:                       Fixed-point fractional library routines.
   37067                                                              (line 1046)
   37068 * __satfractqqusa:                       Fixed-point fractional library routines.
   37069                                                              (line 1054)
   37070 * __satfractqqusq:                       Fixed-point fractional library routines.
   37071                                                              (line 1049)
   37072 * __satfractqquta:                       Fixed-point fractional library routines.
   37073                                                              (line 1058)
   37074 * __satfractsada2:                       Fixed-point fractional library routines.
   37075                                                              (line 1140)
   37076 * __satfractsadq:                        Fixed-point fractional library routines.
   37077                                                              (line 1138)
   37078 * __satfractsaha2:                       Fixed-point fractional library routines.
   37079                                                              (line 1139)
   37080 * __satfractsahq:                        Fixed-point fractional library routines.
   37081                                                              (line 1136)
   37082 * __satfractsaqq:                        Fixed-point fractional library routines.
   37083                                                              (line 1135)
   37084 * __satfractsasq:                        Fixed-point fractional library routines.
   37085                                                              (line 1137)
   37086 * __satfractsata2:                       Fixed-point fractional library routines.
   37087                                                              (line 1141)
   37088 * __satfractsauda:                       Fixed-point fractional library routines.
   37089                                                              (line 1148)
   37090 * __satfractsaudq:                       Fixed-point fractional library routines.
   37091                                                              (line 1145)
   37092 * __satfractsauha:                       Fixed-point fractional library routines.
   37093                                                              (line 1146)
   37094 * __satfractsauhq:                       Fixed-point fractional library routines.
   37095                                                              (line 1143)
   37096 * __satfractsauqq:                       Fixed-point fractional library routines.
   37097                                                              (line 1142)
   37098 * __satfractsausa:                       Fixed-point fractional library routines.
   37099                                                              (line 1147)
   37100 * __satfractsausq:                       Fixed-point fractional library routines.
   37101                                                              (line 1144)
   37102 * __satfractsauta:                       Fixed-point fractional library routines.
   37103                                                              (line 1149)
   37104 * __satfractsfda:                        Fixed-point fractional library routines.
   37105                                                              (line 1490)
   37106 * __satfractsfdq:                        Fixed-point fractional library routines.
   37107                                                              (line 1487)
   37108 * __satfractsfha:                        Fixed-point fractional library routines.
   37109                                                              (line 1488)
   37110 * __satfractsfhq:                        Fixed-point fractional library routines.
   37111                                                              (line 1485)
   37112 * __satfractsfqq:                        Fixed-point fractional library routines.
   37113                                                              (line 1484)
   37114 * __satfractsfsa:                        Fixed-point fractional library routines.
   37115                                                              (line 1489)
   37116 * __satfractsfsq:                        Fixed-point fractional library routines.
   37117                                                              (line 1486)
   37118 * __satfractsfta:                        Fixed-point fractional library routines.
   37119                                                              (line 1491)
   37120 * __satfractsfuda:                       Fixed-point fractional library routines.
   37121                                                              (line 1498)
   37122 * __satfractsfudq:                       Fixed-point fractional library routines.
   37123                                                              (line 1495)
   37124 * __satfractsfuha:                       Fixed-point fractional library routines.
   37125                                                              (line 1496)
   37126 * __satfractsfuhq:                       Fixed-point fractional library routines.
   37127                                                              (line 1493)
   37128 * __satfractsfuqq:                       Fixed-point fractional library routines.
   37129                                                              (line 1492)
   37130 * __satfractsfusa:                       Fixed-point fractional library routines.
   37131                                                              (line 1497)
   37132 * __satfractsfusq:                       Fixed-point fractional library routines.
   37133                                                              (line 1494)
   37134 * __satfractsfuta:                       Fixed-point fractional library routines.
   37135                                                              (line 1499)
   37136 * __satfractsida:                        Fixed-point fractional library routines.
   37137                                                              (line 1440)
   37138 * __satfractsidq:                        Fixed-point fractional library routines.
   37139                                                              (line 1437)
   37140 * __satfractsiha:                        Fixed-point fractional library routines.
   37141                                                              (line 1438)
   37142 * __satfractsihq:                        Fixed-point fractional library routines.
   37143                                                              (line 1435)
   37144 * __satfractsiqq:                        Fixed-point fractional library routines.
   37145                                                              (line 1434)
   37146 * __satfractsisa:                        Fixed-point fractional library routines.
   37147                                                              (line 1439)
   37148 * __satfractsisq:                        Fixed-point fractional library routines.
   37149                                                              (line 1436)
   37150 * __satfractsita:                        Fixed-point fractional library routines.
   37151                                                              (line 1441)
   37152 * __satfractsiuda:                       Fixed-point fractional library routines.
   37153                                                              (line 1448)
   37154 * __satfractsiudq:                       Fixed-point fractional library routines.
   37155                                                              (line 1445)
   37156 * __satfractsiuha:                       Fixed-point fractional library routines.
   37157                                                              (line 1446)
   37158 * __satfractsiuhq:                       Fixed-point fractional library routines.
   37159                                                              (line 1443)
   37160 * __satfractsiuqq:                       Fixed-point fractional library routines.
   37161                                                              (line 1442)
   37162 * __satfractsiusa:                       Fixed-point fractional library routines.
   37163                                                              (line 1447)
   37164 * __satfractsiusq:                       Fixed-point fractional library routines.
   37165                                                              (line 1444)
   37166 * __satfractsiuta:                       Fixed-point fractional library routines.
   37167                                                              (line 1449)
   37168 * __satfractsqda:                        Fixed-point fractional library routines.
   37169                                                              (line 1079)
   37170 * __satfractsqdq2:                       Fixed-point fractional library routines.
   37171                                                              (line 1076)
   37172 * __satfractsqha:                        Fixed-point fractional library routines.
   37173                                                              (line 1077)
   37174 * __satfractsqhq2:                       Fixed-point fractional library routines.
   37175                                                              (line 1075)
   37176 * __satfractsqqq2:                       Fixed-point fractional library routines.
   37177                                                              (line 1074)
   37178 * __satfractsqsa:                        Fixed-point fractional library routines.
   37179                                                              (line 1078)
   37180 * __satfractsqta:                        Fixed-point fractional library routines.
   37181                                                              (line 1080)
   37182 * __satfractsquda:                       Fixed-point fractional library routines.
   37183                                                              (line 1090)
   37184 * __satfractsqudq:                       Fixed-point fractional library routines.
   37185                                                              (line 1086)
   37186 * __satfractsquha:                       Fixed-point fractional library routines.
   37187                                                              (line 1088)
   37188 * __satfractsquhq:                       Fixed-point fractional library routines.
   37189                                                              (line 1083)
   37190 * __satfractsquqq:                       Fixed-point fractional library routines.
   37191                                                              (line 1082)
   37192 * __satfractsqusa:                       Fixed-point fractional library routines.
   37193                                                              (line 1089)
   37194 * __satfractsqusq:                       Fixed-point fractional library routines.
   37195                                                              (line 1084)
   37196 * __satfractsquta:                       Fixed-point fractional library routines.
   37197                                                              (line 1092)
   37198 * __satfracttada2:                       Fixed-point fractional library routines.
   37199                                                              (line 1175)
   37200 * __satfracttadq:                        Fixed-point fractional library routines.
   37201                                                              (line 1172)
   37202 * __satfracttaha2:                       Fixed-point fractional library routines.
   37203                                                              (line 1173)
   37204 * __satfracttahq:                        Fixed-point fractional library routines.
   37205                                                              (line 1170)
   37206 * __satfracttaqq:                        Fixed-point fractional library routines.
   37207                                                              (line 1169)
   37208 * __satfracttasa2:                       Fixed-point fractional library routines.
   37209                                                              (line 1174)
   37210 * __satfracttasq:                        Fixed-point fractional library routines.
   37211                                                              (line 1171)
   37212 * __satfracttauda:                       Fixed-point fractional library routines.
   37213                                                              (line 1187)
   37214 * __satfracttaudq:                       Fixed-point fractional library routines.
   37215                                                              (line 1182)
   37216 * __satfracttauha:                       Fixed-point fractional library routines.
   37217                                                              (line 1184)
   37218 * __satfracttauhq:                       Fixed-point fractional library routines.
   37219                                                              (line 1178)
   37220 * __satfracttauqq:                       Fixed-point fractional library routines.
   37221                                                              (line 1177)
   37222 * __satfracttausa:                       Fixed-point fractional library routines.
   37223                                                              (line 1185)
   37224 * __satfracttausq:                       Fixed-point fractional library routines.
   37225                                                              (line 1180)
   37226 * __satfracttauta:                       Fixed-point fractional library routines.
   37227                                                              (line 1189)
   37228 * __satfracttida:                        Fixed-point fractional library routines.
   37229                                                              (line 1472)
   37230 * __satfracttidq:                        Fixed-point fractional library routines.
   37231                                                              (line 1469)
   37232 * __satfracttiha:                        Fixed-point fractional library routines.
   37233                                                              (line 1470)
   37234 * __satfracttihq:                        Fixed-point fractional library routines.
   37235                                                              (line 1467)
   37236 * __satfracttiqq:                        Fixed-point fractional library routines.
   37237                                                              (line 1466)
   37238 * __satfracttisa:                        Fixed-point fractional library routines.
   37239                                                              (line 1471)
   37240 * __satfracttisq:                        Fixed-point fractional library routines.
   37241                                                              (line 1468)
   37242 * __satfracttita:                        Fixed-point fractional library routines.
   37243                                                              (line 1473)
   37244 * __satfracttiuda:                       Fixed-point fractional library routines.
   37245                                                              (line 1481)
   37246 * __satfracttiudq:                       Fixed-point fractional library routines.
   37247                                                              (line 1478)
   37248 * __satfracttiuha:                       Fixed-point fractional library routines.
   37249                                                              (line 1479)
   37250 * __satfracttiuhq:                       Fixed-point fractional library routines.
   37251                                                              (line 1475)
   37252 * __satfracttiuqq:                       Fixed-point fractional library routines.
   37253                                                              (line 1474)
   37254 * __satfracttiusa:                       Fixed-point fractional library routines.
   37255                                                              (line 1480)
   37256 * __satfracttiusq:                       Fixed-point fractional library routines.
   37257                                                              (line 1476)
   37258 * __satfracttiuta:                       Fixed-point fractional library routines.
   37259                                                              (line 1483)
   37260 * __satfractudada:                       Fixed-point fractional library routines.
   37261                                                              (line 1351)
   37262 * __satfractudadq:                       Fixed-point fractional library routines.
   37263                                                              (line 1347)
   37264 * __satfractudaha:                       Fixed-point fractional library routines.
   37265                                                              (line 1349)
   37266 * __satfractudahq:                       Fixed-point fractional library routines.
   37267                                                              (line 1344)
   37268 * __satfractudaqq:                       Fixed-point fractional library routines.
   37269                                                              (line 1343)
   37270 * __satfractudasa:                       Fixed-point fractional library routines.
   37271                                                              (line 1350)
   37272 * __satfractudasq:                       Fixed-point fractional library routines.
   37273                                                              (line 1345)
   37274 * __satfractudata:                       Fixed-point fractional library routines.
   37275                                                              (line 1353)
   37276 * __satfractudaudq:                      Fixed-point fractional library routines.
   37277                                                              (line 1361)
   37278 * __satfractudauha2:                     Fixed-point fractional library routines.
   37279                                                              (line 1363)
   37280 * __satfractudauhq:                      Fixed-point fractional library routines.
   37281                                                              (line 1357)
   37282 * __satfractudauqq:                      Fixed-point fractional library routines.
   37283                                                              (line 1355)
   37284 * __satfractudausa2:                     Fixed-point fractional library routines.
   37285                                                              (line 1365)
   37286 * __satfractudausq:                      Fixed-point fractional library routines.
   37287                                                              (line 1359)
   37288 * __satfractudauta2:                     Fixed-point fractional library routines.
   37289                                                              (line 1367)
   37290 * __satfractudqda:                       Fixed-point fractional library routines.
   37291                                                              (line 1276)
   37292 * __satfractudqdq:                       Fixed-point fractional library routines.
   37293                                                              (line 1271)
   37294 * __satfractudqha:                       Fixed-point fractional library routines.
   37295                                                              (line 1273)
   37296 * __satfractudqhq:                       Fixed-point fractional library routines.
   37297                                                              (line 1267)
   37298 * __satfractudqqq:                       Fixed-point fractional library routines.
   37299                                                              (line 1266)
   37300 * __satfractudqsa:                       Fixed-point fractional library routines.
   37301                                                              (line 1274)
   37302 * __satfractudqsq:                       Fixed-point fractional library routines.
   37303                                                              (line 1269)
   37304 * __satfractudqta:                       Fixed-point fractional library routines.
   37305                                                              (line 1278)
   37306 * __satfractudquda:                      Fixed-point fractional library routines.
   37307                                                              (line 1290)
   37308 * __satfractudquha:                      Fixed-point fractional library routines.
   37309                                                              (line 1286)
   37310 * __satfractudquhq2:                     Fixed-point fractional library routines.
   37311                                                              (line 1282)
   37312 * __satfractudquqq2:                     Fixed-point fractional library routines.
   37313                                                              (line 1280)
   37314 * __satfractudqusa:                      Fixed-point fractional library routines.
   37315                                                              (line 1288)
   37316 * __satfractudqusq2:                     Fixed-point fractional library routines.
   37317                                                              (line 1284)
   37318 * __satfractudquta:                      Fixed-point fractional library routines.
   37319                                                              (line 1292)
   37320 * __satfractuhada:                       Fixed-point fractional library routines.
   37321                                                              (line 1304)
   37322 * __satfractuhadq:                       Fixed-point fractional library routines.
   37323                                                              (line 1299)
   37324 * __satfractuhaha:                       Fixed-point fractional library routines.
   37325                                                              (line 1301)
   37326 * __satfractuhahq:                       Fixed-point fractional library routines.
   37327                                                              (line 1295)
   37328 * __satfractuhaqq:                       Fixed-point fractional library routines.
   37329                                                              (line 1294)
   37330 * __satfractuhasa:                       Fixed-point fractional library routines.
   37331                                                              (line 1302)
   37332 * __satfractuhasq:                       Fixed-point fractional library routines.
   37333                                                              (line 1297)
   37334 * __satfractuhata:                       Fixed-point fractional library routines.
   37335                                                              (line 1306)
   37336 * __satfractuhauda2:                     Fixed-point fractional library routines.
   37337                                                              (line 1318)
   37338 * __satfractuhaudq:                      Fixed-point fractional library routines.
   37339                                                              (line 1314)
   37340 * __satfractuhauhq:                      Fixed-point fractional library routines.
   37341                                                              (line 1310)
   37342 * __satfractuhauqq:                      Fixed-point fractional library routines.
   37343                                                              (line 1308)
   37344 * __satfractuhausa2:                     Fixed-point fractional library routines.
   37345                                                              (line 1316)
   37346 * __satfractuhausq:                      Fixed-point fractional library routines.
   37347                                                              (line 1312)
   37348 * __satfractuhauta2:                     Fixed-point fractional library routines.
   37349                                                              (line 1320)
   37350 * __satfractuhqda:                       Fixed-point fractional library routines.
   37351                                                              (line 1224)
   37352 * __satfractuhqdq:                       Fixed-point fractional library routines.
   37353                                                              (line 1221)
   37354 * __satfractuhqha:                       Fixed-point fractional library routines.
   37355                                                              (line 1222)
   37356 * __satfractuhqhq:                       Fixed-point fractional library routines.
   37357                                                              (line 1219)
   37358 * __satfractuhqqq:                       Fixed-point fractional library routines.
   37359                                                              (line 1218)
   37360 * __satfractuhqsa:                       Fixed-point fractional library routines.
   37361                                                              (line 1223)
   37362 * __satfractuhqsq:                       Fixed-point fractional library routines.
   37363                                                              (line 1220)
   37364 * __satfractuhqta:                       Fixed-point fractional library routines.
   37365                                                              (line 1225)
   37366 * __satfractuhquda:                      Fixed-point fractional library routines.
   37367                                                              (line 1236)
   37368 * __satfractuhqudq2:                     Fixed-point fractional library routines.
   37369                                                              (line 1231)
   37370 * __satfractuhquha:                      Fixed-point fractional library routines.
   37371                                                              (line 1233)
   37372 * __satfractuhquqq2:                     Fixed-point fractional library routines.
   37373                                                              (line 1227)
   37374 * __satfractuhqusa:                      Fixed-point fractional library routines.
   37375                                                              (line 1234)
   37376 * __satfractuhqusq2:                     Fixed-point fractional library routines.
   37377                                                              (line 1229)
   37378 * __satfractuhquta:                      Fixed-point fractional library routines.
   37379                                                              (line 1238)
   37380 * __satfractunsdida:                     Fixed-point fractional library routines.
   37381                                                              (line 1834)
   37382 * __satfractunsdidq:                     Fixed-point fractional library routines.
   37383                                                              (line 1831)
   37384 * __satfractunsdiha:                     Fixed-point fractional library routines.
   37385                                                              (line 1832)
   37386 * __satfractunsdihq:                     Fixed-point fractional library routines.
   37387                                                              (line 1828)
   37388 * __satfractunsdiqq:                     Fixed-point fractional library routines.
   37389                                                              (line 1827)
   37390 * __satfractunsdisa:                     Fixed-point fractional library routines.
   37391                                                              (line 1833)
   37392 * __satfractunsdisq:                     Fixed-point fractional library routines.
   37393                                                              (line 1829)
   37394 * __satfractunsdita:                     Fixed-point fractional library routines.
   37395                                                              (line 1836)
   37396 * __satfractunsdiuda:                    Fixed-point fractional library routines.
   37397                                                              (line 1850)
   37398 * __satfractunsdiudq:                    Fixed-point fractional library routines.
   37399                                                              (line 1844)
   37400 * __satfractunsdiuha:                    Fixed-point fractional library routines.
   37401                                                              (line 1846)
   37402 * __satfractunsdiuhq:                    Fixed-point fractional library routines.
   37403                                                              (line 1840)
   37404 * __satfractunsdiuqq:                    Fixed-point fractional library routines.
   37405                                                              (line 1838)
   37406 * __satfractunsdiusa:                    Fixed-point fractional library routines.
   37407                                                              (line 1848)
   37408 * __satfractunsdiusq:                    Fixed-point fractional library routines.
   37409                                                              (line 1842)
   37410 * __satfractunsdiuta:                    Fixed-point fractional library routines.
   37411                                                              (line 1852)
   37412 * __satfractunshida:                     Fixed-point fractional library routines.
   37413                                                              (line 1786)
   37414 * __satfractunshidq:                     Fixed-point fractional library routines.
   37415                                                              (line 1783)
   37416 * __satfractunshiha:                     Fixed-point fractional library routines.
   37417                                                              (line 1784)
   37418 * __satfractunshihq:                     Fixed-point fractional library routines.
   37419                                                              (line 1780)
   37420 * __satfractunshiqq:                     Fixed-point fractional library routines.
   37421                                                              (line 1779)
   37422 * __satfractunshisa:                     Fixed-point fractional library routines.
   37423                                                              (line 1785)
   37424 * __satfractunshisq:                     Fixed-point fractional library routines.
   37425                                                              (line 1781)
   37426 * __satfractunshita:                     Fixed-point fractional library routines.
   37427                                                              (line 1788)
   37428 * __satfractunshiuda:                    Fixed-point fractional library routines.
   37429                                                              (line 1802)
   37430 * __satfractunshiudq:                    Fixed-point fractional library routines.
   37431                                                              (line 1796)
   37432 * __satfractunshiuha:                    Fixed-point fractional library routines.
   37433                                                              (line 1798)
   37434 * __satfractunshiuhq:                    Fixed-point fractional library routines.
   37435                                                              (line 1792)
   37436 * __satfractunshiuqq:                    Fixed-point fractional library routines.
   37437                                                              (line 1790)
   37438 * __satfractunshiusa:                    Fixed-point fractional library routines.
   37439                                                              (line 1800)
   37440 * __satfractunshiusq:                    Fixed-point fractional library routines.
   37441                                                              (line 1794)
   37442 * __satfractunshiuta:                    Fixed-point fractional library routines.
   37443                                                              (line 1804)
   37444 * __satfractunsqida:                     Fixed-point fractional library routines.
   37445                                                              (line 1760)
   37446 * __satfractunsqidq:                     Fixed-point fractional library routines.
   37447                                                              (line 1757)
   37448 * __satfractunsqiha:                     Fixed-point fractional library routines.
   37449                                                              (line 1758)
   37450 * __satfractunsqihq:                     Fixed-point fractional library routines.
   37451                                                              (line 1754)
   37452 * __satfractunsqiqq:                     Fixed-point fractional library routines.
   37453                                                              (line 1753)
   37454 * __satfractunsqisa:                     Fixed-point fractional library routines.
   37455                                                              (line 1759)
   37456 * __satfractunsqisq:                     Fixed-point fractional library routines.
   37457                                                              (line 1755)
   37458 * __satfractunsqita:                     Fixed-point fractional library routines.
   37459                                                              (line 1762)
   37460 * __satfractunsqiuda:                    Fixed-point fractional library routines.
   37461                                                              (line 1776)
   37462 * __satfractunsqiudq:                    Fixed-point fractional library routines.
   37463                                                              (line 1770)
   37464 * __satfractunsqiuha:                    Fixed-point fractional library routines.
   37465                                                              (line 1772)
   37466 * __satfractunsqiuhq:                    Fixed-point fractional library routines.
   37467                                                              (line 1766)
   37468 * __satfractunsqiuqq:                    Fixed-point fractional library routines.
   37469                                                              (line 1764)
   37470 * __satfractunsqiusa:                    Fixed-point fractional library routines.
   37471                                                              (line 1774)
   37472 * __satfractunsqiusq:                    Fixed-point fractional library routines.
   37473                                                              (line 1768)
   37474 * __satfractunsqiuta:                    Fixed-point fractional library routines.
   37475                                                              (line 1778)
   37476 * __satfractunssida:                     Fixed-point fractional library routines.
   37477                                                              (line 1811)
   37478 * __satfractunssidq:                     Fixed-point fractional library routines.
   37479                                                              (line 1808)
   37480 * __satfractunssiha:                     Fixed-point fractional library routines.
   37481                                                              (line 1809)
   37482 * __satfractunssihq:                     Fixed-point fractional library routines.
   37483                                                              (line 1806)
   37484 * __satfractunssiqq:                     Fixed-point fractional library routines.
   37485                                                              (line 1805)
   37486 * __satfractunssisa:                     Fixed-point fractional library routines.
   37487                                                              (line 1810)
   37488 * __satfractunssisq:                     Fixed-point fractional library routines.
   37489                                                              (line 1807)
   37490 * __satfractunssita:                     Fixed-point fractional library routines.
   37491                                                              (line 1812)
   37492 * __satfractunssiuda:                    Fixed-point fractional library routines.
   37493                                                              (line 1824)
   37494 * __satfractunssiudq:                    Fixed-point fractional library routines.
   37495                                                              (line 1819)
   37496 * __satfractunssiuha:                    Fixed-point fractional library routines.
   37497                                                              (line 1821)
   37498 * __satfractunssiuhq:                    Fixed-point fractional library routines.
   37499                                                              (line 1815)
   37500 * __satfractunssiuqq:                    Fixed-point fractional library routines.
   37501                                                              (line 1814)
   37502 * __satfractunssiusa:                    Fixed-point fractional library routines.
   37503                                                              (line 1822)
   37504 * __satfractunssiusq:                    Fixed-point fractional library routines.
   37505                                                              (line 1817)
   37506 * __satfractunssiuta:                    Fixed-point fractional library routines.
   37507                                                              (line 1826)
   37508 * __satfractunstida:                     Fixed-point fractional library routines.
   37509                                                              (line 1864)
   37510 * __satfractunstidq:                     Fixed-point fractional library routines.
   37511                                                              (line 1859)
   37512 * __satfractunstiha:                     Fixed-point fractional library routines.
   37513                                                              (line 1861)
   37514 * __satfractunstihq:                     Fixed-point fractional library routines.
   37515                                                              (line 1855)
   37516 * __satfractunstiqq:                     Fixed-point fractional library routines.
   37517                                                              (line 1854)
   37518 * __satfractunstisa:                     Fixed-point fractional library routines.
   37519                                                              (line 1862)
   37520 * __satfractunstisq:                     Fixed-point fractional library routines.
   37521                                                              (line 1857)
   37522 * __satfractunstita:                     Fixed-point fractional library routines.
   37523                                                              (line 1866)
   37524 * __satfractunstiuda:                    Fixed-point fractional library routines.
   37525                                                              (line 1880)
   37526 * __satfractunstiudq:                    Fixed-point fractional library routines.
   37527                                                              (line 1874)
   37528 * __satfractunstiuha:                    Fixed-point fractional library routines.
   37529                                                              (line 1876)
   37530 * __satfractunstiuhq:                    Fixed-point fractional library routines.
   37531                                                              (line 1870)
   37532 * __satfractunstiuqq:                    Fixed-point fractional library routines.
   37533                                                              (line 1868)
   37534 * __satfractunstiusa:                    Fixed-point fractional library routines.
   37535                                                              (line 1878)
   37536 * __satfractunstiusq:                    Fixed-point fractional library routines.
   37537                                                              (line 1872)
   37538 * __satfractunstiuta:                    Fixed-point fractional library routines.
   37539                                                              (line 1882)
   37540 * __satfractuqqda:                       Fixed-point fractional library routines.
   37541                                                              (line 1201)
   37542 * __satfractuqqdq:                       Fixed-point fractional library routines.
   37543                                                              (line 1196)
   37544 * __satfractuqqha:                       Fixed-point fractional library routines.
   37545                                                              (line 1198)
   37546 * __satfractuqqhq:                       Fixed-point fractional library routines.
   37547                                                              (line 1192)
   37548 * __satfractuqqqq:                       Fixed-point fractional library routines.
   37549                                                              (line 1191)
   37550 * __satfractuqqsa:                       Fixed-point fractional library routines.
   37551                                                              (line 1199)
   37552 * __satfractuqqsq:                       Fixed-point fractional library routines.
   37553                                                              (line 1194)
   37554 * __satfractuqqta:                       Fixed-point fractional library routines.
   37555                                                              (line 1203)
   37556 * __satfractuqquda:                      Fixed-point fractional library routines.
   37557                                                              (line 1215)
   37558 * __satfractuqqudq2:                     Fixed-point fractional library routines.
   37559                                                              (line 1209)
   37560 * __satfractuqquha:                      Fixed-point fractional library routines.
   37561                                                              (line 1211)
   37562 * __satfractuqquhq2:                     Fixed-point fractional library routines.
   37563                                                              (line 1205)
   37564 * __satfractuqqusa:                      Fixed-point fractional library routines.
   37565                                                              (line 1213)
   37566 * __satfractuqqusq2:                     Fixed-point fractional library routines.
   37567                                                              (line 1207)
   37568 * __satfractuqquta:                      Fixed-point fractional library routines.
   37569                                                              (line 1217)
   37570 * __satfractusada:                       Fixed-point fractional library routines.
   37571                                                              (line 1327)
   37572 * __satfractusadq:                       Fixed-point fractional library routines.
   37573                                                              (line 1324)
   37574 * __satfractusaha:                       Fixed-point fractional library routines.
   37575                                                              (line 1325)
   37576 * __satfractusahq:                       Fixed-point fractional library routines.
   37577                                                              (line 1322)
   37578 * __satfractusaqq:                       Fixed-point fractional library routines.
   37579                                                              (line 1321)
   37580 * __satfractusasa:                       Fixed-point fractional library routines.
   37581                                                              (line 1326)
   37582 * __satfractusasq:                       Fixed-point fractional library routines.
   37583                                                              (line 1323)
   37584 * __satfractusata:                       Fixed-point fractional library routines.
   37585                                                              (line 1328)
   37586 * __satfractusauda2:                     Fixed-point fractional library routines.
   37587                                                              (line 1339)
   37588 * __satfractusaudq:                      Fixed-point fractional library routines.
   37589                                                              (line 1335)
   37590 * __satfractusauha2:                     Fixed-point fractional library routines.
   37591                                                              (line 1337)
   37592 * __satfractusauhq:                      Fixed-point fractional library routines.
   37593                                                              (line 1331)
   37594 * __satfractusauqq:                      Fixed-point fractional library routines.
   37595                                                              (line 1330)
   37596 * __satfractusausq:                      Fixed-point fractional library routines.
   37597                                                              (line 1333)
   37598 * __satfractusauta2:                     Fixed-point fractional library routines.
   37599                                                              (line 1341)
   37600 * __satfractusqda:                       Fixed-point fractional library routines.
   37601                                                              (line 1248)
   37602 * __satfractusqdq:                       Fixed-point fractional library routines.
   37603                                                              (line 1244)
   37604 * __satfractusqha:                       Fixed-point fractional library routines.
   37605                                                              (line 1246)
   37606 * __satfractusqhq:                       Fixed-point fractional library routines.
   37607                                                              (line 1241)
   37608 * __satfractusqqq:                       Fixed-point fractional library routines.
   37609                                                              (line 1240)
   37610 * __satfractusqsa:                       Fixed-point fractional library routines.
   37611                                                              (line 1247)
   37612 * __satfractusqsq:                       Fixed-point fractional library routines.
   37613                                                              (line 1242)
   37614 * __satfractusqta:                       Fixed-point fractional library routines.
   37615                                                              (line 1250)
   37616 * __satfractusquda:                      Fixed-point fractional library routines.
   37617                                                              (line 1262)
   37618 * __satfractusqudq2:                     Fixed-point fractional library routines.
   37619                                                              (line 1256)
   37620 * __satfractusquha:                      Fixed-point fractional library routines.
   37621                                                              (line 1258)
   37622 * __satfractusquhq2:                     Fixed-point fractional library routines.
   37623                                                              (line 1254)
   37624 * __satfractusquqq2:                     Fixed-point fractional library routines.
   37625                                                              (line 1252)
   37626 * __satfractusqusa:                      Fixed-point fractional library routines.
   37627                                                              (line 1260)
   37628 * __satfractusquta:                      Fixed-point fractional library routines.
   37629                                                              (line 1264)
   37630 * __satfractutada:                       Fixed-point fractional library routines.
   37631                                                              (line 1379)
   37632 * __satfractutadq:                       Fixed-point fractional library routines.
   37633                                                              (line 1374)
   37634 * __satfractutaha:                       Fixed-point fractional library routines.
   37635                                                              (line 1376)
   37636 * __satfractutahq:                       Fixed-point fractional library routines.
   37637                                                              (line 1370)
   37638 * __satfractutaqq:                       Fixed-point fractional library routines.
   37639                                                              (line 1369)
   37640 * __satfractutasa:                       Fixed-point fractional library routines.
   37641                                                              (line 1377)
   37642 * __satfractutasq:                       Fixed-point fractional library routines.
   37643                                                              (line 1372)
   37644 * __satfractutata:                       Fixed-point fractional library routines.
   37645                                                              (line 1381)
   37646 * __satfractutauda2:                     Fixed-point fractional library routines.
   37647                                                              (line 1395)
   37648 * __satfractutaudq:                      Fixed-point fractional library routines.
   37649                                                              (line 1389)
   37650 * __satfractutauha2:                     Fixed-point fractional library routines.
   37651                                                              (line 1391)
   37652 * __satfractutauhq:                      Fixed-point fractional library routines.
   37653                                                              (line 1385)
   37654 * __satfractutauqq:                      Fixed-point fractional library routines.
   37655                                                              (line 1383)
   37656 * __satfractutausa2:                     Fixed-point fractional library routines.
   37657                                                              (line 1393)
   37658 * __satfractutausq:                      Fixed-point fractional library routines.
   37659                                                              (line 1387)
   37660 * __ssaddda3:                            Fixed-point fractional library routines.
   37661                                                              (line   67)
   37662 * __ssadddq3:                            Fixed-point fractional library routines.
   37663                                                              (line   63)
   37664 * __ssaddha3:                            Fixed-point fractional library routines.
   37665                                                              (line   65)
   37666 * __ssaddhq3:                            Fixed-point fractional library routines.
   37667                                                              (line   60)
   37668 * __ssaddqq3:                            Fixed-point fractional library routines.
   37669                                                              (line   59)
   37670 * __ssaddsa3:                            Fixed-point fractional library routines.
   37671                                                              (line   66)
   37672 * __ssaddsq3:                            Fixed-point fractional library routines.
   37673                                                              (line   61)
   37674 * __ssaddta3:                            Fixed-point fractional library routines.
   37675                                                              (line   69)
   37676 * __ssashlda3:                           Fixed-point fractional library routines.
   37677                                                              (line  402)
   37678 * __ssashldq3:                           Fixed-point fractional library routines.
   37679                                                              (line  399)
   37680 * __ssashlha3:                           Fixed-point fractional library routines.
   37681                                                              (line  400)
   37682 * __ssashlhq3:                           Fixed-point fractional library routines.
   37683                                                              (line  396)
   37684 * __ssashlsa3:                           Fixed-point fractional library routines.
   37685                                                              (line  401)
   37686 * __ssashlsq3:                           Fixed-point fractional library routines.
   37687                                                              (line  397)
   37688 * __ssashlta3:                           Fixed-point fractional library routines.
   37689                                                              (line  404)
   37690 * __ssdivda3:                            Fixed-point fractional library routines.
   37691                                                              (line  261)
   37692 * __ssdivdq3:                            Fixed-point fractional library routines.
   37693                                                              (line  257)
   37694 * __ssdivha3:                            Fixed-point fractional library routines.
   37695                                                              (line  259)
   37696 * __ssdivhq3:                            Fixed-point fractional library routines.
   37697                                                              (line  254)
   37698 * __ssdivqq3:                            Fixed-point fractional library routines.
   37699                                                              (line  253)
   37700 * __ssdivsa3:                            Fixed-point fractional library routines.
   37701                                                              (line  260)
   37702 * __ssdivsq3:                            Fixed-point fractional library routines.
   37703                                                              (line  255)
   37704 * __ssdivta3:                            Fixed-point fractional library routines.
   37705                                                              (line  263)
   37706 * __ssmulda3:                            Fixed-point fractional library routines.
   37707                                                              (line  193)
   37708 * __ssmuldq3:                            Fixed-point fractional library routines.
   37709                                                              (line  189)
   37710 * __ssmulha3:                            Fixed-point fractional library routines.
   37711                                                              (line  191)
   37712 * __ssmulhq3:                            Fixed-point fractional library routines.
   37713                                                              (line  186)
   37714 * __ssmulqq3:                            Fixed-point fractional library routines.
   37715                                                              (line  185)
   37716 * __ssmulsa3:                            Fixed-point fractional library routines.
   37717                                                              (line  192)
   37718 * __ssmulsq3:                            Fixed-point fractional library routines.
   37719                                                              (line  187)
   37720 * __ssmulta3:                            Fixed-point fractional library routines.
   37721                                                              (line  195)
   37722 * __ssnegda2:                            Fixed-point fractional library routines.
   37723                                                              (line  316)
   37724 * __ssnegdq2:                            Fixed-point fractional library routines.
   37725                                                              (line  313)
   37726 * __ssnegha2:                            Fixed-point fractional library routines.
   37727                                                              (line  314)
   37728 * __ssneghq2:                            Fixed-point fractional library routines.
   37729                                                              (line  311)
   37730 * __ssnegqq2:                            Fixed-point fractional library routines.
   37731                                                              (line  310)
   37732 * __ssnegsa2:                            Fixed-point fractional library routines.
   37733                                                              (line  315)
   37734 * __ssnegsq2:                            Fixed-point fractional library routines.
   37735                                                              (line  312)
   37736 * __ssnegta2:                            Fixed-point fractional library routines.
   37737                                                              (line  317)
   37738 * __sssubda3:                            Fixed-point fractional library routines.
   37739                                                              (line  129)
   37740 * __sssubdq3:                            Fixed-point fractional library routines.
   37741                                                              (line  125)
   37742 * __sssubha3:                            Fixed-point fractional library routines.
   37743                                                              (line  127)
   37744 * __sssubhq3:                            Fixed-point fractional library routines.
   37745                                                              (line  122)
   37746 * __sssubqq3:                            Fixed-point fractional library routines.
   37747                                                              (line  121)
   37748 * __sssubsa3:                            Fixed-point fractional library routines.
   37749                                                              (line  128)
   37750 * __sssubsq3:                            Fixed-point fractional library routines.
   37751                                                              (line  123)
   37752 * __sssubta3:                            Fixed-point fractional library routines.
   37753                                                              (line  131)
   37754 * __subda3:                              Fixed-point fractional library routines.
   37755                                                              (line  107)
   37756 * __subdf3:                              Soft float library routines.
   37757                                                              (line   31)
   37758 * __subdq3:                              Fixed-point fractional library routines.
   37759                                                              (line   95)
   37760 * __subha3:                              Fixed-point fractional library routines.
   37761                                                              (line  105)
   37762 * __subhq3:                              Fixed-point fractional library routines.
   37763                                                              (line   92)
   37764 * __subqq3:                              Fixed-point fractional library routines.
   37765                                                              (line   91)
   37766 * __subsa3:                              Fixed-point fractional library routines.
   37767                                                              (line  106)
   37768 * __subsf3:                              Soft float library routines.
   37769                                                              (line   30)
   37770 * __subsq3:                              Fixed-point fractional library routines.
   37771                                                              (line   93)
   37772 * __subta3:                              Fixed-point fractional library routines.
   37773                                                              (line  109)
   37774 * __subtf3:                              Soft float library routines.
   37775                                                              (line   33)
   37776 * __subuda3:                             Fixed-point fractional library routines.
   37777                                                              (line  115)
   37778 * __subudq3:                             Fixed-point fractional library routines.
   37779                                                              (line  103)
   37780 * __subuha3:                             Fixed-point fractional library routines.
   37781                                                              (line  111)
   37782 * __subuhq3:                             Fixed-point fractional library routines.
   37783                                                              (line   99)
   37784 * __subuqq3:                             Fixed-point fractional library routines.
   37785                                                              (line   97)
   37786 * __subusa3:                             Fixed-point fractional library routines.
   37787                                                              (line  113)
   37788 * __subusq3:                             Fixed-point fractional library routines.
   37789                                                              (line  101)
   37790 * __subuta3:                             Fixed-point fractional library routines.
   37791                                                              (line  117)
   37792 * __subvdi3:                             Integer library routines.
   37793                                                              (line  123)
   37794 * __subvsi3:                             Integer library routines.
   37795                                                              (line  122)
   37796 * __subxf3:                              Soft float library routines.
   37797                                                              (line   35)
   37798 * __truncdfsf2:                          Soft float library routines.
   37799                                                              (line   76)
   37800 * __trunctfdf2:                          Soft float library routines.
   37801                                                              (line   73)
   37802 * __trunctfsf2:                          Soft float library routines.
   37803                                                              (line   75)
   37804 * __truncxfdf2:                          Soft float library routines.
   37805                                                              (line   72)
   37806 * __truncxfsf2:                          Soft float library routines.
   37807                                                              (line   74)
   37808 * __ucmpdi2:                             Integer library routines.
   37809                                                              (line   93)
   37810 * __ucmpti2:                             Integer library routines.
   37811                                                              (line   95)
   37812 * __udivdi3:                             Integer library routines.
   37813                                                              (line   54)
   37814 * __udivmoddi3:                          Integer library routines.
   37815                                                              (line   61)
   37816 * __udivsi3:                             Integer library routines.
   37817                                                              (line   52)
   37818 * __udivti3:                             Integer library routines.
   37819                                                              (line   56)
   37820 * __udivuda3:                            Fixed-point fractional library routines.
   37821                                                              (line  246)
   37822 * __udivudq3:                            Fixed-point fractional library routines.
   37823                                                              (line  240)
   37824 * __udivuha3:                            Fixed-point fractional library routines.
   37825                                                              (line  242)
   37826 * __udivuhq3:                            Fixed-point fractional library routines.
   37827                                                              (line  236)
   37828 * __udivuqq3:                            Fixed-point fractional library routines.
   37829                                                              (line  234)
   37830 * __udivusa3:                            Fixed-point fractional library routines.
   37831                                                              (line  244)
   37832 * __udivusq3:                            Fixed-point fractional library routines.
   37833                                                              (line  238)
   37834 * __udivuta3:                            Fixed-point fractional library routines.
   37835                                                              (line  248)
   37836 * __umoddi3:                             Integer library routines.
   37837                                                              (line   71)
   37838 * __umodsi3:                             Integer library routines.
   37839                                                              (line   69)
   37840 * __umodti3:                             Integer library routines.
   37841                                                              (line   73)
   37842 * __unorddf2:                            Soft float library routines.
   37843                                                              (line  173)
   37844 * __unordsf2:                            Soft float library routines.
   37845                                                              (line  172)
   37846 * __unordtf2:                            Soft float library routines.
   37847                                                              (line  174)
   37848 * __usadduda3:                           Fixed-point fractional library routines.
   37849                                                              (line   85)
   37850 * __usaddudq3:                           Fixed-point fractional library routines.
   37851                                                              (line   79)
   37852 * __usadduha3:                           Fixed-point fractional library routines.
   37853                                                              (line   81)
   37854 * __usadduhq3:                           Fixed-point fractional library routines.
   37855                                                              (line   75)
   37856 * __usadduqq3:                           Fixed-point fractional library routines.
   37857                                                              (line   73)
   37858 * __usaddusa3:                           Fixed-point fractional library routines.
   37859                                                              (line   83)
   37860 * __usaddusq3:                           Fixed-point fractional library routines.
   37861                                                              (line   77)
   37862 * __usadduta3:                           Fixed-point fractional library routines.
   37863                                                              (line   87)
   37864 * __usashluda3:                          Fixed-point fractional library routines.
   37865                                                              (line  421)
   37866 * __usashludq3:                          Fixed-point fractional library routines.
   37867                                                              (line  415)
   37868 * __usashluha3:                          Fixed-point fractional library routines.
   37869                                                              (line  417)
   37870 * __usashluhq3:                          Fixed-point fractional library routines.
   37871                                                              (line  411)
   37872 * __usashluqq3:                          Fixed-point fractional library routines.
   37873                                                              (line  409)
   37874 * __usashlusa3:                          Fixed-point fractional library routines.
   37875                                                              (line  419)
   37876 * __usashlusq3:                          Fixed-point fractional library routines.
   37877                                                              (line  413)
   37878 * __usashluta3:                          Fixed-point fractional library routines.
   37879                                                              (line  423)
   37880 * __usdivuda3:                           Fixed-point fractional library routines.
   37881                                                              (line  280)
   37882 * __usdivudq3:                           Fixed-point fractional library routines.
   37883                                                              (line  274)
   37884 * __usdivuha3:                           Fixed-point fractional library routines.
   37885                                                              (line  276)
   37886 * __usdivuhq3:                           Fixed-point fractional library routines.
   37887                                                              (line  270)
   37888 * __usdivuqq3:                           Fixed-point fractional library routines.
   37889                                                              (line  268)
   37890 * __usdivusa3:                           Fixed-point fractional library routines.
   37891                                                              (line  278)
   37892 * __usdivusq3:                           Fixed-point fractional library routines.
   37893                                                              (line  272)
   37894 * __usdivuta3:                           Fixed-point fractional library routines.
   37895                                                              (line  282)
   37896 * __usmuluda3:                           Fixed-point fractional library routines.
   37897                                                              (line  212)
   37898 * __usmuludq3:                           Fixed-point fractional library routines.
   37899                                                              (line  206)
   37900 * __usmuluha3:                           Fixed-point fractional library routines.
   37901                                                              (line  208)
   37902 * __usmuluhq3:                           Fixed-point fractional library routines.
   37903                                                              (line  202)
   37904 * __usmuluqq3:                           Fixed-point fractional library routines.
   37905                                                              (line  200)
   37906 * __usmulusa3:                           Fixed-point fractional library routines.
   37907                                                              (line  210)
   37908 * __usmulusq3:                           Fixed-point fractional library routines.
   37909                                                              (line  204)
   37910 * __usmuluta3:                           Fixed-point fractional library routines.
   37911                                                              (line  214)
   37912 * __usneguda2:                           Fixed-point fractional library routines.
   37913                                                              (line  331)
   37914 * __usnegudq2:                           Fixed-point fractional library routines.
   37915                                                              (line  326)
   37916 * __usneguha2:                           Fixed-point fractional library routines.
   37917                                                              (line  328)
   37918 * __usneguhq2:                           Fixed-point fractional library routines.
   37919                                                              (line  322)
   37920 * __usneguqq2:                           Fixed-point fractional library routines.
   37921                                                              (line  321)
   37922 * __usnegusa2:                           Fixed-point fractional library routines.
   37923                                                              (line  329)
   37924 * __usnegusq2:                           Fixed-point fractional library routines.
   37925                                                              (line  324)
   37926 * __usneguta2:                           Fixed-point fractional library routines.
   37927                                                              (line  333)
   37928 * __ussubuda3:                           Fixed-point fractional library routines.
   37929                                                              (line  148)
   37930 * __ussubudq3:                           Fixed-point fractional library routines.
   37931                                                              (line  142)
   37932 * __ussubuha3:                           Fixed-point fractional library routines.
   37933                                                              (line  144)
   37934 * __ussubuhq3:                           Fixed-point fractional library routines.
   37935                                                              (line  138)
   37936 * __ussubuqq3:                           Fixed-point fractional library routines.
   37937                                                              (line  136)
   37938 * __ussubusa3:                           Fixed-point fractional library routines.
   37939                                                              (line  146)
   37940 * __ussubusq3:                           Fixed-point fractional library routines.
   37941                                                              (line  140)
   37942 * __ussubuta3:                           Fixed-point fractional library routines.
   37943                                                              (line  150)
   37944 * abort:                                 Portability.        (line   21)
   37945 * abs:                                   Arithmetic.         (line  195)
   37946 * abs and attributes:                    Expressions.        (line   64)
   37947 * ABS_EXPR:                              Expression trees.   (line    6)
   37948 * absence_set:                           Processor pipeline description.
   37949                                                              (line  215)
   37950 * absM2 instruction pattern:             Standard Names.     (line  448)
   37951 * absolute value:                        Arithmetic.         (line  195)
   37952 * access to operands:                    Accessors.          (line    6)
   37953 * access to special operands:            Special Accessors.  (line    6)
   37954 * accessors:                             Accessors.          (line    6)
   37955 * ACCUM_TYPE_SIZE:                       Type Layout.        (line   88)
   37956 * ACCUMULATE_OUTGOING_ARGS:              Stack Arguments.    (line   46)
   37957 * ACCUMULATE_OUTGOING_ARGS and stack frames: Function Entry. (line  135)
   37958 * ADA_LONG_TYPE_SIZE:                    Type Layout.        (line   26)
   37959 * ADDITIONAL_REGISTER_NAMES:             Instruction Output. (line   15)
   37960 * addM3 instruction pattern:             Standard Names.     (line  216)
   37961 * addMODEcc instruction pattern:         Standard Names.     (line  898)
   37962 * addr_diff_vec:                         Side Effects.       (line  299)
   37963 * addr_diff_vec, length of:              Insn Lengths.       (line   26)
   37964 * ADDR_EXPR:                             Expression trees.   (line    6)
   37965 * addr_vec:                              Side Effects.       (line  294)
   37966 * addr_vec, length of:                   Insn Lengths.       (line   26)
   37967 * address constraints:                   Simple Constraints. (line  152)
   37968 * address_operand <1>:                   Simple Constraints. (line  156)
   37969 * address_operand:                       Machine-Independent Predicates.
   37970                                                              (line   63)
   37971 * addressing modes:                      Addressing Modes.   (line    6)
   37972 * addressof:                             Regs and Memory.    (line  260)
   37973 * ADJUST_FIELD_ALIGN:                    Storage Layout.     (line  188)
   37974 * ADJUST_INSN_LENGTH:                    Insn Lengths.       (line   35)
   37975 * AGGR_INIT_EXPR:                        Expression trees.   (line    6)
   37976 * aggregates as return values:           Aggregate Return.   (line    6)
   37977 * alias:                                 Alias analysis.     (line    6)
   37978 * ALL_COP_ADDITIONAL_REGISTER_NAMES:     MIPS Coprocessors.  (line   32)
   37979 * ALL_REGS:                              Register Classes.   (line   17)
   37980 * allocate_stack instruction pattern:    Standard Names.     (line 1221)
   37981 * alternate entry points:                Insns.              (line  140)
   37982 * anchored addresses:                    Anchored Addresses. (line    6)
   37983 * and:                                   Arithmetic.         (line  153)
   37984 * and and attributes:                    Expressions.        (line   50)
   37985 * and, canonicalization of:              Insn Canonicalizations.
   37986                                                              (line   57)
   37987 * andM3 instruction pattern:             Standard Names.     (line  222)
   37988 * annotations:                           Annotations.        (line    6)
   37989 * APPLY_RESULT_SIZE:                     Scalar Return.      (line   92)
   37990 * ARG_POINTER_CFA_OFFSET:                Frame Layout.       (line  194)
   37991 * ARG_POINTER_REGNUM:                    Frame Registers.    (line   41)
   37992 * ARG_POINTER_REGNUM and virtual registers: Regs and Memory. (line   65)
   37993 * arg_pointer_rtx:                       Frame Registers.    (line   85)
   37994 * ARGS_GROW_DOWNWARD:                    Frame Layout.       (line   35)
   37995 * argument passing:                      Interface.          (line   36)
   37996 * arguments in registers:                Register Arguments. (line    6)
   37997 * arguments on stack:                    Stack Arguments.    (line    6)
   37998 * arithmetic library:                    Soft float library routines.
   37999                                                              (line    6)
   38000 * arithmetic shift:                      Arithmetic.         (line  168)
   38001 * arithmetic shift with signed saturation: Arithmetic.       (line  168)
   38002 * arithmetic shift with unsigned saturation: Arithmetic.     (line  168)
   38003 * arithmetic, in RTL:                    Arithmetic.         (line    6)
   38004 * ARITHMETIC_TYPE_P:                     Types.              (line   76)
   38005 * array:                                 Types.              (line    6)
   38006 * ARRAY_RANGE_REF:                       Expression trees.   (line    6)
   38007 * ARRAY_REF:                             Expression trees.   (line    6)
   38008 * ARRAY_TYPE:                            Types.              (line    6)
   38009 * AS_NEEDS_DASH_FOR_PIPED_INPUT:         Driver.             (line  151)
   38010 * ashift:                                Arithmetic.         (line  168)
   38011 * ashift and attributes:                 Expressions.        (line   64)
   38012 * ashiftrt:                              Arithmetic.         (line  185)
   38013 * ashiftrt and attributes:               Expressions.        (line   64)
   38014 * ashlM3 instruction pattern:            Standard Names.     (line  431)
   38015 * ashrM3 instruction pattern:            Standard Names.     (line  441)
   38016 * ASM_APP_OFF:                           File Framework.     (line   61)
   38017 * ASM_APP_ON:                            File Framework.     (line   54)
   38018 * ASM_COMMENT_START:                     File Framework.     (line   49)
   38019 * ASM_DECLARE_CLASS_REFERENCE:           Label Output.       (line  436)
   38020 * ASM_DECLARE_CONSTANT_NAME:             Label Output.       (line  128)
   38021 * ASM_DECLARE_FUNCTION_NAME:             Label Output.       (line   87)
   38022 * ASM_DECLARE_FUNCTION_SIZE:             Label Output.       (line  101)
   38023 * ASM_DECLARE_OBJECT_NAME:               Label Output.       (line  114)
   38024 * ASM_DECLARE_REGISTER_GLOBAL:           Label Output.       (line  143)
   38025 * ASM_DECLARE_UNRESOLVED_REFERENCE:      Label Output.       (line  442)
   38026 * ASM_FINAL_SPEC:                        Driver.             (line  144)
   38027 * ASM_FINISH_DECLARE_OBJECT:             Label Output.       (line  151)
   38028 * ASM_FORMAT_PRIVATE_NAME:               Label Output.       (line  354)
   38029 * asm_fprintf:                           Instruction Output. (line  123)
   38030 * ASM_FPRINTF_EXTENSIONS:                Instruction Output. (line  134)
   38031 * ASM_GENERATE_INTERNAL_LABEL:           Label Output.       (line  338)
   38032 * asm_input:                             Side Effects.       (line  281)
   38033 * asm_input and /v:                      Flags.              (line   79)
   38034 * ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX:     Exception Handling. (line   82)
   38035 * ASM_NO_SKIP_IN_TEXT:                   Alignment Output.   (line   72)
   38036 * asm_noperands:                         Insns.              (line  266)
   38037 * asm_operands and /v:                   Flags.              (line   79)
   38038 * asm_operands, RTL sharing:             Sharing.            (line   45)
   38039 * asm_operands, usage:                   Assembler.          (line    6)
   38040 * ASM_OUTPUT_ADDR_DIFF_ELT:              Dispatch Tables.    (line    9)
   38041 * ASM_OUTPUT_ADDR_VEC_ELT:               Dispatch Tables.    (line   26)
   38042 * ASM_OUTPUT_ALIGN:                      Alignment Output.   (line   79)
   38043 * ASM_OUTPUT_ALIGN_WITH_NOP:             Alignment Output.   (line   84)
   38044 * ASM_OUTPUT_ALIGNED_BSS:                Uninitialized Data. (line   64)
   38045 * ASM_OUTPUT_ALIGNED_COMMON:             Uninitialized Data. (line   23)
   38046 * ASM_OUTPUT_ALIGNED_DECL_COMMON:        Uninitialized Data. (line   31)
   38047 * ASM_OUTPUT_ALIGNED_DECL_LOCAL:         Uninitialized Data. (line   95)
   38048 * ASM_OUTPUT_ALIGNED_LOCAL:              Uninitialized Data. (line   87)
   38049 * ASM_OUTPUT_ASCII:                      Data Output.        (line   50)
   38050 * ASM_OUTPUT_BSS:                        Uninitialized Data. (line   39)
   38051 * ASM_OUTPUT_CASE_END:                   Dispatch Tables.    (line   51)
   38052 * ASM_OUTPUT_CASE_LABEL:                 Dispatch Tables.    (line   38)
   38053 * ASM_OUTPUT_COMMON:                     Uninitialized Data. (line   10)
   38054 * ASM_OUTPUT_DEBUG_LABEL:                Label Output.       (line  326)
   38055 * ASM_OUTPUT_DEF:                        Label Output.       (line  375)
   38056 * ASM_OUTPUT_DEF_FROM_DECLS:             Label Output.       (line  383)
   38057 * ASM_OUTPUT_DWARF_DELTA:                SDB and DWARF.      (line   42)
   38058 * ASM_OUTPUT_DWARF_OFFSET:               SDB and DWARF.      (line   46)
   38059 * ASM_OUTPUT_DWARF_PCREL:                SDB and DWARF.      (line   52)
   38060 * ASM_OUTPUT_EXTERNAL:                   Label Output.       (line  264)
   38061 * ASM_OUTPUT_FDESC:                      Data Output.        (line   59)
   38062 * ASM_OUTPUT_IDENT:                      File Framework.     (line   83)
   38063 * ASM_OUTPUT_INTERNAL_LABEL:             Label Output.       (line   17)
   38064 * ASM_OUTPUT_LABEL:                      Label Output.       (line    9)
   38065 * ASM_OUTPUT_LABEL_REF:                  Label Output.       (line  299)
   38066 * ASM_OUTPUT_LABELREF:                   Label Output.       (line  285)
   38067 * ASM_OUTPUT_LOCAL:                      Uninitialized Data. (line   74)
   38068 * ASM_OUTPUT_MAX_SKIP_ALIGN:             Alignment Output.   (line   88)
   38069 * ASM_OUTPUT_MEASURED_SIZE:              Label Output.       (line   41)
   38070 * ASM_OUTPUT_OPCODE:                     Instruction Output. (line   21)
   38071 * ASM_OUTPUT_POOL_EPILOGUE:              Data Output.        (line  109)
   38072 * ASM_OUTPUT_POOL_PROLOGUE:              Data Output.        (line   72)
   38073 * ASM_OUTPUT_REG_POP:                    Instruction Output. (line  178)
   38074 * ASM_OUTPUT_REG_PUSH:                   Instruction Output. (line  173)
   38075 * ASM_OUTPUT_SIZE_DIRECTIVE:             Label Output.       (line   35)
   38076 * ASM_OUTPUT_SKIP:                       Alignment Output.   (line   66)
   38077 * ASM_OUTPUT_SOURCE_FILENAME:            File Framework.     (line   68)
   38078 * ASM_OUTPUT_SPECIAL_POOL_ENTRY:         Data Output.        (line   84)
   38079 * ASM_OUTPUT_SYMBOL_REF:                 Label Output.       (line  292)
   38080 * ASM_OUTPUT_TYPE_DIRECTIVE:             Label Output.       (line   77)
   38081 * ASM_OUTPUT_WEAK_ALIAS:                 Label Output.       (line  401)
   38082 * ASM_OUTPUT_WEAKREF:                    Label Output.       (line  203)
   38083 * ASM_PREFERRED_EH_DATA_FORMAT:          Exception Handling. (line   67)
   38084 * ASM_SPEC:                              Driver.             (line  136)
   38085 * ASM_STABD_OP:                          DBX Options.        (line   36)
   38086 * ASM_STABN_OP:                          DBX Options.        (line   43)
   38087 * ASM_STABS_OP:                          DBX Options.        (line   29)
   38088 * ASM_WEAKEN_DECL:                       Label Output.       (line  195)
   38089 * ASM_WEAKEN_LABEL:                      Label Output.       (line  182)
   38090 * assemble_name:                         Label Output.       (line    8)
   38091 * assemble_name_raw:                     Label Output.       (line   16)
   38092 * assembler format:                      File Framework.     (line    6)
   38093 * assembler instructions in RTL:         Assembler.          (line    6)
   38094 * ASSEMBLER_DIALECT:                     Instruction Output. (line  146)
   38095 * assigning attribute values to insns:   Tagging Insns.      (line    6)
   38096 * assignment operator:                   Function Basics.    (line    6)
   38097 * asterisk in template:                  Output Statement.   (line   29)
   38098 * atan2M3 instruction pattern:           Standard Names.     (line  518)
   38099 * attr <1>:                              Tagging Insns.      (line   54)
   38100 * attr:                                  Expressions.        (line  154)
   38101 * attr_flag:                             Expressions.        (line  119)
   38102 * attribute expressions:                 Expressions.        (line    6)
   38103 * attribute specifications:              Attr Example.       (line    6)
   38104 * attribute specifications example:      Attr Example.       (line    6)
   38105 * attributes:                            Attributes.         (line    6)
   38106 * attributes, defining:                  Defining Attributes.
   38107                                                              (line    6)
   38108 * attributes, target-specific:           Target Attributes.  (line    6)
   38109 * autoincrement addressing, availability: Portability.       (line   21)
   38110 * autoincrement/decrement addressing:    Simple Constraints. (line   28)
   38111 * automata_option:                       Processor pipeline description.
   38112                                                              (line  296)
   38113 * automaton based pipeline description:  Processor pipeline description.
   38114                                                              (line    6)
   38115 * automaton based scheduler:             Processor pipeline description.
   38116                                                              (line    6)
   38117 * AVOID_CCMODE_COPIES:                   Values in Registers.
   38118                                                              (line  144)
   38119 * backslash:                             Output Template.    (line   46)
   38120 * barrier:                               Insns.              (line  160)
   38121 * barrier and /f:                        Flags.              (line  110)
   38122 * barrier and /v:                        Flags.              (line   29)
   38123 * BASE_REG_CLASS:                        Register Classes.   (line  107)
   38124 * basic block:                           Basic Blocks.       (line    6)
   38125 * basic-block.h:                         Control Flow.       (line    6)
   38126 * BASIC_BLOCK:                           Basic Blocks.       (line   19)
   38127 * basic_block:                           Basic Blocks.       (line    6)
   38128 * BB_HEAD, BB_END:                       Maintaining the CFG.
   38129                                                              (line   88)
   38130 * bCOND instruction pattern:             Standard Names.     (line  935)
   38131 * BIGGEST_ALIGNMENT:                     Storage Layout.     (line  168)
   38132 * BIGGEST_FIELD_ALIGNMENT:               Storage Layout.     (line  181)
   38133 * BImode:                                Machine Modes.      (line   22)
   38134 * BIND_EXPR:                             Expression trees.   (line    6)
   38135 * BINFO_TYPE:                            Classes.            (line    6)
   38136 * bit-fields:                            Bit-Fields.         (line    6)
   38137 * BIT_AND_EXPR:                          Expression trees.   (line    6)
   38138 * BIT_IOR_EXPR:                          Expression trees.   (line    6)
   38139 * BIT_NOT_EXPR:                          Expression trees.   (line    6)
   38140 * BIT_XOR_EXPR:                          Expression trees.   (line    6)
   38141 * BITFIELD_NBYTES_LIMITED:               Storage Layout.     (line  332)
   38142 * BITS_BIG_ENDIAN:                       Storage Layout.     (line   12)
   38143 * BITS_BIG_ENDIAN, effect on sign_extract: Bit-Fields.       (line    8)
   38144 * BITS_PER_UNIT:                         Storage Layout.     (line   52)
   38145 * BITS_PER_WORD:                         Storage Layout.     (line   57)
   38146 * bitwise complement:                    Arithmetic.         (line  149)
   38147 * bitwise exclusive-or:                  Arithmetic.         (line  163)
   38148 * bitwise inclusive-or:                  Arithmetic.         (line  158)
   38149 * bitwise logical-and:                   Arithmetic.         (line  153)
   38150 * BLKmode:                               Machine Modes.      (line  183)
   38151 * BLKmode, and function return values:   Calls.              (line   23)
   38152 * block statement iterators <1>:         Maintaining the CFG.
   38153                                                              (line   45)
   38154 * block statement iterators:             Basic Blocks.       (line   68)
   38155 * BLOCK_FOR_INSN, bb_for_stmt:           Maintaining the CFG.
   38156                                                              (line   40)
   38157 * BLOCK_REG_PADDING:                     Register Arguments. (line  214)
   38158 * blockage instruction pattern:          Standard Names.     (line 1402)
   38159 * Blocks:                                Blocks.             (line    6)
   38160 * bool <1>:                              Exception Region Output.
   38161                                                              (line   60)
   38162 * bool:                                  Sections.           (line  280)
   38163 * BOOL_TYPE_SIZE:                        Type Layout.        (line   44)
   38164 * BOOLEAN_TYPE:                          Types.              (line    6)
   38165 * branch prediction:                     Profile information.
   38166                                                              (line   24)
   38167 * BRANCH_COST:                           Costs.              (line   52)
   38168 * break_out_memory_refs:                 Addressing Modes.   (line  118)
   38169 * BREAK_STMT:                            Function Bodies.    (line    6)
   38170 * bsi_commit_edge_inserts:               Maintaining the CFG.
   38171                                                              (line  118)
   38172 * bsi_end_p:                             Maintaining the CFG.
   38173                                                              (line   60)
   38174 * bsi_insert_after:                      Maintaining the CFG.
   38175                                                              (line   72)
   38176 * bsi_insert_before:                     Maintaining the CFG.
   38177                                                              (line   78)
   38178 * bsi_insert_on_edge:                    Maintaining the CFG.
   38179                                                              (line  118)
   38180 * bsi_last:                              Maintaining the CFG.
   38181                                                              (line   56)
   38182 * bsi_next:                              Maintaining the CFG.
   38183                                                              (line   64)
   38184 * bsi_prev:                              Maintaining the CFG.
   38185                                                              (line   68)
   38186 * bsi_remove:                            Maintaining the CFG.
   38187                                                              (line   84)
   38188 * bsi_start:                             Maintaining the CFG.
   38189                                                              (line   52)
   38190 * BSS_SECTION_ASM_OP:                    Sections.           (line   68)
   38191 * bswap:                                 Arithmetic.         (line  232)
   38192 * btruncM2 instruction pattern:          Standard Names.     (line  536)
   38193 * builtin_longjmp instruction pattern:   Standard Names.     (line 1307)
   38194 * builtin_setjmp_receiver instruction pattern: Standard Names.
   38195                                                              (line 1297)
   38196 * builtin_setjmp_setup instruction pattern: Standard Names.  (line 1286)
   38197 * byte_mode:                             Machine Modes.      (line  336)
   38198 * BYTES_BIG_ENDIAN:                      Storage Layout.     (line   24)
   38199 * BYTES_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  136)
   38200 * C statements for assembler output:     Output Statement.   (line    6)
   38201 * C/C++ Internal Representation:         Trees.              (line    6)
   38202 * C99 math functions, implicit usage:    Library Calls.      (line   76)
   38203 * C_COMMON_OVERRIDE_OPTIONS:             Run-time Target.    (line  114)
   38204 * c_register_pragma:                     Misc.               (line  404)
   38205 * c_register_pragma_with_expansion:      Misc.               (line  406)
   38206 * call <1>:                              Side Effects.       (line   86)
   38207 * call:                                  Flags.              (line  219)
   38208 * call instruction pattern:              Standard Names.     (line  968)
   38209 * call usage:                            Calls.              (line   10)
   38210 * call, in mem:                          Flags.              (line   84)
   38211 * call-clobbered register:               Register Basics.    (line   35)
   38212 * call-saved register:                   Register Basics.    (line   35)
   38213 * call-used register:                    Register Basics.    (line   35)
   38214 * CALL_EXPR:                             Expression trees.   (line    6)
   38215 * call_insn:                             Insns.              (line   95)
   38216 * call_insn and /f:                      Flags.              (line  110)
   38217 * call_insn and /j:                      Flags.              (line  164)
   38218 * call_insn and /s:                      Flags.              (line   34)
   38219 * call_insn and /u:                      Flags.              (line   19)
   38220 * call_insn and /v:                      Flags.              (line   29)
   38221 * CALL_INSN_FUNCTION_USAGE:              Insns.              (line  101)
   38222 * call_pop instruction pattern:          Standard Names.     (line  996)
   38223 * CALL_POPS_ARGS:                        Stack Arguments.    (line  128)
   38224 * CALL_REALLY_USED_REGISTERS:            Register Basics.    (line   46)
   38225 * CALL_USED_REGISTERS:                   Register Basics.    (line   35)
   38226 * call_used_regs:                        Register Basics.    (line   59)
   38227 * call_value instruction pattern:        Standard Names.     (line  988)
   38228 * call_value_pop instruction pattern:    Standard Names.     (line  996)
   38229 * CALLER_SAVE_PROFITABLE:                Caller Saves.       (line   11)
   38230 * calling conventions:                   Stack and Calling.  (line    6)
   38231 * calling functions in RTL:              Calls.              (line    6)
   38232 * can_create_pseudo_p:                   Standard Names.     (line   75)
   38233 * CAN_DEBUG_WITHOUT_FP:                  Run-time Target.    (line  147)
   38234 * CAN_ELIMINATE:                         Elimination.        (line   71)
   38235 * can_fallthru:                          Basic Blocks.       (line   57)
   38236 * canadian:                              Configure Terms.    (line    6)
   38237 * CANNOT_CHANGE_MODE_CLASS:              Register Classes.   (line  481)
   38238 * canonicalization of instructions:      Insn Canonicalizations.
   38239                                                              (line    6)
   38240 * CANONICALIZE_COMPARISON:               Condition Code.     (line   84)
   38241 * canonicalize_funcptr_for_compare instruction pattern: Standard Names.
   38242                                                              (line 1152)
   38243 * CASE_USE_BIT_TESTS:                    Misc.               (line   54)
   38244 * CASE_VALUES_THRESHOLD:                 Misc.               (line   47)
   38245 * CASE_VECTOR_MODE:                      Misc.               (line   27)
   38246 * CASE_VECTOR_PC_RELATIVE:               Misc.               (line   40)
   38247 * CASE_VECTOR_SHORTEN_MODE:              Misc.               (line   31)
   38248 * casesi instruction pattern:            Standard Names.     (line 1076)
   38249 * cbranchMODE4 instruction pattern:      Standard Names.     (line  957)
   38250 * cc0:                                   Regs and Memory.    (line  182)
   38251 * cc0, RTL sharing:                      Sharing.            (line   27)
   38252 * cc0_rtx:                               Regs and Memory.    (line  208)
   38253 * CC1_SPEC:                              Driver.             (line  118)
   38254 * CC1PLUS_SPEC:                          Driver.             (line  126)
   38255 * cc_status:                             Condition Code.     (line    8)
   38256 * CC_STATUS_MDEP:                        Condition Code.     (line   19)
   38257 * CC_STATUS_MDEP_INIT:                   Condition Code.     (line   25)
   38258 * CCmode:                                Machine Modes.      (line  176)
   38259 * CDImode:                               Machine Modes.      (line  202)
   38260 * CEIL_DIV_EXPR:                         Expression trees.   (line    6)
   38261 * CEIL_MOD_EXPR:                         Expression trees.   (line    6)
   38262 * ceilM2 instruction pattern:            Standard Names.     (line  552)
   38263 * CFA_FRAME_BASE_OFFSET:                 Frame Layout.       (line  226)
   38264 * CFG, Control Flow Graph:               Control Flow.       (line    6)
   38265 * cfghooks.h:                            Maintaining the CFG.
   38266                                                              (line    6)
   38267 * cgraph_finalize_function:              Parsing pass.       (line   52)
   38268 * chain_circular:                        GTY Options.        (line  196)
   38269 * chain_next:                            GTY Options.        (line  196)
   38270 * chain_prev:                            GTY Options.        (line  196)
   38271 * change_address:                        Standard Names.     (line   47)
   38272 * CHANGE_DYNAMIC_TYPE_EXPR:              Expression trees.   (line    6)
   38273 * char <1>:                              Misc.               (line  693)
   38274 * char <2>:                              PCH Target.         (line   12)
   38275 * char:                                  Sections.           (line  272)
   38276 * CHAR_TYPE_SIZE:                        Type Layout.        (line   39)
   38277 * check_stack instruction pattern:       Standard Names.     (line 1239)
   38278 * CHImode:                               Machine Modes.      (line  202)
   38279 * class:                                 Classes.            (line    6)
   38280 * class definitions, register:           Register Classes.   (line    6)
   38281 * class preference constraints:          Class Preferences.  (line    6)
   38282 * CLASS_LIKELY_SPILLED_P:                Register Classes.   (line  452)
   38283 * CLASS_MAX_NREGS:                       Register Classes.   (line  469)
   38284 * CLASS_TYPE_P:                          Types.              (line   80)
   38285 * classes of RTX codes:                  RTL Classes.        (line    6)
   38286 * CLASSTYPE_DECLARED_CLASS:              Classes.            (line    6)
   38287 * CLASSTYPE_HAS_MUTABLE:                 Classes.            (line   80)
   38288 * CLASSTYPE_NON_POD_P:                   Classes.            (line   85)
   38289 * CLEANUP_DECL:                          Function Bodies.    (line    6)
   38290 * CLEANUP_EXPR:                          Function Bodies.    (line    6)
   38291 * CLEANUP_POINT_EXPR:                    Expression trees.   (line    6)
   38292 * CLEANUP_STMT:                          Function Bodies.    (line    6)
   38293 * Cleanups:                              Cleanups.           (line    6)
   38294 * CLEAR_BY_PIECES_P:                     Costs.              (line  124)
   38295 * clear_cache instruction pattern:       Standard Names.     (line 1549)
   38296 * CLEAR_INSN_CACHE:                      Trampolines.        (line  100)
   38297 * CLEAR_RATIO:                           Costs.              (line  115)
   38298 * clobber:                               Side Effects.       (line  100)
   38299 * clz:                                   Arithmetic.         (line  208)
   38300 * CLZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  319)
   38301 * clzM2 instruction pattern:             Standard Names.     (line  617)
   38302 * cmpM instruction pattern:              Standard Names.     (line  650)
   38303 * cmpmemM instruction pattern:           Standard Names.     (line  763)
   38304 * cmpstrM instruction pattern:           Standard Names.     (line  744)
   38305 * cmpstrnM instruction pattern:          Standard Names.     (line  732)
   38306 * code generation RTL sequences:         Expander Definitions.
   38307                                                              (line    6)
   38308 * code iterators in .md files:           Code Iterators.     (line    6)
   38309 * code_label:                            Insns.              (line  119)
   38310 * code_label and /i:                     Flags.              (line   44)
   38311 * code_label and /v:                     Flags.              (line   29)
   38312 * CODE_LABEL_NUMBER:                     Insns.              (line  119)
   38313 * codes, RTL expression:                 RTL Objects.        (line   47)
   38314 * COImode:                               Machine Modes.      (line  202)
   38315 * COLLECT2_HOST_INITIALIZATION:          Host Misc.          (line   32)
   38316 * COLLECT_EXPORT_LIST:                   Misc.               (line  775)
   38317 * COLLECT_SHARED_FINI_FUNC:              Macros for Initialization.
   38318                                                              (line   44)
   38319 * COLLECT_SHARED_INIT_FUNC:              Macros for Initialization.
   38320                                                              (line   33)
   38321 * combiner pass:                         Regs and Memory.    (line  148)
   38322 * commit_edge_insertions:                Maintaining the CFG.
   38323                                                              (line  118)
   38324 * compare:                               Arithmetic.         (line   43)
   38325 * compare, canonicalization of:          Insn Canonicalizations.
   38326                                                              (line   37)
   38327 * comparison_operator:                   Machine-Independent Predicates.
   38328                                                              (line  111)
   38329 * compiler passes and files:             Passes.             (line    6)
   38330 * complement, bitwise:                   Arithmetic.         (line  149)
   38331 * COMPLEX_CST:                           Expression trees.   (line    6)
   38332 * COMPLEX_EXPR:                          Expression trees.   (line    6)
   38333 * COMPLEX_TYPE:                          Types.              (line    6)
   38334 * COMPONENT_REF:                         Expression trees.   (line    6)
   38335 * Compound Expressions:                  Compound Expressions.
   38336                                                              (line    6)
   38337 * Compound Lvalues:                      Compound Lvalues.   (line    6)
   38338 * COMPOUND_EXPR:                         Expression trees.   (line    6)
   38339 * COMPOUND_LITERAL_EXPR:                 Expression trees.   (line    6)
   38340 * COMPOUND_LITERAL_EXPR_DECL:            Expression trees.   (line  608)
   38341 * COMPOUND_LITERAL_EXPR_DECL_STMT:       Expression trees.   (line  608)
   38342 * computed jump:                         Edges.              (line  128)
   38343 * computing the length of an insn:       Insn Lengths.       (line    6)
   38344 * concat:                                Regs and Memory.    (line  267)
   38345 * concatn:                               Regs and Memory.    (line  273)
   38346 * cond:                                  Comparisons.        (line   90)
   38347 * cond and attributes:                   Expressions.        (line   37)
   38348 * cond_exec:                             Side Effects.       (line  245)
   38349 * COND_EXPR:                             Expression trees.   (line    6)
   38350 * condition code register:               Regs and Memory.    (line  182)
   38351 * condition code status:                 Condition Code.     (line    6)
   38352 * condition codes:                       Comparisons.        (line   20)
   38353 * conditional execution:                 Conditional Execution.
   38354                                                              (line    6)
   38355 * Conditional Expressions:               Conditional Expressions.
   38356                                                              (line    6)
   38357 * CONDITIONAL_REGISTER_USAGE:            Register Basics.    (line   60)
   38358 * conditional_trap instruction pattern:  Standard Names.     (line 1373)
   38359 * conditions, in patterns:               Patterns.           (line   43)
   38360 * configuration file <1>:                Host Misc.          (line    6)
   38361 * configuration file:                    Filesystem.         (line    6)
   38362 * configure terms:                       Configure Terms.    (line    6)
   38363 * CONJ_EXPR:                             Expression trees.   (line    6)
   38364 * CONST0_RTX:                            Constants.          (line   81)
   38365 * const0_rtx:                            Constants.          (line   16)
   38366 * CONST1_RTX:                            Constants.          (line   81)
   38367 * const1_rtx:                            Constants.          (line   16)
   38368 * CONST2_RTX:                            Constants.          (line   81)
   38369 * const2_rtx:                            Constants.          (line   16)
   38370 * CONST_DECL:                            Declarations.       (line    6)
   38371 * const_double:                          Constants.          (line   32)
   38372 * const_double, RTL sharing:             Sharing.            (line   29)
   38373 * CONST_DOUBLE_CHAIN:                    Constants.          (line   59)
   38374 * CONST_DOUBLE_LOW:                      Constants.          (line   68)
   38375 * CONST_DOUBLE_MEM:                      Constants.          (line   59)
   38376 * CONST_DOUBLE_OK_FOR_CONSTRAINT_P:      Old Constraints.    (line   69)
   38377 * CONST_DOUBLE_OK_FOR_LETTER_P:          Old Constraints.    (line   54)
   38378 * const_double_operand:                  Machine-Independent Predicates.
   38379                                                              (line   21)
   38380 * const_fixed:                           Constants.          (line   39)
   38381 * const_int:                             Constants.          (line    8)
   38382 * const_int and attribute tests:         Expressions.        (line   47)
   38383 * const_int and attributes:              Expressions.        (line   10)
   38384 * const_int, RTL sharing:                Sharing.            (line   23)
   38385 * const_int_operand:                     Machine-Independent Predicates.
   38386                                                              (line   16)
   38387 * CONST_OK_FOR_CONSTRAINT_P:             Old Constraints.    (line   49)
   38388 * CONST_OK_FOR_LETTER_P:                 Old Constraints.    (line   40)
   38389 * CONST_OR_PURE_CALL_P:                  Flags.              (line   19)
   38390 * const_string:                          Constants.          (line   90)
   38391 * const_string and attributes:           Expressions.        (line   20)
   38392 * const_true_rtx:                        Constants.          (line   26)
   38393 * const_vector:                          Constants.          (line   47)
   38394 * const_vector, RTL sharing:             Sharing.            (line   32)
   38395 * constant attributes:                   Constant Attributes.
   38396                                                              (line    6)
   38397 * constant definitions:                  Constant Definitions.
   38398                                                              (line    6)
   38399 * CONSTANT_ADDRESS_P:                    Addressing Modes.   (line   29)
   38400 * CONSTANT_ALIGNMENT:                    Storage Layout.     (line  221)
   38401 * CONSTANT_P:                            Addressing Modes.   (line   35)
   38402 * CONSTANT_POOL_ADDRESS_P:               Flags.              (line   10)
   38403 * CONSTANT_POOL_BEFORE_FUNCTION:         Data Output.        (line   64)
   38404 * constants in constraints:              Simple Constraints. (line   58)
   38405 * constm1_rtx:                           Constants.          (line   16)
   38406 * constraint modifier characters:        Modifiers.          (line    6)
   38407 * constraint, matching:                  Simple Constraints. (line  130)
   38408 * CONSTRAINT_LEN:                        Old Constraints.    (line   12)
   38409 * constraint_num:                        C Constraint Interface.
   38410                                                              (line   38)
   38411 * constraint_satisfied_p:                C Constraint Interface.
   38412                                                              (line   54)
   38413 * constraints:                           Constraints.        (line    6)
   38414 * constraints, defining:                 Define Constraints. (line    6)
   38415 * constraints, defining, obsolete method: Old Constraints.   (line    6)
   38416 * constraints, machine specific:         Machine Constraints.
   38417                                                              (line    6)
   38418 * constraints, testing:                  C Constraint Interface.
   38419                                                              (line    6)
   38420 * CONSTRUCTOR:                           Expression trees.   (line    6)
   38421 * constructor:                           Function Basics.    (line    6)
   38422 * constructors, automatic calls:         Collect2.           (line   15)
   38423 * constructors, output of:               Initialization.     (line    6)
   38424 * container:                             Containers.         (line    6)
   38425 * CONTINUE_STMT:                         Function Bodies.    (line    6)
   38426 * contributors:                          Contributors.       (line    6)
   38427 * controlling register usage:            Register Basics.    (line   76)
   38428 * controlling the compilation driver:    Driver.             (line    6)
   38429 * conventions, run-time:                 Interface.          (line    6)
   38430 * conversions:                           Conversions.        (line    6)
   38431 * CONVERT_EXPR:                          Expression trees.   (line    6)
   38432 * copy constructor:                      Function Basics.    (line    6)
   38433 * copy_rtx:                              Addressing Modes.   (line  170)
   38434 * copy_rtx_if_shared:                    Sharing.            (line   64)
   38435 * copysignM3 instruction pattern:        Standard Names.     (line  598)
   38436 * cosM2 instruction pattern:             Standard Names.     (line  477)
   38437 * costs of instructions:                 Costs.              (line    6)
   38438 * CP_INTEGRAL_TYPE:                      Types.              (line   72)
   38439 * cp_namespace_decls:                    Namespaces.         (line   44)
   38440 * CP_TYPE_CONST_NON_VOLATILE_P:          Types.              (line   45)
   38441 * CP_TYPE_CONST_P:                       Types.              (line   36)
   38442 * CP_TYPE_QUALS:                         Types.              (line    6)
   38443 * CP_TYPE_RESTRICT_P:                    Types.              (line   42)
   38444 * CP_TYPE_VOLATILE_P:                    Types.              (line   39)
   38445 * CPLUSPLUS_CPP_SPEC:                    Driver.             (line  113)
   38446 * CPP_SPEC:                              Driver.             (line  106)
   38447 * CQImode:                               Machine Modes.      (line  202)
   38448 * cross compilation and floating point:  Floating Point.     (line    6)
   38449 * CRT_CALL_STATIC_FUNCTION:              Sections.           (line  112)
   38450 * CRTSTUFF_T_CFLAGS:                     Target Fragment.    (line   35)
   38451 * CRTSTUFF_T_CFLAGS_S:                   Target Fragment.    (line   39)
   38452 * CSImode:                               Machine Modes.      (line  202)
   38453 * CTImode:                               Machine Modes.      (line  202)
   38454 * ctz:                                   Arithmetic.         (line  216)
   38455 * CTZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  320)
   38456 * ctzM2 instruction pattern:             Standard Names.     (line  626)
   38457 * CUMULATIVE_ARGS:                       Register Arguments. (line  127)
   38458 * current_function_epilogue_delay_list:  Function Entry.     (line  181)
   38459 * current_function_is_leaf:              Leaf Functions.     (line   51)
   38460 * current_function_outgoing_args_size:   Stack Arguments.    (line   45)
   38461 * current_function_pops_args:            Function Entry.     (line  106)
   38462 * current_function_pretend_args_size:    Function Entry.     (line  112)
   38463 * current_function_uses_only_leaf_regs:  Leaf Functions.     (line   51)
   38464 * current_insn_predicate:                Conditional Execution.
   38465                                                              (line   26)
   38466 * DAmode:                                Machine Modes.      (line  152)
   38467 * data bypass:                           Processor pipeline description.
   38468                                                              (line  106)
   38469 * data dependence delays:                Processor pipeline description.
   38470                                                              (line    6)
   38471 * Data Dependency Analysis:              Dependency analysis.
   38472                                                              (line    6)
   38473 * data structures:                       Per-Function Data.  (line    6)
   38474 * DATA_ALIGNMENT:                        Storage Layout.     (line  208)
   38475 * DATA_SECTION_ASM_OP:                   Sections.           (line   53)
   38476 * DBR_OUTPUT_SEQEND:                     Instruction Output. (line  107)
   38477 * dbr_sequence_length:                   Instruction Output. (line  106)
   38478 * DBX_BLOCKS_FUNCTION_RELATIVE:          DBX Options.        (line  103)
   38479 * DBX_CONTIN_CHAR:                       DBX Options.        (line   66)
   38480 * DBX_CONTIN_LENGTH:                     DBX Options.        (line   56)
   38481 * DBX_DEBUGGING_INFO:                    DBX Options.        (line    9)
   38482 * DBX_FUNCTION_FIRST:                    DBX Options.        (line   97)
   38483 * DBX_LINES_FUNCTION_RELATIVE:           DBX Options.        (line  109)
   38484 * DBX_NO_XREFS:                          DBX Options.        (line   50)
   38485 * DBX_OUTPUT_LBRAC:                      DBX Hooks.          (line    9)
   38486 * DBX_OUTPUT_MAIN_SOURCE_FILE_END:       File Names and DBX. (line   34)
   38487 * DBX_OUTPUT_MAIN_SOURCE_FILENAME:       File Names and DBX. (line    9)
   38488 * DBX_OUTPUT_NFUN:                       DBX Hooks.          (line   18)
   38489 * DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END: File Names and DBX.
   38490                                                              (line   42)
   38491 * DBX_OUTPUT_RBRAC:                      DBX Hooks.          (line   15)
   38492 * DBX_OUTPUT_SOURCE_LINE:                DBX Hooks.          (line   22)
   38493 * DBX_REGISTER_NUMBER:                   All Debuggers.      (line    9)
   38494 * DBX_REGPARM_STABS_CODE:                DBX Options.        (line   87)
   38495 * DBX_REGPARM_STABS_LETTER:              DBX Options.        (line   92)
   38496 * DBX_STATIC_CONST_VAR_CODE:             DBX Options.        (line   82)
   38497 * DBX_STATIC_STAB_DATA_SECTION:          DBX Options.        (line   73)
   38498 * DBX_TYPE_DECL_STABS_CODE:              DBX Options.        (line   78)
   38499 * DBX_USE_BINCL:                         DBX Options.        (line  115)
   38500 * DCmode:                                Machine Modes.      (line  197)
   38501 * DDmode:                                Machine Modes.      (line   90)
   38502 * De Morgan's law:                       Insn Canonicalizations.
   38503                                                              (line   57)
   38504 * dead_or_set_p:                         define_peephole.    (line   65)
   38505 * DEBUG_SYMS_TEXT:                       DBX Options.        (line   25)
   38506 * DEBUGGER_ARG_OFFSET:                   All Debuggers.      (line   37)
   38507 * DEBUGGER_AUTO_OFFSET:                  All Debuggers.      (line   28)
   38508 * decimal float library:                 Decimal float library routines.
   38509                                                              (line    6)
   38510 * DECL_ALIGN:                            Declarations.       (line    6)
   38511 * DECL_ANTICIPATED:                      Function Basics.    (line   48)
   38512 * DECL_ARGUMENTS:                        Function Basics.    (line  163)
   38513 * DECL_ARRAY_DELETE_OPERATOR_P:          Function Basics.    (line  184)
   38514 * DECL_ARTIFICIAL <1>:                   Function Basics.    (line    6)
   38515 * DECL_ARTIFICIAL:                       Working with declarations.
   38516                                                              (line   24)
   38517 * DECL_ASSEMBLER_NAME:                   Function Basics.    (line    6)
   38518 * DECL_ATTRIBUTES:                       Attributes.         (line   22)
   38519 * DECL_BASE_CONSTRUCTOR_P:               Function Basics.    (line   94)
   38520 * DECL_CLASS_SCOPE_P:                    Working with declarations.
   38521                                                              (line   41)
   38522 * DECL_COMPLETE_CONSTRUCTOR_P:           Function Basics.    (line   90)
   38523 * DECL_COMPLETE_DESTRUCTOR_P:            Function Basics.    (line  104)
   38524 * DECL_CONST_MEMFUNC_P:                  Function Basics.    (line   77)
   38525 * DECL_CONSTRUCTOR_P:                    Function Basics.    (line    6)
   38526 * DECL_CONTEXT:                          Namespaces.         (line   26)
   38527 * DECL_CONV_FN_P:                        Function Basics.    (line    6)
   38528 * DECL_COPY_CONSTRUCTOR_P:               Function Basics.    (line   98)
   38529 * DECL_DESTRUCTOR_P:                     Function Basics.    (line    6)
   38530 * DECL_EXTERN_C_FUNCTION_P:              Function Basics.    (line   52)
   38531 * DECL_EXTERNAL <1>:                     Function Basics.    (line   38)
   38532 * DECL_EXTERNAL:                         Declarations.       (line    6)
   38533 * DECL_FUNCTION_MEMBER_P:                Function Basics.    (line    6)
   38534 * DECL_FUNCTION_SCOPE_P:                 Working with declarations.
   38535                                                              (line   44)
   38536 * DECL_GLOBAL_CTOR_P:                    Function Basics.    (line    6)
   38537 * DECL_GLOBAL_DTOR_P:                    Function Basics.    (line    6)
   38538 * DECL_INITIAL:                          Declarations.       (line    6)
   38539 * DECL_LINKONCE_P:                       Function Basics.    (line    6)
   38540 * DECL_LOCAL_FUNCTION_P:                 Function Basics.    (line   44)
   38541 * DECL_MAIN_P:                           Function Basics.    (line    7)
   38542 * DECL_NAME <1>:                         Function Basics.    (line    6)
   38543 * DECL_NAME <2>:                         Working with declarations.
   38544                                                              (line    7)
   38545 * DECL_NAME:                             Namespaces.         (line   15)
   38546 * DECL_NAMESPACE_ALIAS:                  Namespaces.         (line   30)
   38547 * DECL_NAMESPACE_SCOPE_P:                Working with declarations.
   38548                                                              (line   37)
   38549 * DECL_NAMESPACE_STD_P:                  Namespaces.         (line   40)
   38550 * DECL_NON_THUNK_FUNCTION_P:             Function Basics.    (line  144)
   38551 * DECL_NONCONVERTING_P:                  Function Basics.    (line   86)
   38552 * DECL_NONSTATIC_MEMBER_FUNCTION_P:      Function Basics.    (line   74)
   38553 * DECL_OVERLOADED_OPERATOR_P:            Function Basics.    (line    6)
   38554 * DECL_RESULT:                           Function Basics.    (line  168)
   38555 * DECL_SIZE:                             Declarations.       (line    6)
   38556 * DECL_STATIC_FUNCTION_P:                Function Basics.    (line   71)
   38557 * DECL_STMT:                             Function Bodies.    (line    6)
   38558 * DECL_STMT_DECL:                        Function Bodies.    (line    6)
   38559 * DECL_THUNK_P:                          Function Basics.    (line  122)
   38560 * DECL_VOLATILE_MEMFUNC_P:               Function Basics.    (line   80)
   38561 * declaration:                           Declarations.       (line    6)
   38562 * declarations, RTL:                     RTL Declarations.   (line    6)
   38563 * DECLARE_LIBRARY_RENAMES:               Library Calls.      (line    9)
   38564 * decrement_and_branch_until_zero instruction pattern: Standard Names.
   38565                                                              (line 1114)
   38566 * default:                               GTY Options.        (line   82)
   38567 * default_file_start:                    File Framework.     (line    9)
   38568 * DEFAULT_GDB_EXTENSIONS:                DBX Options.        (line   18)
   38569 * DEFAULT_PCC_STRUCT_RETURN:             Aggregate Return.   (line   34)
   38570 * DEFAULT_SIGNED_CHAR:                   Type Layout.        (line  154)
   38571 * define_address_constraint:             Define Constraints. (line  107)
   38572 * define_asm_attributes:                 Tagging Insns.      (line   73)
   38573 * define_attr:                           Defining Attributes.
   38574                                                              (line    6)
   38575 * define_automaton:                      Processor pipeline description.
   38576                                                              (line   53)
   38577 * define_bypass:                         Processor pipeline description.
   38578                                                              (line  197)
   38579 * define_code_attr:                      Code Iterators.     (line    6)
   38580 * define_code_iterator:                  Code Iterators.     (line    6)
   38581 * define_cond_exec:                      Conditional Execution.
   38582                                                              (line   13)
   38583 * define_constants:                      Constant Definitions.
   38584                                                              (line    6)
   38585 * define_constraint:                     Define Constraints. (line   48)
   38586 * define_cpu_unit:                       Processor pipeline description.
   38587                                                              (line   68)
   38588 * define_delay:                          Delay Slots.        (line   25)
   38589 * define_expand:                         Expander Definitions.
   38590                                                              (line   11)
   38591 * define_insn:                           Patterns.           (line    6)
   38592 * define_insn example:                   Example.            (line    6)
   38593 * define_insn_and_split:                 Insn Splitting.     (line  170)
   38594 * define_insn_reservation:               Processor pipeline description.
   38595                                                              (line  106)
   38596 * define_memory_constraint:              Define Constraints. (line   88)
   38597 * define_mode_attr:                      Substitutions.      (line    6)
   38598 * define_mode_iterator:                  Defining Mode Iterators.
   38599                                                              (line    6)
   38600 * define_peephole:                       define_peephole.    (line    6)
   38601 * define_peephole2:                      define_peephole2.   (line    6)
   38602 * define_predicate:                      Defining Predicates.
   38603                                                              (line    6)
   38604 * define_query_cpu_unit:                 Processor pipeline description.
   38605                                                              (line   90)
   38606 * define_register_constraint:            Define Constraints. (line   28)
   38607 * define_reservation:                    Processor pipeline description.
   38608                                                              (line  186)
   38609 * define_special_predicate:              Defining Predicates.
   38610                                                              (line    6)
   38611 * define_split:                          Insn Splitting.     (line   32)
   38612 * defining attributes and their values:  Defining Attributes.
   38613                                                              (line    6)
   38614 * defining constraints:                  Define Constraints. (line    6)
   38615 * defining constraints, obsolete method: Old Constraints.    (line    6)
   38616 * defining jump instruction patterns:    Jump Patterns.      (line    6)
   38617 * defining looping instruction patterns: Looping Patterns.   (line    6)
   38618 * defining peephole optimizers:          Peephole Definitions.
   38619                                                              (line    6)
   38620 * defining predicates:                   Defining Predicates.
   38621                                                              (line    6)
   38622 * defining RTL sequences for code generation: Expander Definitions.
   38623                                                              (line    6)
   38624 * delay slots, defining:                 Delay Slots.        (line    6)
   38625 * DELAY_SLOTS_FOR_EPILOGUE:              Function Entry.     (line  163)
   38626 * deletable:                             GTY Options.        (line  150)
   38627 * DELETE_IF_ORDINARY:                    Filesystem.         (line   79)
   38628 * Dependent Patterns:                    Dependent Patterns. (line    6)
   38629 * desc:                                  GTY Options.        (line   82)
   38630 * destructor:                            Function Basics.    (line    6)
   38631 * destructors, output of:                Initialization.     (line    6)
   38632 * deterministic finite state automaton:  Processor pipeline description.
   38633                                                              (line    6)
   38634 * DF_SIZE:                               Type Layout.        (line  130)
   38635 * DFmode:                                Machine Modes.      (line   73)
   38636 * digits in constraint:                  Simple Constraints. (line  118)
   38637 * DImode:                                Machine Modes.      (line   45)
   38638 * DIR_SEPARATOR:                         Filesystem.         (line   18)
   38639 * DIR_SEPARATOR_2:                       Filesystem.         (line   19)
   38640 * directory options .md:                 Including Patterns. (line   44)
   38641 * disabling certain registers:           Register Basics.    (line   76)
   38642 * dispatch table:                        Dispatch Tables.    (line    8)
   38643 * div:                                   Arithmetic.         (line  111)
   38644 * div and attributes:                    Expressions.        (line   64)
   38645 * division:                              Arithmetic.         (line  111)
   38646 * divM3 instruction pattern:             Standard Names.     (line  222)
   38647 * divmodM4 instruction pattern:          Standard Names.     (line  411)
   38648 * DO_BODY:                               Function Bodies.    (line    6)
   38649 * DO_COND:                               Function Bodies.    (line    6)
   38650 * DO_STMT:                               Function Bodies.    (line    6)
   38651 * DOLLARS_IN_IDENTIFIERS:                Misc.               (line  496)
   38652 * doloop_begin instruction pattern:      Standard Names.     (line 1145)
   38653 * doloop_end instruction pattern:        Standard Names.     (line 1124)
   38654 * DONE:                                  Expander Definitions.
   38655                                                              (line   74)
   38656 * DONT_USE_BUILTIN_SETJMP:               Exception Region Output.
   38657                                                              (line   70)
   38658 * DOUBLE_TYPE_SIZE:                      Type Layout.        (line   53)
   38659 * DQmode:                                Machine Modes.      (line  115)
   38660 * driver:                                Driver.             (line    6)
   38661 * DRIVER_SELF_SPECS:                     Driver.             (line   71)
   38662 * DUMPFILE_FORMAT:                       Filesystem.         (line   67)
   38663 * DWARF2_ASM_LINE_DEBUG_INFO:            SDB and DWARF.      (line   36)
   38664 * DWARF2_DEBUGGING_INFO:                 SDB and DWARF.      (line   13)
   38665 * DWARF2_FRAME_INFO:                     SDB and DWARF.      (line   30)
   38666 * DWARF2_FRAME_REG_OUT:                  Frame Registers.    (line  133)
   38667 * DWARF2_UNWIND_INFO:                    Exception Region Output.
   38668                                                              (line   40)
   38669 * DWARF_ALT_FRAME_RETURN_COLUMN:         Frame Layout.       (line  152)
   38670 * DWARF_CIE_DATA_ALIGNMENT:              Exception Region Output.
   38671                                                              (line   75)
   38672 * DWARF_FRAME_REGISTERS:                 Frame Registers.    (line   93)
   38673 * DWARF_FRAME_REGNUM:                    Frame Registers.    (line  125)
   38674 * DWARF_REG_TO_UNWIND_COLUMN:            Frame Registers.    (line  117)
   38675 * DWARF_ZERO_REG:                        Frame Layout.       (line  163)
   38676 * DYNAMIC_CHAIN_ADDRESS:                 Frame Layout.       (line   92)
   38677 * E in constraint:                       Simple Constraints. (line   77)
   38678 * earlyclobber operand:                  Modifiers.          (line   25)
   38679 * edge:                                  Edges.              (line    6)
   38680 * edge in the flow graph:                Edges.              (line    6)
   38681 * edge iterators:                        Edges.              (line   15)
   38682 * edge splitting:                        Maintaining the CFG.
   38683                                                              (line  118)
   38684 * EDGE_ABNORMAL:                         Edges.              (line  128)
   38685 * EDGE_ABNORMAL, EDGE_ABNORMAL_CALL:     Edges.              (line  171)
   38686 * EDGE_ABNORMAL, EDGE_EH:                Edges.              (line   96)
   38687 * EDGE_ABNORMAL, EDGE_SIBCALL:           Edges.              (line  122)
   38688 * EDGE_FALLTHRU, force_nonfallthru:      Edges.              (line   86)
   38689 * EDOM, implicit usage:                  Library Calls.      (line   58)
   38690 * EH_FRAME_IN_DATA_SECTION:              Exception Region Output.
   38691                                                              (line   20)
   38692 * EH_FRAME_SECTION_NAME:                 Exception Region Output.
   38693                                                              (line   10)
   38694 * eh_return instruction pattern:         Standard Names.     (line 1313)
   38695 * EH_RETURN_DATA_REGNO:                  Exception Handling. (line    7)
   38696 * EH_RETURN_HANDLER_RTX:                 Exception Handling. (line   39)
   38697 * EH_RETURN_STACKADJ_RTX:                Exception Handling. (line   22)
   38698 * EH_TABLES_CAN_BE_READ_ONLY:            Exception Region Output.
   38699                                                              (line   29)
   38700 * EH_USES:                               Function Entry.     (line  158)
   38701 * ei_edge:                               Edges.              (line   43)
   38702 * ei_end_p:                              Edges.              (line   27)
   38703 * ei_last:                               Edges.              (line   23)
   38704 * ei_next:                               Edges.              (line   35)
   38705 * ei_one_before_end_p:                   Edges.              (line   31)
   38706 * ei_prev:                               Edges.              (line   39)
   38707 * ei_safe_safe:                          Edges.              (line   47)
   38708 * ei_start:                              Edges.              (line   19)
   38709 * ELIGIBLE_FOR_EPILOGUE_DELAY:           Function Entry.     (line  169)
   38710 * ELIMINABLE_REGS:                       Elimination.        (line   44)
   38711 * ELSE_CLAUSE:                           Function Bodies.    (line    6)
   38712 * Embedded C:                            Fixed-point fractional library routines.
   38713                                                              (line    6)
   38714 * EMIT_MODE_SET:                         Mode Switching.     (line   74)
   38715 * Empty Statements:                      Empty Statements.   (line    6)
   38716 * EMPTY_CLASS_EXPR:                      Function Bodies.    (line    6)
   38717 * EMPTY_FIELD_BOUNDARY:                  Storage Layout.     (line  245)
   38718 * ENABLE_EXECUTE_STACK:                  Trampolines.        (line  110)
   38719 * ENDFILE_SPEC:                          Driver.             (line  218)
   38720 * endianness:                            Portability.        (line   21)
   38721 * ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR:       Basic Blocks.       (line   28)
   38722 * enum machine_mode:                     Machine Modes.      (line    6)
   38723 * enum reg_class:                        Register Classes.   (line   65)
   38724 * ENUMERAL_TYPE:                         Types.              (line    6)
   38725 * epilogue:                              Function Entry.     (line    6)
   38726 * epilogue instruction pattern:          Standard Names.     (line 1345)
   38727 * EPILOGUE_USES:                         Function Entry.     (line  152)
   38728 * eq:                                    Comparisons.        (line   52)
   38729 * eq and attributes:                     Expressions.        (line   64)
   38730 * eq_attr:                               Expressions.        (line   85)
   38731 * EQ_EXPR:                               Expression trees.   (line    6)
   38732 * equal:                                 Comparisons.        (line   52)
   38733 * errno, implicit usage:                 Library Calls.      (line   70)
   38734 * EXACT_DIV_EXPR:                        Expression trees.   (line    6)
   38735 * examining SSA_NAMEs:                   SSA.                (line  221)
   38736 * exception handling <1>:                Exception Handling. (line    6)
   38737 * exception handling:                    Edges.              (line   96)
   38738 * exception_receiver instruction pattern: Standard Names.    (line 1277)
   38739 * exclamation point:                     Multi-Alternative.  (line   47)
   38740 * exclusion_set:                         Processor pipeline description.
   38741                                                              (line  215)
   38742 * exclusive-or, bitwise:                 Arithmetic.         (line  163)
   38743 * EXIT_EXPR:                             Expression trees.   (line    6)
   38744 * EXIT_IGNORE_STACK:                     Function Entry.     (line  140)
   38745 * expander definitions:                  Expander Definitions.
   38746                                                              (line    6)
   38747 * expM2 instruction pattern:             Standard Names.     (line  493)
   38748 * expr_list:                             Insns.              (line  550)
   38749 * EXPR_STMT:                             Function Bodies.    (line    6)
   38750 * EXPR_STMT_EXPR:                        Function Bodies.    (line    6)
   38751 * expression:                            Expression trees.   (line    6)
   38752 * expression codes:                      RTL Objects.        (line   47)
   38753 * extendMN2 instruction pattern:         Standard Names.     (line  820)
   38754 * extensible constraints:                Simple Constraints. (line  161)
   38755 * EXTRA_ADDRESS_CONSTRAINT:              Old Constraints.    (line  123)
   38756 * EXTRA_CONSTRAINT:                      Old Constraints.    (line   74)
   38757 * EXTRA_CONSTRAINT_STR:                  Old Constraints.    (line   95)
   38758 * EXTRA_MEMORY_CONSTRAINT:               Old Constraints.    (line  100)
   38759 * EXTRA_SPECS:                           Driver.             (line  245)
   38760 * extv instruction pattern:              Standard Names.     (line  856)
   38761 * extzv instruction pattern:             Standard Names.     (line  871)
   38762 * F in constraint:                       Simple Constraints. (line   82)
   38763 * FAIL:                                  Expander Definitions.
   38764                                                              (line   80)
   38765 * fall-thru:                             Edges.              (line   69)
   38766 * FATAL_EXIT_CODE:                       Host Misc.          (line    6)
   38767 * FDL, GNU Free Documentation License:   GNU Free Documentation License.
   38768                                                              (line    6)
   38769 * features, optional, in system conventions: Run-time Target.
   38770                                                              (line   59)
   38771 * ffs:                                   Arithmetic.         (line  202)
   38772 * ffsM2 instruction pattern:             Standard Names.     (line  607)
   38773 * FIELD_DECL:                            Declarations.       (line    6)
   38774 * file_end_indicate_exec_stack:          File Framework.     (line   41)
   38775 * files and passes of the compiler:      Passes.             (line    6)
   38776 * files, generated:                      Files.              (line    6)
   38777 * final_absence_set:                     Processor pipeline description.
   38778                                                              (line  215)
   38779 * FINAL_PRESCAN_INSN:                    Instruction Output. (line   46)
   38780 * final_presence_set:                    Processor pipeline description.
   38781                                                              (line  215)
   38782 * final_scan_insn:                       Function Entry.     (line  181)
   38783 * final_sequence:                        Instruction Output. (line  117)
   38784 * FIND_BASE_TERM:                        Addressing Modes.   (line  100)
   38785 * FINI_ARRAY_SECTION_ASM_OP:             Sections.           (line  105)
   38786 * FINI_SECTION_ASM_OP:                   Sections.           (line   90)
   38787 * finite state automaton minimization:   Processor pipeline description.
   38788                                                              (line  296)
   38789 * FIRST_PARM_OFFSET:                     Frame Layout.       (line   67)
   38790 * FIRST_PARM_OFFSET and virtual registers: Regs and Memory.  (line   65)
   38791 * FIRST_PSEUDO_REGISTER:                 Register Basics.    (line    9)
   38792 * FIRST_STACK_REG:                       Stack Registers.    (line   23)
   38793 * FIRST_VIRTUAL_REGISTER:                Regs and Memory.    (line   51)
   38794 * fix:                                   Conversions.        (line   66)
   38795 * FIX_TRUNC_EXPR:                        Expression trees.   (line    6)
   38796 * fix_truncMN2 instruction pattern:      Standard Names.     (line  807)
   38797 * fixed register:                        Register Basics.    (line   15)
   38798 * fixed-point fractional library:        Fixed-point fractional library routines.
   38799                                                              (line    6)
   38800 * FIXED_CONVERT_EXPR:                    Expression trees.   (line    6)
   38801 * FIXED_CST:                             Expression trees.   (line    6)
   38802 * FIXED_POINT_TYPE:                      Types.              (line    6)
   38803 * FIXED_REGISTERS:                       Register Basics.    (line   15)
   38804 * fixed_regs:                            Register Basics.    (line   59)
   38805 * fixMN2 instruction pattern:            Standard Names.     (line  787)
   38806 * FIXUNS_TRUNC_LIKE_FIX_TRUNC:           Misc.               (line  100)
   38807 * fixuns_truncMN2 instruction pattern:   Standard Names.     (line  811)
   38808 * fixunsMN2 instruction pattern:         Standard Names.     (line  796)
   38809 * flags in RTL expression:               Flags.              (line    6)
   38810 * float:                                 Conversions.        (line   58)
   38811 * FLOAT_EXPR:                            Expression trees.   (line    6)
   38812 * float_extend:                          Conversions.        (line   33)
   38813 * FLOAT_LIB_COMPARE_RETURNS_BOOL:        Library Calls.      (line   25)
   38814 * FLOAT_STORE_FLAG_VALUE:                Misc.               (line  301)
   38815 * float_truncate:                        Conversions.        (line   53)
   38816 * FLOAT_TYPE_SIZE:                       Type Layout.        (line   49)
   38817 * FLOAT_WORDS_BIG_ENDIAN:                Storage Layout.     (line   43)
   38818 * FLOAT_WORDS_BIG_ENDIAN, (lack of) effect on subreg: Regs and Memory.
   38819                                                              (line  140)
   38820 * floating point and cross compilation:  Floating Point.     (line    6)
   38821 * Floating Point Emulation:              Target Fragment.    (line   15)
   38822 * floating point emulation library, US Software GOFAST: Library Calls.
   38823                                                              (line   44)
   38824 * floatMN2 instruction pattern:          Standard Names.     (line  779)
   38825 * floatunsMN2 instruction pattern:       Standard Names.     (line  783)
   38826 * FLOOR_DIV_EXPR:                        Expression trees.   (line    6)
   38827 * FLOOR_MOD_EXPR:                        Expression trees.   (line    6)
   38828 * floorM2 instruction pattern:           Standard Names.     (line  528)
   38829 * flow-insensitive alias analysis:       Alias analysis.     (line    6)
   38830 * flow-sensitive alias analysis:         Alias analysis.     (line    6)
   38831 * fmodM3 instruction pattern:            Standard Names.     (line  459)
   38832 * FOR_BODY:                              Function Bodies.    (line    6)
   38833 * FOR_COND:                              Function Bodies.    (line    6)
   38834 * FOR_EXPR:                              Function Bodies.    (line    6)
   38835 * FOR_INIT_STMT:                         Function Bodies.    (line    6)
   38836 * FOR_STMT:                              Function Bodies.    (line    6)
   38837 * FORCE_CODE_SECTION_ALIGN:              Sections.           (line  136)
   38838 * force_reg:                             Standard Names.     (line   36)
   38839 * fract_convert:                         Conversions.        (line   83)
   38840 * FRACT_TYPE_SIZE:                       Type Layout.        (line   68)
   38841 * fractional types:                      Fixed-point fractional library routines.
   38842                                                              (line    6)
   38843 * fractMN2 instruction pattern:          Standard Names.     (line  829)
   38844 * fractunsMN2 instruction pattern:       Standard Names.     (line  844)
   38845 * frame layout:                          Frame Layout.       (line    6)
   38846 * FRAME_ADDR_RTX:                        Frame Layout.       (line  116)
   38847 * FRAME_GROWS_DOWNWARD:                  Frame Layout.       (line   31)
   38848 * FRAME_GROWS_DOWNWARD and virtual registers: Regs and Memory.
   38849                                                              (line   69)
   38850 * FRAME_POINTER_CFA_OFFSET:              Frame Layout.       (line  212)
   38851 * frame_pointer_needed:                  Function Entry.     (line   34)
   38852 * FRAME_POINTER_REGNUM:                  Frame Registers.    (line   14)
   38853 * FRAME_POINTER_REGNUM and virtual registers: Regs and Memory.
   38854                                                              (line   74)
   38855 * FRAME_POINTER_REQUIRED:                Elimination.        (line    9)
   38856 * frame_pointer_rtx:                     Frame Registers.    (line   85)
   38857 * frame_related:                         Flags.              (line  224)
   38858 * frame_related, in insn, call_insn, jump_insn, barrier, and set: Flags.
   38859                                                              (line  110)
   38860 * frame_related, in mem:                 Flags.              (line   88)
   38861 * frame_related, in reg:                 Flags.              (line   97)
   38862 * frame_related, in symbol_ref:          Flags.              (line  168)
   38863 * frequency, count, BB_FREQ_BASE:        Profile information.
   38864                                                              (line   30)
   38865 * ftruncM2 instruction pattern:          Standard Names.     (line  802)
   38866 * function:                              Functions.          (line    6)
   38867 * function body:                         Function Bodies.    (line    6)
   38868 * function call conventions:             Interface.          (line    6)
   38869 * function entry and exit:               Function Entry.     (line    6)
   38870 * function entry point, alternate function entry point: Edges.
   38871                                                              (line  180)
   38872 * function-call insns:                   Calls.              (line    6)
   38873 * FUNCTION_ARG:                          Register Arguments. (line   11)
   38874 * FUNCTION_ARG_ADVANCE:                  Register Arguments. (line  178)
   38875 * FUNCTION_ARG_BOUNDARY:                 Register Arguments. (line  224)
   38876 * FUNCTION_ARG_PADDING:                  Register Arguments. (line  189)
   38877 * FUNCTION_ARG_REGNO_P:                  Register Arguments. (line  229)
   38878 * FUNCTION_BOUNDARY:                     Storage Layout.     (line  165)
   38879 * FUNCTION_DECL:                         Functions.          (line    6)
   38880 * FUNCTION_INCOMING_ARG:                 Register Arguments. (line   68)
   38881 * FUNCTION_MODE:                         Misc.               (line  356)
   38882 * FUNCTION_OUTGOING_VALUE:               Scalar Return.      (line   56)
   38883 * FUNCTION_PROFILER:                     Profiling.          (line    9)
   38884 * FUNCTION_TYPE:                         Types.              (line    6)
   38885 * FUNCTION_VALUE:                        Scalar Return.      (line   52)
   38886 * FUNCTION_VALUE_REGNO_P:                Scalar Return.      (line   77)
   38887 * functions, leaf:                       Leaf Functions.     (line    6)
   38888 * fundamental type:                      Types.              (line    6)
   38889 * g in constraint:                       Simple Constraints. (line  108)
   38890 * G in constraint:                       Simple Constraints. (line   86)
   38891 * GCC and portability:                   Portability.        (line    6)
   38892 * GCC_DRIVER_HOST_INITIALIZATION:        Host Misc.          (line   36)
   38893 * gcov_type:                             Profile information.
   38894                                                              (line   41)
   38895 * ge:                                    Comparisons.        (line   72)
   38896 * ge and attributes:                     Expressions.        (line   64)
   38897 * GE_EXPR:                               Expression trees.   (line    6)
   38898 * GEN_ERRNO_RTX:                         Library Calls.      (line   71)
   38899 * gencodes:                              RTL passes.         (line   18)
   38900 * general_operand:                       Machine-Independent Predicates.
   38901                                                              (line  105)
   38902 * GENERAL_REGS:                          Register Classes.   (line   23)
   38903 * generated files:                       Files.              (line    6)
   38904 * generating assembler output:           Output Statement.   (line    6)
   38905 * generating insns:                      RTL Template.       (line    6)
   38906 * GENERIC <1>:                           GENERIC.            (line    6)
   38907 * GENERIC <2>:                           Gimplification pass.
   38908                                                              (line   12)
   38909 * GENERIC:                               Parsing pass.       (line    6)
   38910 * generic predicates:                    Machine-Independent Predicates.
   38911                                                              (line    6)
   38912 * genflags:                              RTL passes.         (line   18)
   38913 * get_attr:                              Expressions.        (line   80)
   38914 * get_attr_length:                       Insn Lengths.       (line   46)
   38915 * GET_CLASS_NARROWEST_MODE:              Machine Modes.      (line  333)
   38916 * GET_CODE:                              RTL Objects.        (line   47)
   38917 * get_frame_size:                        Elimination.        (line   31)
   38918 * get_insns:                             Insns.              (line   34)
   38919 * get_last_insn:                         Insns.              (line   34)
   38920 * GET_MODE:                              Machine Modes.      (line  280)
   38921 * GET_MODE_ALIGNMENT:                    Machine Modes.      (line  320)
   38922 * GET_MODE_BITSIZE:                      Machine Modes.      (line  304)
   38923 * GET_MODE_CLASS:                        Machine Modes.      (line  294)
   38924 * GET_MODE_FBIT:                         Machine Modes.      (line  311)
   38925 * GET_MODE_IBIT:                         Machine Modes.      (line  307)
   38926 * GET_MODE_MASK:                         Machine Modes.      (line  315)
   38927 * GET_MODE_NAME:                         Machine Modes.      (line  291)
   38928 * GET_MODE_NUNITS:                       Machine Modes.      (line  329)
   38929 * GET_MODE_SIZE:                         Machine Modes.      (line  301)
   38930 * GET_MODE_UNIT_SIZE:                    Machine Modes.      (line  323)
   38931 * GET_MODE_WIDER_MODE:                   Machine Modes.      (line  297)
   38932 * GET_RTX_CLASS:                         RTL Classes.        (line    6)
   38933 * GET_RTX_FORMAT:                        RTL Classes.        (line  130)
   38934 * GET_RTX_LENGTH:                        RTL Classes.        (line  127)
   38935 * geu:                                   Comparisons.        (line   72)
   38936 * geu and attributes:                    Expressions.        (line   64)
   38937 * GGC:                                   Type Information.   (line    6)
   38938 * GIMPLE <1>:                            GIMPLE.             (line    6)
   38939 * GIMPLE <2>:                            Gimplification pass.
   38940                                                              (line    6)
   38941 * GIMPLE:                                Parsing pass.       (line   14)
   38942 * GIMPLE Example:                        GIMPLE Example.     (line    6)
   38943 * GIMPLE Exception Handling:             GIMPLE Exception Handling.
   38944                                                              (line    6)
   38945 * GIMPLE Expressions:                    GIMPLE Expressions. (line    6)
   38946 * gimplification <1>:                    Interfaces.         (line    6)
   38947 * gimplification <2>:                    Gimplification pass.
   38948                                                              (line    6)
   38949 * gimplification:                        Parsing pass.       (line   14)
   38950 * gimplifier:                            Parsing pass.       (line   14)
   38951 * gimplify_expr:                         Gimplification pass.
   38952                                                              (line   18)
   38953 * gimplify_function_tree:                Gimplification pass.
   38954                                                              (line   18)
   38955 * GLOBAL_INIT_PRIORITY:                  Function Basics.    (line    6)
   38956 * global_regs:                           Register Basics.    (line   59)
   38957 * GO_IF_LEGITIMATE_ADDRESS:              Addressing Modes.   (line   48)
   38958 * GO_IF_MODE_DEPENDENT_ADDRESS:          Addressing Modes.   (line  178)
   38959 * GOFAST, floating point emulation library: Library Calls.   (line   44)
   38960 * gofast_maybe_init_libfuncs:            Library Calls.      (line   44)
   38961 * greater than:                          Comparisons.        (line   60)
   38962 * gt:                                    Comparisons.        (line   60)
   38963 * gt and attributes:                     Expressions.        (line   64)
   38964 * GT_EXPR:                               Expression trees.   (line    6)
   38965 * gtu:                                   Comparisons.        (line   64)
   38966 * gtu and attributes:                    Expressions.        (line   64)
   38967 * GTY:                                   Type Information.   (line    6)
   38968 * H in constraint:                       Simple Constraints. (line   86)
   38969 * HAmode:                                Machine Modes.      (line  144)
   38970 * HANDLE_PRAGMA_PACK_PUSH_POP:           Misc.               (line  467)
   38971 * HANDLE_PRAGMA_PACK_WITH_EXPANSION:     Misc.               (line  478)
   38972 * HANDLE_PRAGMA_PUSH_POP_MACRO:          Misc.               (line  488)
   38973 * HANDLE_SYSV_PRAGMA:                    Misc.               (line  438)
   38974 * HANDLER:                               Function Bodies.    (line    6)
   38975 * HANDLER_BODY:                          Function Bodies.    (line    6)
   38976 * HANDLER_PARMS:                         Function Bodies.    (line    6)
   38977 * hard registers:                        Regs and Memory.    (line    9)
   38978 * HARD_FRAME_POINTER_REGNUM:             Frame Registers.    (line   20)
   38979 * HARD_REGNO_CALL_PART_CLOBBERED:        Register Basics.    (line   53)
   38980 * HARD_REGNO_CALLER_SAVE_MODE:           Caller Saves.       (line   20)
   38981 * HARD_REGNO_MODE_OK:                    Values in Registers.
   38982                                                              (line   58)
   38983 * HARD_REGNO_NREGS:                      Values in Registers.
   38984                                                              (line   11)
   38985 * HARD_REGNO_NREGS_HAS_PADDING:          Values in Registers.
   38986                                                              (line   25)
   38987 * HARD_REGNO_NREGS_WITH_PADDING:         Values in Registers.
   38988                                                              (line   43)
   38989 * HARD_REGNO_RENAME_OK:                  Values in Registers.
   38990                                                              (line  119)
   38991 * HAS_INIT_SECTION:                      Macros for Initialization.
   38992                                                              (line   19)
   38993 * HAS_LONG_COND_BRANCH:                  Misc.               (line    9)
   38994 * HAS_LONG_UNCOND_BRANCH:                Misc.               (line   18)
   38995 * HAVE_DOS_BASED_FILE_SYSTEM:            Filesystem.         (line   11)
   38996 * HAVE_POST_DECREMENT:                   Addressing Modes.   (line   12)
   38997 * HAVE_POST_INCREMENT:                   Addressing Modes.   (line   11)
   38998 * HAVE_POST_MODIFY_DISP:                 Addressing Modes.   (line   18)
   38999 * HAVE_POST_MODIFY_REG:                  Addressing Modes.   (line   24)
   39000 * HAVE_PRE_DECREMENT:                    Addressing Modes.   (line   10)
   39001 * HAVE_PRE_INCREMENT:                    Addressing Modes.   (line    9)
   39002 * HAVE_PRE_MODIFY_DISP:                  Addressing Modes.   (line   17)
   39003 * HAVE_PRE_MODIFY_REG:                   Addressing Modes.   (line   23)
   39004 * HCmode:                                Machine Modes.      (line  197)
   39005 * HFmode:                                Machine Modes.      (line   58)
   39006 * high:                                  Constants.          (line  128)
   39007 * HImode:                                Machine Modes.      (line   29)
   39008 * HImode, in insn:                       Insns.              (line  231)
   39009 * host configuration:                    Host Config.        (line    6)
   39010 * host functions:                        Host Common.        (line    6)
   39011 * host hooks:                            Host Common.        (line    6)
   39012 * host makefile fragment:                Host Fragment.      (line    6)
   39013 * HOST_BIT_BUCKET:                       Filesystem.         (line   51)
   39014 * HOST_EXECUTABLE_SUFFIX:                Filesystem.         (line   45)
   39015 * HOST_HOOKS_EXTRA_SIGNALS:              Host Common.        (line   12)
   39016 * HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY:   Host Common.        (line   45)
   39017 * HOST_HOOKS_GT_PCH_USE_ADDRESS:         Host Common.        (line   26)
   39018 * HOST_LACKS_INODE_NUMBERS:              Filesystem.         (line   89)
   39019 * HOST_LONG_LONG_FORMAT:                 Host Misc.          (line   41)
   39020 * HOST_OBJECT_SUFFIX:                    Filesystem.         (line   40)
   39021 * HOST_WIDE_INT:                         Anchored Addresses. (line   33)
   39022 * HOT_TEXT_SECTION_NAME:                 Sections.           (line   43)
   39023 * HQmode:                                Machine Modes.      (line  107)
   39024 * I in constraint:                       Simple Constraints. (line   69)
   39025 * i in constraint:                       Simple Constraints. (line   58)
   39026 * identifier:                            Identifiers.        (line    6)
   39027 * IDENTIFIER_LENGTH:                     Identifiers.        (line   20)
   39028 * IDENTIFIER_NODE:                       Identifiers.        (line    6)
   39029 * IDENTIFIER_OPNAME_P:                   Identifiers.        (line   25)
   39030 * IDENTIFIER_POINTER:                    Identifiers.        (line   15)
   39031 * IDENTIFIER_TYPENAME_P:                 Identifiers.        (line   31)
   39032 * IEEE-754R:                             Decimal float library routines.
   39033                                                              (line    6)
   39034 * IEEE_FLOAT_FORMAT:                     Storage Layout.     (line  413)
   39035 * IF_COND:                               Function Bodies.    (line    6)
   39036 * if_marked:                             GTY Options.        (line  156)
   39037 * IF_STMT:                               Function Bodies.    (line    6)
   39038 * if_then_else:                          Comparisons.        (line   80)
   39039 * if_then_else and attributes:           Expressions.        (line   32)
   39040 * if_then_else usage:                    Side Effects.       (line   56)
   39041 * IFCVT_EXTRA_FIELDS:                    Misc.               (line  627)
   39042 * IFCVT_INIT_EXTRA_FIELDS:               Misc.               (line  622)
   39043 * IFCVT_MODIFY_CANCEL:                   Misc.               (line  616)
   39044 * IFCVT_MODIFY_FINAL:                    Misc.               (line  610)
   39045 * IFCVT_MODIFY_INSN:                     Misc.               (line  604)
   39046 * IFCVT_MODIFY_MULTIPLE_TESTS:           Misc.               (line  597)
   39047 * IFCVT_MODIFY_TESTS:                    Misc.               (line  586)
   39048 * IMAGPART_EXPR:                         Expression trees.   (line    6)
   39049 * Immediate Uses:                        Statement Operands. (line  274)
   39050 * immediate_operand:                     Machine-Independent Predicates.
   39051                                                              (line   11)
   39052 * IMMEDIATE_PREFIX:                      Instruction Output. (line  127)
   39053 * in_struct:                             Flags.              (line  240)
   39054 * in_struct, in code_label and note:     Flags.              (line   44)
   39055 * in_struct, in insn and jump_insn and call_insn: Flags.     (line   34)
   39056 * in_struct, in insn, jump_insn and call_insn: Flags.        (line  151)
   39057 * in_struct, in mem:                     Flags.              (line   55)
   39058 * in_struct, in subreg:                  Flags.              (line  190)
   39059 * include:                               Including Patterns. (line    6)
   39060 * INCLUDE_DEFAULTS:                      Driver.             (line  430)
   39061 * inclusive-or, bitwise:                 Arithmetic.         (line  158)
   39062 * INCOMING_FRAME_SP_OFFSET:              Frame Layout.       (line  183)
   39063 * INCOMING_REGNO:                        Register Basics.    (line   91)
   39064 * INCOMING_RETURN_ADDR_RTX:              Frame Layout.       (line  139)
   39065 * INDEX_REG_CLASS:                       Register Classes.   (line  134)
   39066 * indirect_jump instruction pattern:     Standard Names.     (line 1072)
   39067 * indirect_operand:                      Machine-Independent Predicates.
   39068                                                              (line   71)
   39069 * INDIRECT_REF:                          Expression trees.   (line    6)
   39070 * INIT_ARRAY_SECTION_ASM_OP:             Sections.           (line   98)
   39071 * INIT_CUMULATIVE_ARGS:                  Register Arguments. (line  141)
   39072 * INIT_CUMULATIVE_INCOMING_ARGS:         Register Arguments. (line  169)
   39073 * INIT_CUMULATIVE_LIBCALL_ARGS:          Register Arguments. (line  162)
   39074 * INIT_ENVIRONMENT:                      Driver.             (line  369)
   39075 * INIT_EXPANDERS:                        Per-Function Data.  (line   39)
   39076 * INIT_EXPR:                             Expression trees.   (line    6)
   39077 * init_machine_status:                   Per-Function Data.  (line   45)
   39078 * init_one_libfunc:                      Library Calls.      (line   15)
   39079 * INIT_SECTION_ASM_OP <1>:               Macros for Initialization.
   39080                                                              (line   10)
   39081 * INIT_SECTION_ASM_OP:                   Sections.           (line   82)
   39082 * INITIAL_ELIMINATION_OFFSET:            Elimination.        (line   79)
   39083 * INITIAL_FRAME_ADDRESS_RTX:             Frame Layout.       (line   83)
   39084 * INITIAL_FRAME_POINTER_OFFSET:          Elimination.        (line   32)
   39085 * initialization routines:               Initialization.     (line    6)
   39086 * INITIALIZE_TRAMPOLINE:                 Trampolines.        (line   55)
   39087 * inlining:                              Target Attributes.  (line   86)
   39088 * insert_insn_on_edge:                   Maintaining the CFG.
   39089                                                              (line  118)
   39090 * insn:                                  Insns.              (line   63)
   39091 * insn and /f:                           Flags.              (line  110)
   39092 * insn and /j:                           Flags.              (line  160)
   39093 * insn and /s:                           Flags.              (line   34)
   39094 * insn and /u:                           Flags.              (line   24)
   39095 * insn and /v:                           Flags.              (line   29)
   39096 * insn attributes:                       Insn Attributes.    (line    6)
   39097 * insn canonicalization:                 Insn Canonicalizations.
   39098                                                              (line    6)
   39099 * insn includes:                         Including Patterns. (line    6)
   39100 * insn lengths, computing:               Insn Lengths.       (line    6)
   39101 * insn splitting:                        Insn Splitting.     (line    6)
   39102 * insn-attr.h:                           Defining Attributes.
   39103                                                              (line   24)
   39104 * INSN_ANNULLED_BRANCH_P:                Flags.              (line   24)
   39105 * INSN_CODE:                             Insns.              (line  257)
   39106 * INSN_DELETED_P:                        Flags.              (line   29)
   39107 * INSN_FROM_TARGET_P:                    Flags.              (line   34)
   39108 * insn_list:                             Insns.              (line  550)
   39109 * INSN_REFERENCES_ARE_DELAYED:           Misc.               (line  525)
   39110 * INSN_SETS_ARE_DELAYED:                 Misc.               (line  514)
   39111 * INSN_UID:                              Insns.              (line   23)
   39112 * insns:                                 Insns.              (line    6)
   39113 * insns, generating:                     RTL Template.       (line    6)
   39114 * insns, recognizing:                    RTL Template.       (line    6)
   39115 * instruction attributes:                Insn Attributes.    (line    6)
   39116 * instruction latency time:              Processor pipeline description.
   39117                                                              (line    6)
   39118 * instruction patterns:                  Patterns.           (line    6)
   39119 * instruction splitting:                 Insn Splitting.     (line    6)
   39120 * insv instruction pattern:              Standard Names.     (line  874)
   39121 * int:                                   Run-time Target.    (line   56)
   39122 * INT_TYPE_SIZE:                         Type Layout.        (line   12)
   39123 * INTEGER_CST:                           Expression trees.   (line    6)
   39124 * INTEGER_TYPE:                          Types.              (line    6)
   39125 * Interdependence of Patterns:           Dependent Patterns. (line    6)
   39126 * interfacing to GCC output:             Interface.          (line    6)
   39127 * interlock delays:                      Processor pipeline description.
   39128                                                              (line    6)
   39129 * intermediate representation lowering:  Parsing pass.       (line   14)
   39130 * INTMAX_TYPE:                           Type Layout.        (line  213)
   39131 * introduction:                          Top.                (line    6)
   39132 * INVOKE__main:                          Macros for Initialization.
   39133                                                              (line   51)
   39134 * ior:                                   Arithmetic.         (line  158)
   39135 * ior and attributes:                    Expressions.        (line   50)
   39136 * ior, canonicalization of:              Insn Canonicalizations.
   39137                                                              (line   57)
   39138 * iorM3 instruction pattern:             Standard Names.     (line  222)
   39139 * IS_ASM_LOGICAL_LINE_SEPARATOR:         Data Output.        (line  120)
   39140 * iterators in .md files:                Iterators.          (line    6)
   39141 * IV analysis on GIMPLE:                 Scalar evolutions.  (line    6)
   39142 * IV analysis on RTL:                    loop-iv.            (line    6)
   39143 * jump:                                  Flags.              (line  289)
   39144 * jump instruction pattern:              Standard Names.     (line  963)
   39145 * jump instruction patterns:             Jump Patterns.      (line    6)
   39146 * jump instructions and set:             Side Effects.       (line   56)
   39147 * jump, in call_insn:                    Flags.              (line  164)
   39148 * jump, in insn:                         Flags.              (line  160)
   39149 * jump, in mem:                          Flags.              (line   64)
   39150 * JUMP_ALIGN:                            Alignment Output.   (line    9)
   39151 * jump_insn:                             Insns.              (line   73)
   39152 * jump_insn and /f:                      Flags.              (line  110)
   39153 * jump_insn and /s:                      Flags.              (line   34)
   39154 * jump_insn and /u:                      Flags.              (line   24)
   39155 * jump_insn and /v:                      Flags.              (line   29)
   39156 * JUMP_LABEL:                            Insns.              (line   80)
   39157 * JUMP_TABLES_IN_TEXT_SECTION:           Sections.           (line  142)
   39158 * Jumps:                                 Jumps.              (line    6)
   39159 * LABEL_ALIGN:                           Alignment Output.   (line   52)
   39160 * LABEL_ALIGN_AFTER_BARRIER:             Alignment Output.   (line   22)
   39161 * LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP:    Alignment Output.   (line   30)
   39162 * LABEL_ALIGN_MAX_SKIP:                  Alignment Output.   (line   62)
   39163 * LABEL_ALT_ENTRY_P:                     Insns.              (line  140)
   39164 * LABEL_ALTERNATE_NAME:                  Edges.              (line  180)
   39165 * LABEL_DECL:                            Declarations.       (line    6)
   39166 * LABEL_KIND:                            Insns.              (line  140)
   39167 * LABEL_NUSES:                           Insns.              (line  136)
   39168 * LABEL_PRESERVE_P:                      Flags.              (line   44)
   39169 * label_ref:                             Constants.          (line  105)
   39170 * label_ref and /v:                      Flags.              (line   50)
   39171 * label_ref, RTL sharing:                Sharing.            (line   35)
   39172 * LABEL_REF_NONLOCAL_P:                  Flags.              (line   50)
   39173 * lang_hooks.gimplify_expr:              Gimplification pass.
   39174                                                              (line   18)
   39175 * lang_hooks.parse_file:                 Parsing pass.       (line    6)
   39176 * language-independent intermediate representation: Parsing pass.
   39177                                                              (line   14)
   39178 * large return values:                   Aggregate Return.   (line    6)
   39179 * LARGEST_EXPONENT_IS_NORMAL:            Storage Layout.     (line  493)
   39180 * LAST_STACK_REG:                        Stack Registers.    (line   27)
   39181 * LAST_VIRTUAL_REGISTER:                 Regs and Memory.    (line   51)
   39182 * lceilMN2:                              Standard Names.     (line  593)
   39183 * LCSSA:                                 LCSSA.              (line    6)
   39184 * LD_FINI_SWITCH:                        Macros for Initialization.
   39185                                                              (line   29)
   39186 * LD_INIT_SWITCH:                        Macros for Initialization.
   39187                                                              (line   25)
   39188 * LDD_SUFFIX:                            Macros for Initialization.
   39189                                                              (line  116)
   39190 * le:                                    Comparisons.        (line   76)
   39191 * le and attributes:                     Expressions.        (line   64)
   39192 * LE_EXPR:                               Expression trees.   (line    6)
   39193 * leaf functions:                        Leaf Functions.     (line    6)
   39194 * leaf_function_p:                       Standard Names.     (line 1034)
   39195 * LEAF_REG_REMAP:                        Leaf Functions.     (line   39)
   39196 * LEAF_REGISTERS:                        Leaf Functions.     (line   25)
   39197 * left rotate:                           Arithmetic.         (line  190)
   39198 * left shift:                            Arithmetic.         (line  168)
   39199 * LEGITIMATE_CONSTANT_P:                 Addressing Modes.   (line  193)
   39200 * LEGITIMATE_PIC_OPERAND_P:              PIC.                (line   31)
   39201 * LEGITIMIZE_ADDRESS:                    Addressing Modes.   (line  110)
   39202 * LEGITIMIZE_RELOAD_ADDRESS:             Addressing Modes.   (line  133)
   39203 * length:                                GTY Options.        (line   50)
   39204 * less than:                             Comparisons.        (line   68)
   39205 * less than or equal:                    Comparisons.        (line   76)
   39206 * leu:                                   Comparisons.        (line   76)
   39207 * leu and attributes:                    Expressions.        (line   64)
   39208 * lfloorMN2:                             Standard Names.     (line  588)
   39209 * LIB2FUNCS_EXTRA:                       Target Fragment.    (line   11)
   39210 * LIB_SPEC:                              Driver.             (line  170)
   39211 * LIBCALL_VALUE:                         Scalar Return.      (line   60)
   39212 * libgcc.a:                              Library Calls.      (line    6)
   39213 * LIBGCC2_CFLAGS:                        Target Fragment.    (line    8)
   39214 * LIBGCC2_HAS_DF_MODE:                   Type Layout.        (line  109)
   39215 * LIBGCC2_HAS_TF_MODE:                   Type Layout.        (line  123)
   39216 * LIBGCC2_HAS_XF_MODE:                   Type Layout.        (line  117)
   39217 * LIBGCC2_LONG_DOUBLE_TYPE_SIZE:         Type Layout.        (line  103)
   39218 * LIBGCC2_UNWIND_ATTRIBUTE:              Misc.               (line  922)
   39219 * LIBGCC2_WORDS_BIG_ENDIAN:              Storage Layout.     (line   36)
   39220 * LIBGCC_SPEC:                           Driver.             (line  178)
   39221 * library subroutine names:              Library Calls.      (line    6)
   39222 * LIBRARY_PATH_ENV:                      Misc.               (line  565)
   39223 * LIMIT_RELOAD_CLASS:                    Register Classes.   (line  239)
   39224 * Linear loop transformations framework: Lambda.             (line    6)
   39225 * LINK_COMMAND_SPEC:                     Driver.             (line  299)
   39226 * LINK_EH_SPEC:                          Driver.             (line  205)
   39227 * LINK_ELIMINATE_DUPLICATE_LDIRECTORIES: Driver.             (line  309)
   39228 * LINK_GCC_C_SEQUENCE_SPEC:              Driver.             (line  295)
   39229 * LINK_LIBGCC_SPECIAL_1:                 Driver.             (line  290)
   39230 * LINK_SPEC:                             Driver.             (line  163)
   39231 * linkage:                               Function Basics.    (line    6)
   39232 * list:                                  Containers.         (line    6)
   39233 * Liveness representation:               Liveness information.
   39234                                                              (line    6)
   39235 * lo_sum:                                Arithmetic.         (line   24)
   39236 * load address instruction:              Simple Constraints. (line  152)
   39237 * LOAD_EXTEND_OP:                        Misc.               (line   69)
   39238 * load_multiple instruction pattern:     Standard Names.     (line  137)
   39239 * LOCAL_ALIGNMENT:                       Storage Layout.     (line  234)
   39240 * LOCAL_CLASS_P:                         Classes.            (line   68)
   39241 * LOCAL_INCLUDE_DIR:                     Driver.             (line  376)
   39242 * LOCAL_LABEL_PREFIX:                    Instruction Output. (line  125)
   39243 * LOCAL_REGNO:                           Register Basics.    (line  105)
   39244 * LOG_LINKS:                             Insns.              (line  276)
   39245 * Logical Operators:                     Logical Operators.  (line    6)
   39246 * logical-and, bitwise:                  Arithmetic.         (line  153)
   39247 * logM2 instruction pattern:             Standard Names.     (line  501)
   39248 * LONG_ACCUM_TYPE_SIZE:                  Type Layout.        (line   93)
   39249 * LONG_DOUBLE_TYPE_SIZE:                 Type Layout.        (line   58)
   39250 * LONG_FRACT_TYPE_SIZE:                  Type Layout.        (line   73)
   39251 * LONG_LONG_ACCUM_TYPE_SIZE:             Type Layout.        (line   98)
   39252 * LONG_LONG_FRACT_TYPE_SIZE:             Type Layout.        (line   78)
   39253 * LONG_LONG_TYPE_SIZE:                   Type Layout.        (line   33)
   39254 * LONG_TYPE_SIZE:                        Type Layout.        (line   22)
   39255 * longjmp and automatic variables:       Interface.          (line   52)
   39256 * Loop analysis:                         Loop representation.
   39257                                                              (line    6)
   39258 * Loop manipulation:                     Loop manipulation.  (line    6)
   39259 * Loop querying:                         Loop querying.      (line    6)
   39260 * Loop representation:                   Loop representation.
   39261                                                              (line    6)
   39262 * Loop-closed SSA form:                  LCSSA.              (line    6)
   39263 * LOOP_ALIGN:                            Alignment Output.   (line   35)
   39264 * LOOP_ALIGN_MAX_SKIP:                   Alignment Output.   (line   48)
   39265 * LOOP_EXPR:                             Expression trees.   (line    6)
   39266 * looping instruction patterns:          Looping Patterns.   (line    6)
   39267 * Loops:                                 Loops.              (line    6)
   39268 * lowering, language-dependent intermediate representation: Parsing pass.
   39269                                                              (line   14)
   39270 * lrintMN2:                              Standard Names.     (line  578)
   39271 * lroundMN2:                             Standard Names.     (line  583)
   39272 * LSHIFT_EXPR:                           Expression trees.   (line    6)
   39273 * lshiftrt:                              Arithmetic.         (line  185)
   39274 * lshiftrt and attributes:               Expressions.        (line   64)
   39275 * lshrM3 instruction pattern:            Standard Names.     (line  441)
   39276 * lt:                                    Comparisons.        (line   68)
   39277 * lt and attributes:                     Expressions.        (line   64)
   39278 * LT_EXPR:                               Expression trees.   (line    6)
   39279 * LTGT_EXPR:                             Expression trees.   (line    6)
   39280 * ltu:                                   Comparisons.        (line   68)
   39281 * m in constraint:                       Simple Constraints. (line   17)
   39282 * machine attributes:                    Target Attributes.  (line    6)
   39283 * machine description macros:            Target Macros.      (line    6)
   39284 * machine descriptions:                  Machine Desc.       (line    6)
   39285 * machine mode conversions:              Conversions.        (line    6)
   39286 * machine modes:                         Machine Modes.      (line    6)
   39287 * machine specific constraints:          Machine Constraints.
   39288                                                              (line    6)
   39289 * machine-independent predicates:        Machine-Independent Predicates.
   39290                                                              (line    6)
   39291 * machine_mode:                          Condition Code.     (line  157)
   39292 * macros, target description:            Target Macros.      (line    6)
   39293 * maddMN4 instruction pattern:           Standard Names.     (line  364)
   39294 * MAKE_DECL_ONE_ONLY:                    Label Output.       (line  218)
   39295 * make_safe_from:                        Expander Definitions.
   39296                                                              (line  148)
   39297 * makefile fragment:                     Fragments.          (line    6)
   39298 * makefile targets:                      Makefile.           (line    6)
   39299 * mark_hook:                             GTY Options.        (line  171)
   39300 * marking roots:                         GGC Roots.          (line    6)
   39301 * MASK_RETURN_ADDR:                      Exception Region Output.
   39302                                                              (line   35)
   39303 * match_dup <1>:                         define_peephole2.   (line   28)
   39304 * match_dup:                             RTL Template.       (line   73)
   39305 * match_dup and attributes:              Insn Lengths.       (line   16)
   39306 * match_op_dup:                          RTL Template.       (line  163)
   39307 * match_operand:                         RTL Template.       (line   16)
   39308 * match_operand and attributes:          Expressions.        (line   55)
   39309 * match_operator:                        RTL Template.       (line   95)
   39310 * match_par_dup:                         RTL Template.       (line  219)
   39311 * match_parallel:                        RTL Template.       (line  172)
   39312 * match_scratch <1>:                     define_peephole2.   (line   28)
   39313 * match_scratch:                         RTL Template.       (line   58)
   39314 * matching constraint:                   Simple Constraints. (line  130)
   39315 * matching operands:                     Output Template.    (line   49)
   39316 * math library:                          Soft float library routines.
   39317                                                              (line    6)
   39318 * math, in RTL:                          Arithmetic.         (line    6)
   39319 * MATH_LIBRARY:                          Misc.               (line  558)
   39320 * matherr:                               Library Calls.      (line   58)
   39321 * MAX_BITS_PER_WORD:                     Storage Layout.     (line   61)
   39322 * MAX_CONDITIONAL_EXECUTE:               Misc.               (line  580)
   39323 * MAX_FIXED_MODE_SIZE:                   Storage Layout.     (line  370)
   39324 * MAX_MOVE_MAX:                          Misc.               (line  120)
   39325 * MAX_OFILE_ALIGNMENT:                   Storage Layout.     (line  196)
   39326 * MAX_REGS_PER_ADDRESS:                  Addressing Modes.   (line   42)
   39327 * maxM3 instruction pattern:             Standard Names.     (line  234)
   39328 * may_trap_p, tree_could_trap_p:         Edges.              (line  115)
   39329 * maybe_undef:                           GTY Options.        (line  179)
   39330 * mcount:                                Profiling.          (line   12)
   39331 * MD_CAN_REDIRECT_BRANCH:                Misc.               (line  705)
   39332 * MD_EXEC_PREFIX:                        Driver.             (line  330)
   39333 * MD_FALLBACK_FRAME_STATE_FOR:           Exception Handling. (line   98)
   39334 * MD_HANDLE_UNWABI:                      Exception Handling. (line  118)
   39335 * MD_STARTFILE_PREFIX:                   Driver.             (line  358)
   39336 * MD_STARTFILE_PREFIX_1:                 Driver.             (line  364)
   39337 * MD_UNWIND_SUPPORT:                     Exception Handling. (line   94)
   39338 * mem:                                   Regs and Memory.    (line  249)
   39339 * mem and /c:                            Flags.              (line   84)
   39340 * mem and /f:                            Flags.              (line   88)
   39341 * mem and /i:                            Flags.              (line   70)
   39342 * mem and /j:                            Flags.              (line   64)
   39343 * mem and /s:                            Flags.              (line   55)
   39344 * mem and /u:                            Flags.              (line  137)
   39345 * mem and /v:                            Flags.              (line   79)
   39346 * mem, RTL sharing:                      Sharing.            (line   40)
   39347 * MEM_ALIAS_SET:                         Special Accessors.  (line    9)
   39348 * MEM_ALIGN:                             Special Accessors.  (line   36)
   39349 * MEM_EXPR:                              Special Accessors.  (line   20)
   39350 * MEM_IN_STRUCT_P:                       Flags.              (line   55)
   39351 * MEM_KEEP_ALIAS_SET_P:                  Flags.              (line   64)
   39352 * MEM_NOTRAP_P:                          Flags.              (line   84)
   39353 * MEM_OFFSET:                            Special Accessors.  (line   28)
   39354 * MEM_POINTER:                           Flags.              (line   88)
   39355 * MEM_READONLY_P:                        Flags.              (line  137)
   39356 * MEM_SCALAR_P:                          Flags.              (line   70)
   39357 * MEM_SIZE:                              Special Accessors.  (line   31)
   39358 * MEM_VOLATILE_P:                        Flags.              (line   79)
   39359 * MEMBER_TYPE_FORCES_BLK:                Storage Layout.     (line  350)
   39360 * memory reference, nonoffsettable:      Simple Constraints. (line  244)
   39361 * memory references in constraints:      Simple Constraints. (line   17)
   39362 * memory_barrier instruction pattern:    Standard Names.     (line 1407)
   39363 * MEMORY_MOVE_COST:                      Costs.              (line   29)
   39364 * memory_operand:                        Machine-Independent Predicates.
   39365                                                              (line   58)
   39366 * METHOD_TYPE:                           Types.              (line    6)
   39367 * MIN_UNITS_PER_WORD:                    Storage Layout.     (line   71)
   39368 * MINIMUM_ATOMIC_ALIGNMENT:              Storage Layout.     (line  174)
   39369 * minM3 instruction pattern:             Standard Names.     (line  234)
   39370 * minus:                                 Arithmetic.         (line   36)
   39371 * minus and attributes:                  Expressions.        (line   64)
   39372 * minus, canonicalization of:            Insn Canonicalizations.
   39373                                                              (line   27)
   39374 * MINUS_EXPR:                            Expression trees.   (line    6)
   39375 * MIPS coprocessor-definition macros:    MIPS Coprocessors.  (line    6)
   39376 * mod:                                   Arithmetic.         (line  131)
   39377 * mod and attributes:                    Expressions.        (line   64)
   39378 * mode classes:                          Machine Modes.      (line  219)
   39379 * mode iterators in .md files:           Mode Iterators.     (line    6)
   39380 * mode switching:                        Mode Switching.     (line    6)
   39381 * MODE_ACCUM:                            Machine Modes.      (line  249)
   39382 * MODE_AFTER:                            Mode Switching.     (line   49)
   39383 * MODE_BASE_REG_CLASS:                   Register Classes.   (line  112)
   39384 * MODE_BASE_REG_REG_CLASS:               Register Classes.   (line  118)
   39385 * MODE_CC:                               Machine Modes.      (line  268)
   39386 * MODE_CODE_BASE_REG_CLASS:              Register Classes.   (line  125)
   39387 * MODE_COMPLEX_FLOAT:                    Machine Modes.      (line  260)
   39388 * MODE_COMPLEX_INT:                      Machine Modes.      (line  257)
   39389 * MODE_DECIMAL_FLOAT:                    Machine Modes.      (line  237)
   39390 * MODE_ENTRY:                            Mode Switching.     (line   54)
   39391 * MODE_EXIT:                             Mode Switching.     (line   60)
   39392 * MODE_FLOAT:                            Machine Modes.      (line  233)
   39393 * MODE_FRACT:                            Machine Modes.      (line  241)
   39394 * MODE_FUNCTION:                         Machine Modes.      (line  264)
   39395 * MODE_HAS_INFINITIES:                   Storage Layout.     (line  441)
   39396 * MODE_HAS_NANS:                         Storage Layout.     (line  431)
   39397 * MODE_HAS_SIGN_DEPENDENT_ROUNDING:      Storage Layout.     (line  463)
   39398 * MODE_HAS_SIGNED_ZEROS:                 Storage Layout.     (line  447)
   39399 * MODE_INT:                              Machine Modes.      (line  225)
   39400 * MODE_NEEDED:                           Mode Switching.     (line   42)
   39401 * MODE_PARTIAL_INT:                      Machine Modes.      (line  229)
   39402 * MODE_PRIORITY_TO_MODE:                 Mode Switching.     (line   66)
   39403 * MODE_RANDOM:                           Machine Modes.      (line  273)
   39404 * MODE_UACCUM:                           Machine Modes.      (line  253)
   39405 * MODE_UFRACT:                           Machine Modes.      (line  245)
   39406 * MODES_TIEABLE_P:                       Values in Registers.
   39407                                                              (line  129)
   39408 * modifiers in constraints:              Modifiers.          (line    6)
   39409 * MODIFY_EXPR:                           Expression trees.   (line    6)
   39410 * MODIFY_JNI_METHOD_CALL:                Misc.               (line  782)
   39411 * MODIFY_TARGET_NAME:                    Driver.             (line  385)
   39412 * modM3 instruction pattern:             Standard Names.     (line  222)
   39413 * modulo scheduling:                     RTL passes.         (line  140)
   39414 * MOVE_BY_PIECES_P:                      Costs.              (line  104)
   39415 * MOVE_MAX:                              Misc.               (line  115)
   39416 * MOVE_MAX_PIECES:                       Costs.              (line  110)
   39417 * MOVE_RATIO:                            Costs.              (line   91)
   39418 * movM instruction pattern:              Standard Names.     (line   11)
   39419 * movmemM instruction pattern:           Standard Names.     (line  668)
   39420 * movmisalignM instruction pattern:      Standard Names.     (line  126)
   39421 * movMODEcc instruction pattern:         Standard Names.     (line  885)
   39422 * movstr instruction pattern:            Standard Names.     (line  702)
   39423 * movstrictM instruction pattern:        Standard Names.     (line  120)
   39424 * msubMN4 instruction pattern:           Standard Names.     (line  387)
   39425 * mulhisi3 instruction pattern:          Standard Names.     (line  340)
   39426 * mulM3 instruction pattern:             Standard Names.     (line  222)
   39427 * mulqihi3 instruction pattern:          Standard Names.     (line  344)
   39428 * mulsidi3 instruction pattern:          Standard Names.     (line  344)
   39429 * mult:                                  Arithmetic.         (line   92)
   39430 * mult and attributes:                   Expressions.        (line   64)
   39431 * mult, canonicalization of:             Insn Canonicalizations.
   39432                                                              (line   27)
   39433 * MULT_EXPR:                             Expression trees.   (line    6)
   39434 * MULTILIB_DEFAULTS:                     Driver.             (line  315)
   39435 * MULTILIB_DIRNAMES:                     Target Fragment.    (line   64)
   39436 * MULTILIB_EXCEPTIONS:                   Target Fragment.    (line   84)
   39437 * MULTILIB_EXTRA_OPTS:                   Target Fragment.    (line   96)
   39438 * MULTILIB_MATCHES:                      Target Fragment.    (line   77)
   39439 * MULTILIB_OPTIONS:                      Target Fragment.    (line   44)
   39440 * multiple alternative constraints:      Multi-Alternative.  (line    6)
   39441 * MULTIPLE_SYMBOL_SPACES:                Misc.               (line  538)
   39442 * multiplication:                        Arithmetic.         (line   92)
   39443 * multiplication with signed saturation: Arithmetic.         (line   92)
   39444 * multiplication with unsigned saturation: Arithmetic.       (line   92)
   39445 * MUST_USE_SJLJ_EXCEPTIONS:              Exception Region Output.
   39446                                                              (line   64)
   39447 * n in constraint:                       Simple Constraints. (line   63)
   39448 * N_REG_CLASSES:                         Register Classes.   (line   76)
   39449 * name:                                  Identifiers.        (line    6)
   39450 * named patterns and conditions:         Patterns.           (line   47)
   39451 * names, pattern:                        Standard Names.     (line    6)
   39452 * namespace:                             Namespaces.         (line    6)
   39453 * namespace, class, scope:               Scopes.             (line    6)
   39454 * NAMESPACE_DECL <1>:                    Declarations.       (line    6)
   39455 * NAMESPACE_DECL:                        Namespaces.         (line    6)
   39456 * NATIVE_SYSTEM_HEADER_DIR:              Target Fragment.    (line  103)
   39457 * ne:                                    Comparisons.        (line   56)
   39458 * ne and attributes:                     Expressions.        (line   64)
   39459 * NE_EXPR:                               Expression trees.   (line    6)
   39460 * nearbyintM2 instruction pattern:       Standard Names.     (line  560)
   39461 * neg:                                   Arithmetic.         (line   81)
   39462 * neg and attributes:                    Expressions.        (line   64)
   39463 * neg, canonicalization of:              Insn Canonicalizations.
   39464                                                              (line   27)
   39465 * NEGATE_EXPR:                           Expression trees.   (line    6)
   39466 * negation:                              Arithmetic.         (line   81)
   39467 * negation with signed saturation:       Arithmetic.         (line   81)
   39468 * negation with unsigned saturation:     Arithmetic.         (line   81)
   39469 * negM2 instruction pattern:             Standard Names.     (line  445)
   39470 * nested functions, trampolines for:     Trampolines.        (line    6)
   39471 * nested_ptr:                            GTY Options.        (line  186)
   39472 * next_bb, prev_bb, FOR_EACH_BB:         Basic Blocks.       (line   10)
   39473 * next_cc0_user:                         Jump Patterns.      (line   64)
   39474 * NEXT_INSN:                             Insns.              (line   30)
   39475 * NEXT_OBJC_RUNTIME:                     Library Calls.      (line   94)
   39476 * nil:                                   RTL Objects.        (line   73)
   39477 * NO_DBX_BNSYM_ENSYM:                    DBX Hooks.          (line   39)
   39478 * NO_DBX_FUNCTION_END:                   DBX Hooks.          (line   33)
   39479 * NO_DBX_GCC_MARKER:                     File Names and DBX. (line   28)
   39480 * NO_DBX_MAIN_SOURCE_DIRECTORY:          File Names and DBX. (line   23)
   39481 * NO_DOLLAR_IN_LABEL:                    Misc.               (line  502)
   39482 * NO_DOT_IN_LABEL:                       Misc.               (line  508)
   39483 * NO_FUNCTION_CSE:                       Costs.              (line  194)
   39484 * NO_IMPLICIT_EXTERN_C:                  Misc.               (line  376)
   39485 * NO_PROFILE_COUNTERS:                   Profiling.          (line   28)
   39486 * NO_REGS:                               Register Classes.   (line   17)
   39487 * NON_LVALUE_EXPR:                       Expression trees.   (line    6)
   39488 * nondeterministic finite state automaton: Processor pipeline description.
   39489                                                              (line  296)
   39490 * nonimmediate_operand:                  Machine-Independent Predicates.
   39491                                                              (line  101)
   39492 * nonlocal goto handler:                 Edges.              (line  171)
   39493 * nonlocal_goto instruction pattern:     Standard Names.     (line 1249)
   39494 * nonlocal_goto_receiver instruction pattern: Standard Names.
   39495                                                              (line 1266)
   39496 * nonmemory_operand:                     Machine-Independent Predicates.
   39497                                                              (line   97)
   39498 * nonoffsettable memory reference:       Simple Constraints. (line  244)
   39499 * nop instruction pattern:               Standard Names.     (line 1067)
   39500 * NOP_EXPR:                              Expression trees.   (line    6)
   39501 * normal predicates:                     Predicates.         (line   31)
   39502 * not:                                   Arithmetic.         (line  149)
   39503 * not and attributes:                    Expressions.        (line   50)
   39504 * not equal:                             Comparisons.        (line   56)
   39505 * not, canonicalization of:              Insn Canonicalizations.
   39506                                                              (line   27)
   39507 * note:                                  Insns.              (line  168)
   39508 * note and /i:                           Flags.              (line   44)
   39509 * note and /v:                           Flags.              (line   29)
   39510 * NOTE_INSN_BASIC_BLOCK, CODE_LABEL, notes: Basic Blocks.    (line   41)
   39511 * NOTE_INSN_BLOCK_BEG:                   Insns.              (line  193)
   39512 * NOTE_INSN_BLOCK_END:                   Insns.              (line  193)
   39513 * NOTE_INSN_DELETED:                     Insns.              (line  183)
   39514 * NOTE_INSN_DELETED_LABEL:               Insns.              (line  188)
   39515 * NOTE_INSN_EH_REGION_BEG:               Insns.              (line  199)
   39516 * NOTE_INSN_EH_REGION_END:               Insns.              (line  199)
   39517 * NOTE_INSN_FUNCTION_BEG:                Insns.              (line  223)
   39518 * NOTE_INSN_LOOP_BEG:                    Insns.              (line  207)
   39519 * NOTE_INSN_LOOP_CONT:                   Insns.              (line  213)
   39520 * NOTE_INSN_LOOP_END:                    Insns.              (line  207)
   39521 * NOTE_INSN_LOOP_VTOP:                   Insns.              (line  217)
   39522 * NOTE_LINE_NUMBER:                      Insns.              (line  168)
   39523 * NOTE_SOURCE_FILE:                      Insns.              (line  168)
   39524 * NOTICE_UPDATE_CC:                      Condition Code.     (line   33)
   39525 * NUM_MACHINE_MODES:                     Machine Modes.      (line  286)
   39526 * NUM_MODES_FOR_MODE_SWITCHING:          Mode Switching.     (line   30)
   39527 * Number of iterations analysis:         Number of iterations.
   39528                                                              (line    6)
   39529 * o in constraint:                       Simple Constraints. (line   21)
   39530 * OBJC_GEN_METHOD_LABEL:                 Label Output.       (line  411)
   39531 * OBJC_JBLEN:                            Misc.               (line  917)
   39532 * OBJECT_FORMAT_COFF:                    Macros for Initialization.
   39533                                                              (line   97)
   39534 * OFFSET_TYPE:                           Types.              (line    6)
   39535 * offsettable address:                   Simple Constraints. (line   21)
   39536 * OImode:                                Machine Modes.      (line   51)
   39537 * Omega a solver for linear programming problems: Omega.     (line    6)
   39538 * OMP_ATOMIC:                            Expression trees.   (line    6)
   39539 * OMP_CLAUSE:                            Expression trees.   (line    6)
   39540 * OMP_CONTINUE:                          Expression trees.   (line    6)
   39541 * OMP_CRITICAL:                          Expression trees.   (line    6)
   39542 * OMP_FOR:                               Expression trees.   (line    6)
   39543 * OMP_MASTER:                            Expression trees.   (line    6)
   39544 * OMP_ORDERED:                           Expression trees.   (line    6)
   39545 * OMP_PARALLEL:                          Expression trees.   (line    6)
   39546 * OMP_RETURN:                            Expression trees.   (line    6)
   39547 * OMP_SECTION:                           Expression trees.   (line    6)
   39548 * OMP_SECTIONS:                          Expression trees.   (line    6)
   39549 * OMP_SINGLE:                            Expression trees.   (line    6)
   39550 * one_cmplM2 instruction pattern:        Standard Names.     (line  647)
   39551 * operand access:                        Accessors.          (line    6)
   39552 * Operand Access Routines:               Statement Operands. (line  119)
   39553 * operand constraints:                   Constraints.        (line    6)
   39554 * Operand Iterators:                     Statement Operands. (line  119)
   39555 * operand predicates:                    Predicates.         (line    6)
   39556 * operand substitution:                  Output Template.    (line    6)
   39557 * operands <1>:                          Patterns.           (line   53)
   39558 * operands:                              Statement Operands. (line    6)
   39559 * operator predicates:                   Predicates.         (line    6)
   39560 * optc-gen.awk:                          Options.            (line    6)
   39561 * Optimization infrastructure for GIMPLE: Tree SSA.          (line    6)
   39562 * OPTIMIZATION_OPTIONS:                  Run-time Target.    (line  120)
   39563 * OPTIMIZE_MODE_SWITCHING:               Mode Switching.     (line    9)
   39564 * option specification files:            Options.            (line    6)
   39565 * OPTION_DEFAULT_SPECS:                  Driver.             (line   88)
   39566 * optional hardware or system features:  Run-time Target.    (line   59)
   39567 * options, directory search:             Including Patterns. (line   44)
   39568 * order of register allocation:          Allocation Order.   (line    6)
   39569 * ORDER_REGS_FOR_LOCAL_ALLOC:            Allocation Order.   (line   23)
   39570 * ORDERED_EXPR:                          Expression trees.   (line    6)
   39571 * Ordering of Patterns:                  Pattern Ordering.   (line    6)
   39572 * ORIGINAL_REGNO:                        Special Accessors.  (line   40)
   39573 * other register constraints:            Simple Constraints. (line  161)
   39574 * OUTGOING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   70)
   39575 * OUTGOING_REGNO:                        Register Basics.    (line   98)
   39576 * output of assembler code:              File Framework.     (line    6)
   39577 * output statements:                     Output Statement.   (line    6)
   39578 * output templates:                      Output Template.    (line    6)
   39579 * OUTPUT_ADDR_CONST_EXTRA:               Data Output.        (line   39)
   39580 * output_asm_insn:                       Output Statement.   (line   53)
   39581 * OUTPUT_QUOTED_STRING:                  File Framework.     (line   76)
   39582 * OVERLOAD:                              Functions.          (line    6)
   39583 * OVERRIDE_OPTIONS:                      Run-time Target.    (line  104)
   39584 * OVL_CURRENT:                           Functions.          (line    6)
   39585 * OVL_NEXT:                              Functions.          (line    6)
   39586 * p in constraint:                       Simple Constraints. (line  152)
   39587 * PAD_VARARGS_DOWN:                      Register Arguments. (line  206)
   39588 * parallel:                              Side Effects.       (line  201)
   39589 * param_is:                              GTY Options.        (line  114)
   39590 * parameters, c++ abi:                   C++ ABI.            (line    6)
   39591 * parameters, miscellaneous:             Misc.               (line    6)
   39592 * parameters, precompiled headers:       PCH Target.         (line    6)
   39593 * paramN_is:                             GTY Options.        (line  132)
   39594 * parity:                                Arithmetic.         (line  228)
   39595 * parityM2 instruction pattern:          Standard Names.     (line  641)
   39596 * PARM_BOUNDARY:                         Storage Layout.     (line  144)
   39597 * PARM_DECL:                             Declarations.       (line    6)
   39598 * PARSE_LDD_OUTPUT:                      Macros for Initialization.
   39599                                                              (line  121)
   39600 * passes and files of the compiler:      Passes.             (line    6)
   39601 * passing arguments:                     Interface.          (line   36)
   39602 * PATH_SEPARATOR:                        Filesystem.         (line   31)
   39603 * PATTERN:                               Insns.              (line  247)
   39604 * pattern conditions:                    Patterns.           (line   43)
   39605 * pattern names:                         Standard Names.     (line    6)
   39606 * Pattern Ordering:                      Pattern Ordering.   (line    6)
   39607 * patterns:                              Patterns.           (line    6)
   39608 * pc:                                    Regs and Memory.    (line  236)
   39609 * pc and attributes:                     Insn Lengths.       (line   20)
   39610 * pc, RTL sharing:                       Sharing.            (line   25)
   39611 * PC_REGNUM:                             Register Basics.    (line  112)
   39612 * pc_rtx:                                Regs and Memory.    (line  241)
   39613 * PCC_BITFIELD_TYPE_MATTERS:             Storage Layout.     (line  264)
   39614 * PCC_STATIC_STRUCT_RETURN:              Aggregate Return.   (line   64)
   39615 * PDImode:                               Machine Modes.      (line   40)
   39616 * peephole optimization, RTL representation: Side Effects.   (line  235)
   39617 * peephole optimizer definitions:        Peephole Definitions.
   39618                                                              (line    6)
   39619 * per-function data:                     Per-Function Data.  (line    6)
   39620 * percent sign:                          Output Template.    (line    6)
   39621 * PHI nodes:                             SSA.                (line   31)
   39622 * PHI_ARG_DEF:                           SSA.                (line   71)
   39623 * PHI_ARG_EDGE:                          SSA.                (line   68)
   39624 * PHI_ARG_ELT:                           SSA.                (line   63)
   39625 * PHI_NUM_ARGS:                          SSA.                (line   59)
   39626 * PHI_RESULT:                            SSA.                (line   56)
   39627 * PIC:                                   PIC.                (line    6)
   39628 * PIC_OFFSET_TABLE_REG_CALL_CLOBBERED:   PIC.                (line   26)
   39629 * PIC_OFFSET_TABLE_REGNUM:               PIC.                (line   16)
   39630 * pipeline hazard recognizer:            Processor pipeline description.
   39631                                                              (line    6)
   39632 * plus:                                  Arithmetic.         (line   14)
   39633 * plus and attributes:                   Expressions.        (line   64)
   39634 * plus, canonicalization of:             Insn Canonicalizations.
   39635                                                              (line   27)
   39636 * PLUS_EXPR:                             Expression trees.   (line    6)
   39637 * Pmode:                                 Misc.               (line  344)
   39638 * pmode_register_operand:                Machine-Independent Predicates.
   39639                                                              (line   35)
   39640 * pointer:                               Types.              (line    6)
   39641 * POINTER_PLUS_EXPR:                     Expression trees.   (line    6)
   39642 * POINTER_SIZE:                          Storage Layout.     (line   83)
   39643 * POINTER_TYPE:                          Types.              (line    6)
   39644 * POINTERS_EXTEND_UNSIGNED:              Storage Layout.     (line   89)
   39645 * pop_operand:                           Machine-Independent Predicates.
   39646                                                              (line   88)
   39647 * popcount:                              Arithmetic.         (line  224)
   39648 * popcountM2 instruction pattern:        Standard Names.     (line  635)
   39649 * portability:                           Portability.        (line    6)
   39650 * position independent code:             PIC.                (line    6)
   39651 * post_dec:                              Incdec.             (line   25)
   39652 * post_inc:                              Incdec.             (line   30)
   39653 * post_modify:                           Incdec.             (line   33)
   39654 * POSTDECREMENT_EXPR:                    Expression trees.   (line    6)
   39655 * POSTINCREMENT_EXPR:                    Expression trees.   (line    6)
   39656 * POWI_MAX_MULTS:                        Misc.               (line  830)
   39657 * powM3 instruction pattern:             Standard Names.     (line  509)
   39658 * pragma:                                Misc.               (line  381)
   39659 * pre_dec:                               Incdec.             (line    8)
   39660 * PRE_GCC3_DWARF_FRAME_REGISTERS:        Frame Registers.    (line  110)
   39661 * pre_inc:                               Incdec.             (line   22)
   39662 * pre_modify:                            Incdec.             (line   51)
   39663 * PREDECREMENT_EXPR:                     Expression trees.   (line    6)
   39664 * predefined macros:                     Run-time Target.    (line    6)
   39665 * predicates:                            Predicates.         (line    6)
   39666 * predicates and machine modes:          Predicates.         (line   31)
   39667 * predication:                           Conditional Execution.
   39668                                                              (line    6)
   39669 * predict.def:                           Profile information.
   39670                                                              (line   24)
   39671 * PREFERRED_DEBUGGING_TYPE:              All Debuggers.      (line   42)
   39672 * PREFERRED_OUTPUT_RELOAD_CLASS:         Register Classes.   (line  231)
   39673 * PREFERRED_RELOAD_CLASS:                Register Classes.   (line  196)
   39674 * PREFERRED_STACK_BOUNDARY:              Storage Layout.     (line  158)
   39675 * prefetch:                              Side Effects.       (line  309)
   39676 * prefetch instruction pattern:          Standard Names.     (line 1386)
   39677 * PREINCREMENT_EXPR:                     Expression trees.   (line    6)
   39678 * presence_set:                          Processor pipeline description.
   39679                                                              (line  215)
   39680 * preserving SSA form:                   SSA.                (line   76)
   39681 * preserving virtual SSA form:           SSA.                (line  189)
   39682 * prev_active_insn:                      define_peephole.    (line   60)
   39683 * prev_cc0_setter:                       Jump Patterns.      (line   64)
   39684 * PREV_INSN:                             Insns.              (line   26)
   39685 * PRINT_OPERAND:                         Instruction Output. (line   68)
   39686 * PRINT_OPERAND_ADDRESS:                 Instruction Output. (line   96)
   39687 * PRINT_OPERAND_PUNCT_VALID_P:           Instruction Output. (line   89)
   39688 * processor functional units:            Processor pipeline description.
   39689                                                              (line    6)
   39690 * processor pipeline description:        Processor pipeline description.
   39691                                                              (line    6)
   39692 * product:                               Arithmetic.         (line   92)
   39693 * profile feedback:                      Profile information.
   39694                                                              (line   14)
   39695 * profile representation:                Profile information.
   39696                                                              (line    6)
   39697 * PROFILE_BEFORE_PROLOGUE:               Profiling.          (line   35)
   39698 * PROFILE_HOOK:                          Profiling.          (line   23)
   39699 * profiling, code generation:            Profiling.          (line    6)
   39700 * program counter:                       Regs and Memory.    (line  237)
   39701 * prologue:                              Function Entry.     (line    6)
   39702 * prologue instruction pattern:          Standard Names.     (line 1332)
   39703 * PROMOTE_FUNCTION_MODE:                 Storage Layout.     (line  123)
   39704 * PROMOTE_MODE:                          Storage Layout.     (line  100)
   39705 * pseudo registers:                      Regs and Memory.    (line    9)
   39706 * PSImode:                               Machine Modes.      (line   32)
   39707 * PTRDIFF_TYPE:                          Type Layout.        (line  184)
   39708 * PTRMEM_CST:                            Expression trees.   (line    6)
   39709 * PTRMEM_CST_CLASS:                      Expression trees.   (line    6)
   39710 * PTRMEM_CST_MEMBER:                     Expression trees.   (line    6)
   39711 * purge_dead_edges <1>:                  Maintaining the CFG.
   39712                                                              (line   93)
   39713 * purge_dead_edges:                      Edges.              (line  104)
   39714 * push address instruction:              Simple Constraints. (line  152)
   39715 * PUSH_ARGS:                             Stack Arguments.    (line   18)
   39716 * PUSH_ARGS_REVERSED:                    Stack Arguments.    (line   26)
   39717 * push_operand:                          Machine-Independent Predicates.
   39718                                                              (line   81)
   39719 * push_reload:                           Addressing Modes.   (line  157)
   39720 * PUSH_ROUNDING:                         Stack Arguments.    (line   32)
   39721 * pushM1 instruction pattern:            Standard Names.     (line  209)
   39722 * PUT_CODE:                              RTL Objects.        (line   47)
   39723 * PUT_MODE:                              Machine Modes.      (line  283)
   39724 * PUT_REG_NOTE_KIND:                     Insns.              (line  309)
   39725 * PUT_SDB_:                              SDB and DWARF.      (line   63)
   39726 * QCmode:                                Machine Modes.      (line  197)
   39727 * QFmode:                                Machine Modes.      (line   54)
   39728 * QImode:                                Machine Modes.      (line   25)
   39729 * QImode, in insn:                       Insns.              (line  231)
   39730 * QQmode:                                Machine Modes.      (line  103)
   39731 * qualified type:                        Types.              (line    6)
   39732 * querying function unit reservations:   Processor pipeline description.
   39733                                                              (line   90)
   39734 * question mark:                         Multi-Alternative.  (line   41)
   39735 * quotient:                              Arithmetic.         (line  111)
   39736 * r in constraint:                       Simple Constraints. (line   54)
   39737 * RANGE_TEST_NON_SHORT_CIRCUIT:          Costs.              (line  198)
   39738 * RDIV_EXPR:                             Expression trees.   (line    6)
   39739 * READONLY_DATA_SECTION_ASM_OP:          Sections.           (line   63)
   39740 * real operands:                         Statement Operands. (line    6)
   39741 * REAL_ARITHMETIC:                       Floating Point.     (line   66)
   39742 * REAL_CST:                              Expression trees.   (line    6)
   39743 * REAL_LIBGCC_SPEC:                      Driver.             (line  187)
   39744 * REAL_NM_FILE_NAME:                     Macros for Initialization.
   39745                                                              (line  106)
   39746 * REAL_TYPE:                             Types.              (line    6)
   39747 * REAL_VALUE_ABS:                        Floating Point.     (line   82)
   39748 * REAL_VALUE_ATOF:                       Floating Point.     (line   50)
   39749 * REAL_VALUE_FIX:                        Floating Point.     (line   41)
   39750 * REAL_VALUE_FROM_INT:                   Floating Point.     (line   99)
   39751 * REAL_VALUE_ISINF:                      Floating Point.     (line   59)
   39752 * REAL_VALUE_ISNAN:                      Floating Point.     (line   62)
   39753 * REAL_VALUE_NEGATE:                     Floating Point.     (line   79)
   39754 * REAL_VALUE_NEGATIVE:                   Floating Point.     (line   56)
   39755 * REAL_VALUE_TO_INT:                     Floating Point.     (line   93)
   39756 * REAL_VALUE_TO_TARGET_DECIMAL128:       Data Output.        (line  144)
   39757 * REAL_VALUE_TO_TARGET_DECIMAL32:        Data Output.        (line  142)
   39758 * REAL_VALUE_TO_TARGET_DECIMAL64:        Data Output.        (line  143)
   39759 * REAL_VALUE_TO_TARGET_DOUBLE:           Data Output.        (line  140)
   39760 * REAL_VALUE_TO_TARGET_LONG_DOUBLE:      Data Output.        (line  141)
   39761 * REAL_VALUE_TO_TARGET_SINGLE:           Data Output.        (line  139)
   39762 * REAL_VALUE_TRUNCATE:                   Floating Point.     (line   86)
   39763 * REAL_VALUE_TYPE:                       Floating Point.     (line   26)
   39764 * REAL_VALUE_UNSIGNED_FIX:               Floating Point.     (line   45)
   39765 * REAL_VALUES_EQUAL:                     Floating Point.     (line   32)
   39766 * REAL_VALUES_LESS:                      Floating Point.     (line   38)
   39767 * REALPART_EXPR:                         Expression trees.   (line    6)
   39768 * recog_data.operand:                    Instruction Output. (line   39)
   39769 * recognizing insns:                     RTL Template.       (line    6)
   39770 * RECORD_TYPE <1>:                       Classes.            (line    6)
   39771 * RECORD_TYPE:                           Types.              (line    6)
   39772 * redirect_edge_and_branch:              Profile information.
   39773                                                              (line   71)
   39774 * redirect_edge_and_branch, redirect_jump: Maintaining the CFG.
   39775                                                              (line  103)
   39776 * reduc_smax_M instruction pattern:      Standard Names.     (line  240)
   39777 * reduc_smin_M instruction pattern:      Standard Names.     (line  240)
   39778 * reduc_splus_M instruction pattern:     Standard Names.     (line  252)
   39779 * reduc_umax_M instruction pattern:      Standard Names.     (line  246)
   39780 * reduc_umin_M instruction pattern:      Standard Names.     (line  246)
   39781 * reduc_uplus_M instruction pattern:     Standard Names.     (line  258)
   39782 * reference:                             Types.              (line    6)
   39783 * REFERENCE_TYPE:                        Types.              (line    6)
   39784 * reg:                                   Regs and Memory.    (line    9)
   39785 * reg and /f:                            Flags.              (line   97)
   39786 * reg and /i:                            Flags.              (line   92)
   39787 * reg and /v:                            Flags.              (line  101)
   39788 * reg, RTL sharing:                      Sharing.            (line   17)
   39789 * REG_ALLOC_ORDER:                       Allocation Order.   (line    9)
   39790 * REG_BR_PRED:                           Insns.              (line  530)
   39791 * REG_BR_PROB:                           Insns.              (line  524)
   39792 * REG_BR_PROB_BASE, BB_FREQ_BASE, count: Profile information.
   39793                                                              (line   82)
   39794 * REG_BR_PROB_BASE, EDGE_FREQUENCY:      Profile information.
   39795                                                              (line   52)
   39796 * REG_CC_SETTER:                         Insns.              (line  495)
   39797 * REG_CC_USER:                           Insns.              (line  495)
   39798 * REG_CLASS_CONTENTS:                    Register Classes.   (line   86)
   39799 * reg_class_contents:                    Register Basics.    (line   59)
   39800 * REG_CLASS_FROM_CONSTRAINT:             Old Constraints.    (line   35)
   39801 * REG_CLASS_FROM_LETTER:                 Old Constraints.    (line   27)
   39802 * REG_CLASS_NAMES:                       Register Classes.   (line   81)
   39803 * REG_CROSSING_JUMP:                     Insns.              (line  384)
   39804 * REG_DEAD:                              Insns.              (line  320)
   39805 * REG_DEAD, REG_UNUSED:                  Liveness information.
   39806                                                              (line   32)
   39807 * REG_DEP_ANTI:                          Insns.              (line  517)
   39808 * REG_DEP_OUTPUT:                        Insns.              (line  513)
   39809 * REG_DEP_TRUE:                          Insns.              (line  510)
   39810 * REG_EH_REGION, EDGE_ABNORMAL_CALL:     Edges.              (line  110)
   39811 * REG_EQUAL:                             Insns.              (line  400)
   39812 * REG_EQUIV:                             Insns.              (line  400)
   39813 * REG_EXPR:                              Special Accessors.  (line   46)
   39814 * REG_FRAME_RELATED_EXPR:                Insns.              (line  536)
   39815 * REG_FUNCTION_VALUE_P:                  Flags.              (line   92)
   39816 * REG_INC:                               Insns.              (line  336)
   39817 * reg_label and /v:                      Flags.              (line   50)
   39818 * REG_LABEL_OPERAND:                     Insns.              (line  366)
   39819 * REG_LABEL_TARGET:                      Insns.              (line  375)
   39820 * REG_LIBCALL:                           Insns.              (line  488)
   39821 * REG_LIBCALL_ID:                        Insns.              (line  541)
   39822 * reg_names <1>:                         Instruction Output. (line   80)
   39823 * reg_names:                             Register Basics.    (line   59)
   39824 * REG_NO_CONFLICT:                       Insns.              (line  350)
   39825 * REG_NONNEG:                            Insns.              (line  342)
   39826 * REG_NOTE_KIND:                         Insns.              (line  309)
   39827 * REG_NOTES:                             Insns.              (line  283)
   39828 * REG_OFFSET:                            Special Accessors.  (line   50)
   39829 * REG_OK_STRICT:                         Addressing Modes.   (line   67)
   39830 * REG_PARM_STACK_SPACE:                  Stack Arguments.    (line   56)
   39831 * REG_PARM_STACK_SPACE, and FUNCTION_ARG: Register Arguments.
   39832                                                              (line   52)
   39833 * REG_POINTER:                           Flags.              (line   97)
   39834 * REG_RETVAL:                            Insns.              (line  472)
   39835 * REG_SETJMP:                            Insns.              (line  394)
   39836 * REG_UNUSED:                            Insns.              (line  329)
   39837 * REG_USERVAR_P:                         Flags.              (line  101)
   39838 * regclass_for_constraint:               C Constraint Interface.
   39839                                                              (line   60)
   39840 * register allocation order:             Allocation Order.   (line    6)
   39841 * register class definitions:            Register Classes.   (line    6)
   39842 * register class preference constraints: Class Preferences.  (line    6)
   39843 * register pairs:                        Values in Registers.
   39844                                                              (line   69)
   39845 * Register Transfer Language (RTL):      RTL.                (line    6)
   39846 * register usage:                        Registers.          (line    6)
   39847 * REGISTER_MOVE_COST:                    Costs.              (line   10)
   39848 * REGISTER_NAMES:                        Instruction Output. (line    9)
   39849 * register_operand:                      Machine-Independent Predicates.
   39850                                                              (line   30)
   39851 * REGISTER_PREFIX:                       Instruction Output. (line  124)
   39852 * REGISTER_TARGET_PRAGMAS:               Misc.               (line  382)
   39853 * registers arguments:                   Register Arguments. (line    6)
   39854 * registers in constraints:              Simple Constraints. (line   54)
   39855 * REGMODE_NATURAL_SIZE:                  Values in Registers.
   39856                                                              (line   50)
   39857 * REGNO_MODE_CODE_OK_FOR_BASE_P:         Register Classes.   (line  170)
   39858 * REGNO_MODE_OK_FOR_BASE_P:              Register Classes.   (line  146)
   39859 * REGNO_MODE_OK_FOR_REG_BASE_P:          Register Classes.   (line  157)
   39860 * REGNO_OK_FOR_BASE_P:                   Register Classes.   (line  140)
   39861 * REGNO_OK_FOR_INDEX_P:                  Register Classes.   (line  181)
   39862 * REGNO_REG_CLASS:                       Register Classes.   (line  101)
   39863 * regs_ever_live:                        Function Entry.     (line   21)
   39864 * regular expressions:                   Processor pipeline description.
   39865                                                              (line    6)
   39866 * relative costs:                        Costs.              (line    6)
   39867 * RELATIVE_PREFIX_NOT_LINKDIR:           Driver.             (line  325)
   39868 * reload pass:                           Regs and Memory.    (line  148)
   39869 * reload_completed:                      Standard Names.     (line 1034)
   39870 * reload_in instruction pattern:         Standard Names.     (line   99)
   39871 * reload_in_progress:                    Standard Names.     (line   57)
   39872 * reload_out instruction pattern:        Standard Names.     (line   99)
   39873 * reloading:                             RTL passes.         (line  181)
   39874 * remainder:                             Arithmetic.         (line  131)
   39875 * remainderM3 instruction pattern:       Standard Names.     (line  468)
   39876 * reorder:                               GTY Options.        (line  210)
   39877 * representation of RTL:                 RTL.                (line    6)
   39878 * reservation delays:                    Processor pipeline description.
   39879                                                              (line    6)
   39880 * rest_of_decl_compilation:              Parsing pass.       (line   52)
   39881 * rest_of_type_compilation:              Parsing pass.       (line   52)
   39882 * restore_stack_block instruction pattern: Standard Names.   (line 1168)
   39883 * restore_stack_function instruction pattern: Standard Names.
   39884                                                              (line 1168)
   39885 * restore_stack_nonlocal instruction pattern: Standard Names.
   39886                                                              (line 1168)
   39887 * RESULT_DECL:                           Declarations.       (line    6)
   39888 * return:                                Side Effects.       (line   72)
   39889 * return instruction pattern:            Standard Names.     (line 1021)
   39890 * return values in registers:            Scalar Return.      (line    6)
   39891 * RETURN_ADDR_IN_PREVIOUS_FRAME:         Frame Layout.       (line  135)
   39892 * RETURN_ADDR_OFFSET:                    Exception Handling. (line   60)
   39893 * RETURN_ADDR_RTX:                       Frame Layout.       (line  124)
   39894 * RETURN_ADDRESS_POINTER_REGNUM:         Frame Registers.    (line   51)
   39895 * RETURN_EXPR:                           Function Bodies.    (line    6)
   39896 * RETURN_POPS_ARGS:                      Stack Arguments.    (line   88)
   39897 * RETURN_STMT:                           Function Bodies.    (line    6)
   39898 * return_val:                            Flags.              (line  276)
   39899 * return_val, in mem:                    Flags.              (line   70)
   39900 * return_val, in reg:                    Flags.              (line   92)
   39901 * return_val, in symbol_ref:             Flags.              (line  205)
   39902 * returning aggregate values:            Aggregate Return.   (line    6)
   39903 * returning structures and unions:       Interface.          (line   10)
   39904 * reverse probability:                   Profile information.
   39905                                                              (line   66)
   39906 * REVERSE_CONDEXEC_PREDICATES_P:         Condition Code.     (line  129)
   39907 * REVERSE_CONDITION:                     Condition Code.     (line  116)
   39908 * REVERSIBLE_CC_MODE:                    Condition Code.     (line  102)
   39909 * right rotate:                          Arithmetic.         (line  190)
   39910 * right shift:                           Arithmetic.         (line  185)
   39911 * rintM2 instruction pattern:            Standard Names.     (line  568)
   39912 * RISC:                                  Processor pipeline description.
   39913                                                              (line    6)
   39914 * roots, marking:                        GGC Roots.          (line    6)
   39915 * rotate:                                Arithmetic.         (line  190)
   39916 * rotatert:                              Arithmetic.         (line  190)
   39917 * rotlM3 instruction pattern:            Standard Names.     (line  441)
   39918 * rotrM3 instruction pattern:            Standard Names.     (line  441)
   39919 * Rough GIMPLE Grammar:                  Rough GIMPLE Grammar.
   39920                                                              (line    6)
   39921 * ROUND_DIV_EXPR:                        Expression trees.   (line    6)
   39922 * ROUND_MOD_EXPR:                        Expression trees.   (line    6)
   39923 * ROUND_TOWARDS_ZERO:                    Storage Layout.     (line  472)
   39924 * ROUND_TYPE_ALIGN:                      Storage Layout.     (line  361)
   39925 * roundM2 instruction pattern:           Standard Names.     (line  544)
   39926 * RSHIFT_EXPR:                           Expression trees.   (line    6)
   39927 * RTL addition:                          Arithmetic.         (line   14)
   39928 * RTL addition with signed saturation:   Arithmetic.         (line   14)
   39929 * RTL addition with unsigned saturation: Arithmetic.         (line   14)
   39930 * RTL classes:                           RTL Classes.        (line    6)
   39931 * RTL comparison:                        Arithmetic.         (line   43)
   39932 * RTL comparison operations:             Comparisons.        (line    6)
   39933 * RTL constant expression types:         Constants.          (line    6)
   39934 * RTL constants:                         Constants.          (line    6)
   39935 * RTL declarations:                      RTL Declarations.   (line    6)
   39936 * RTL difference:                        Arithmetic.         (line   36)
   39937 * RTL expression:                        RTL Objects.        (line    6)
   39938 * RTL expressions for arithmetic:        Arithmetic.         (line    6)
   39939 * RTL format:                            RTL Classes.        (line   71)
   39940 * RTL format characters:                 RTL Classes.        (line   76)
   39941 * RTL function-call insns:               Calls.              (line    6)
   39942 * RTL insn template:                     RTL Template.       (line    6)
   39943 * RTL integers:                          RTL Objects.        (line    6)
   39944 * RTL memory expressions:                Regs and Memory.    (line    6)
   39945 * RTL object types:                      RTL Objects.        (line    6)
   39946 * RTL postdecrement:                     Incdec.             (line    6)
   39947 * RTL postincrement:                     Incdec.             (line    6)
   39948 * RTL predecrement:                      Incdec.             (line    6)
   39949 * RTL preincrement:                      Incdec.             (line    6)
   39950 * RTL register expressions:              Regs and Memory.    (line    6)
   39951 * RTL representation:                    RTL.                (line    6)
   39952 * RTL side effect expressions:           Side Effects.       (line    6)
   39953 * RTL strings:                           RTL Objects.        (line    6)
   39954 * RTL structure sharing assumptions:     Sharing.            (line    6)
   39955 * RTL subtraction:                       Arithmetic.         (line   36)
   39956 * RTL subtraction with signed saturation: Arithmetic.        (line   36)
   39957 * RTL subtraction with unsigned saturation: Arithmetic.      (line   36)
   39958 * RTL sum:                               Arithmetic.         (line   14)
   39959 * RTL vectors:                           RTL Objects.        (line    6)
   39960 * RTX (See RTL):                         RTL Objects.        (line    6)
   39961 * RTX codes, classes of:                 RTL Classes.        (line    6)
   39962 * RTX_FRAME_RELATED_P:                   Flags.              (line  110)
   39963 * run-time conventions:                  Interface.          (line    6)
   39964 * run-time target specification:         Run-time Target.    (line    6)
   39965 * s in constraint:                       Simple Constraints. (line   90)
   39966 * same_type_p:                           Types.              (line  148)
   39967 * SAmode:                                Machine Modes.      (line  148)
   39968 * sat_fract:                             Conversions.        (line   91)
   39969 * satfractMN2 instruction pattern:       Standard Names.     (line  837)
   39970 * satfractunsMN2 instruction pattern:    Standard Names.     (line  850)
   39971 * satisfies_constraint_:                 C Constraint Interface.
   39972                                                              (line   47)
   39973 * SAVE_EXPR:                             Expression trees.   (line    6)
   39974 * save_stack_block instruction pattern:  Standard Names.     (line 1168)
   39975 * save_stack_function instruction pattern: Standard Names.   (line 1168)
   39976 * save_stack_nonlocal instruction pattern: Standard Names.   (line 1168)
   39977 * SBSS_SECTION_ASM_OP:                   Sections.           (line   77)
   39978 * Scalar evolutions:                     Scalar evolutions.  (line    6)
   39979 * scalars, returned as values:           Scalar Return.      (line    6)
   39980 * SCHED_GROUP_P:                         Flags.              (line  151)
   39981 * SCmode:                                Machine Modes.      (line  197)
   39982 * sCOND instruction pattern:             Standard Names.     (line  905)
   39983 * scratch:                               Regs and Memory.    (line  173)
   39984 * scratch operands:                      Regs and Memory.    (line  173)
   39985 * scratch, RTL sharing:                  Sharing.            (line   35)
   39986 * scratch_operand:                       Machine-Independent Predicates.
   39987                                                              (line   50)
   39988 * SDATA_SECTION_ASM_OP:                  Sections.           (line   58)
   39989 * SDB_ALLOW_FORWARD_REFERENCES:          SDB and DWARF.      (line   81)
   39990 * SDB_ALLOW_UNKNOWN_REFERENCES:          SDB and DWARF.      (line   76)
   39991 * SDB_DEBUGGING_INFO:                    SDB and DWARF.      (line    9)
   39992 * SDB_DELIM:                             SDB and DWARF.      (line   69)
   39993 * SDB_OUTPUT_SOURCE_LINE:                SDB and DWARF.      (line   86)
   39994 * SDmode:                                Machine Modes.      (line   85)
   39995 * sdot_prodM instruction pattern:        Standard Names.     (line  264)
   39996 * search options:                        Including Patterns. (line   44)
   39997 * SECONDARY_INPUT_RELOAD_CLASS:          Register Classes.   (line  335)
   39998 * SECONDARY_MEMORY_NEEDED:               Register Classes.   (line  391)
   39999 * SECONDARY_MEMORY_NEEDED_MODE:          Register Classes.   (line  410)
   40000 * SECONDARY_MEMORY_NEEDED_RTX:           Register Classes.   (line  401)
   40001 * SECONDARY_OUTPUT_RELOAD_CLASS:         Register Classes.   (line  336)
   40002 * SECONDARY_RELOAD_CLASS:                Register Classes.   (line  334)
   40003 * SELECT_CC_MODE:                        Condition Code.     (line   68)
   40004 * Selection Statements:                  Selection Statements.
   40005                                                              (line    6)
   40006 * sequence:                              Side Effects.       (line  251)
   40007 * set:                                   Side Effects.       (line   15)
   40008 * set and /f:                            Flags.              (line  110)
   40009 * SET_ASM_OP:                            Label Output.       (line  378)
   40010 * set_attr:                              Tagging Insns.      (line   31)
   40011 * set_attr_alternative:                  Tagging Insns.      (line   49)
   40012 * SET_BY_PIECES_P:                       Costs.              (line  139)
   40013 * SET_DEST:                              Side Effects.       (line   69)
   40014 * SET_IS_RETURN_P:                       Flags.              (line  160)
   40015 * SET_LABEL_KIND:                        Insns.              (line  140)
   40016 * set_optab_libfunc:                     Library Calls.      (line   15)
   40017 * SET_RATIO:                             Costs.              (line  130)
   40018 * SET_SRC:                               Side Effects.       (line   69)
   40019 * SET_TYPE_STRUCTURAL_EQUALITY:          Types.              (line    6)
   40020 * setmemM instruction pattern:           Standard Names.     (line  710)
   40021 * SETUP_FRAME_ADDRESSES:                 Frame Layout.       (line  102)
   40022 * SF_SIZE:                               Type Layout.        (line  129)
   40023 * SFmode:                                Machine Modes.      (line   66)
   40024 * sharing of RTL components:             Sharing.            (line    6)
   40025 * shift:                                 Arithmetic.         (line  168)
   40026 * SHIFT_COUNT_TRUNCATED:                 Misc.               (line  127)
   40027 * SHLIB_SUFFIX:                          Macros for Initialization.
   40028                                                              (line  129)
   40029 * SHORT_ACCUM_TYPE_SIZE:                 Type Layout.        (line   83)
   40030 * SHORT_FRACT_TYPE_SIZE:                 Type Layout.        (line   63)
   40031 * SHORT_IMMEDIATES_SIGN_EXTEND:          Misc.               (line   96)
   40032 * SHORT_TYPE_SIZE:                       Type Layout.        (line   16)
   40033 * sibcall_epilogue instruction pattern:  Standard Names.     (line 1358)
   40034 * sibling call:                          Edges.              (line  122)
   40035 * SIBLING_CALL_P:                        Flags.              (line  164)
   40036 * sign_extend:                           Conversions.        (line   23)
   40037 * sign_extract:                          Bit-Fields.         (line    8)
   40038 * sign_extract, canonicalization of:     Insn Canonicalizations.
   40039                                                              (line   96)
   40040 * signed division:                       Arithmetic.         (line  111)
   40041 * signed division with signed saturation: Arithmetic.        (line  111)
   40042 * signed maximum:                        Arithmetic.         (line  136)
   40043 * signed minimum:                        Arithmetic.         (line  136)
   40044 * SImode:                                Machine Modes.      (line   37)
   40045 * simple constraints:                    Simple Constraints. (line    6)
   40046 * sincos math function, implicit usage:  Library Calls.      (line   84)
   40047 * sinM2 instruction pattern:             Standard Names.     (line  485)
   40048 * SIZE_ASM_OP:                           Label Output.       (line   23)
   40049 * SIZE_TYPE:                             Type Layout.        (line  168)
   40050 * skip:                                  GTY Options.        (line   77)
   40051 * SLOW_BYTE_ACCESS:                      Costs.              (line   60)
   40052 * SLOW_UNALIGNED_ACCESS:                 Costs.              (line   75)
   40053 * SMALL_REGISTER_CLASSES:                Register Classes.   (line  433)
   40054 * smax:                                  Arithmetic.         (line  136)
   40055 * smin:                                  Arithmetic.         (line  136)
   40056 * sms, swing, software pipelining:       RTL passes.         (line  140)
   40057 * smulM3_highpart instruction pattern:   Standard Names.     (line  356)
   40058 * soft float library:                    Soft float library routines.
   40059                                                              (line    6)
   40060 * special:                               GTY Options.        (line  230)
   40061 * special predicates:                    Predicates.         (line   31)
   40062 * SPECS:                                 Target Fragment.    (line  108)
   40063 * speed of instructions:                 Costs.              (line    6)
   40064 * split_block:                           Maintaining the CFG.
   40065                                                              (line  110)
   40066 * splitting instructions:                Insn Splitting.     (line    6)
   40067 * SQmode:                                Machine Modes.      (line  111)
   40068 * sqrt:                                  Arithmetic.         (line  198)
   40069 * sqrtM2 instruction pattern:            Standard Names.     (line  451)
   40070 * square root:                           Arithmetic.         (line  198)
   40071 * ss_ashift:                             Arithmetic.         (line  168)
   40072 * ss_div:                                Arithmetic.         (line  111)
   40073 * ss_minus:                              Arithmetic.         (line   36)
   40074 * ss_mult:                               Arithmetic.         (line   92)
   40075 * ss_neg:                                Arithmetic.         (line   81)
   40076 * ss_plus:                               Arithmetic.         (line   14)
   40077 * ss_truncate:                           Conversions.        (line   43)
   40078 * SSA:                                   SSA.                (line    6)
   40079 * SSA_NAME_DEF_STMT:                     SSA.                (line  224)
   40080 * SSA_NAME_VERSION:                      SSA.                (line  229)
   40081 * ssaddM3 instruction pattern:           Standard Names.     (line  222)
   40082 * ssashlM3 instruction pattern:          Standard Names.     (line  431)
   40083 * ssdivM3 instruction pattern:           Standard Names.     (line  222)
   40084 * ssmaddMN4 instruction pattern:         Standard Names.     (line  379)
   40085 * ssmsubMN4 instruction pattern:         Standard Names.     (line  403)
   40086 * ssmulM3 instruction pattern:           Standard Names.     (line  222)
   40087 * ssnegM2 instruction pattern:           Standard Names.     (line  445)
   40088 * sssubM3 instruction pattern:           Standard Names.     (line  222)
   40089 * ssum_widenM3 instruction pattern:      Standard Names.     (line  274)
   40090 * stack arguments:                       Stack Arguments.    (line    6)
   40091 * stack frame layout:                    Frame Layout.       (line    6)
   40092 * stack smashing protection:             Stack Smashing Protection.
   40093                                                              (line    6)
   40094 * STACK_ALIGNMENT_NEEDED:                Frame Layout.       (line   48)
   40095 * STACK_BOUNDARY:                        Storage Layout.     (line  150)
   40096 * STACK_CHECK_BUILTIN:                   Stack Checking.     (line   29)
   40097 * STACK_CHECK_FIXED_FRAME_SIZE:          Stack Checking.     (line   64)
   40098 * STACK_CHECK_MAX_FRAME_SIZE:            Stack Checking.     (line   55)
   40099 * STACK_CHECK_MAX_VAR_SIZE:              Stack Checking.     (line   71)
   40100 * STACK_CHECK_PROBE_INTERVAL:            Stack Checking.     (line   37)
   40101 * STACK_CHECK_PROBE_LOAD:                Stack Checking.     (line   44)
   40102 * STACK_CHECK_PROTECT:                   Stack Checking.     (line   50)
   40103 * STACK_DYNAMIC_OFFSET:                  Frame Layout.       (line   75)
   40104 * STACK_DYNAMIC_OFFSET and virtual registers: Regs and Memory.
   40105                                                              (line   83)
   40106 * STACK_GROWS_DOWNWARD:                  Frame Layout.       (line    9)
   40107 * STACK_PARMS_IN_REG_PARM_AREA:          Stack Arguments.    (line   79)
   40108 * STACK_POINTER_OFFSET:                  Frame Layout.       (line   58)
   40109 * STACK_POINTER_OFFSET and virtual registers: Regs and Memory.
   40110                                                              (line   93)
   40111 * STACK_POINTER_REGNUM:                  Frame Registers.    (line    9)
   40112 * STACK_POINTER_REGNUM and virtual registers: Regs and Memory.
   40113                                                              (line   83)
   40114 * stack_pointer_rtx:                     Frame Registers.    (line   85)
   40115 * stack_protect_set instruction pattern: Standard Names.     (line 1530)
   40116 * stack_protect_test instruction pattern: Standard Names.    (line 1540)
   40117 * STACK_PUSH_CODE:                       Frame Layout.       (line   17)
   40118 * STACK_REGS:                            Stack Registers.    (line   20)
   40119 * STACK_SAVEAREA_MODE:                   Storage Layout.     (line  377)
   40120 * STACK_SIZE_MODE:                       Storage Layout.     (line  389)
   40121 * standard pattern names:                Standard Names.     (line    6)
   40122 * STANDARD_INCLUDE_COMPONENT:            Driver.             (line  425)
   40123 * STANDARD_INCLUDE_DIR:                  Driver.             (line  417)
   40124 * STANDARD_STARTFILE_PREFIX:             Driver.             (line  337)
   40125 * STANDARD_STARTFILE_PREFIX_1:           Driver.             (line  344)
   40126 * STANDARD_STARTFILE_PREFIX_2:           Driver.             (line  351)
   40127 * STARTFILE_SPEC:                        Driver.             (line  210)
   40128 * STARTING_FRAME_OFFSET:                 Frame Layout.       (line   39)
   40129 * STARTING_FRAME_OFFSET and virtual registers: Regs and Memory.
   40130                                                              (line   74)
   40131 * Statement Sequences:                   Statement Sequences.
   40132                                                              (line    6)
   40133 * Statements:                            Statements.         (line    6)
   40134 * statements:                            Function Bodies.    (line    6)
   40135 * Static profile estimation:             Profile information.
   40136                                                              (line   24)
   40137 * static single assignment:              SSA.                (line    6)
   40138 * STATIC_CHAIN:                          Frame Registers.    (line   77)
   40139 * STATIC_CHAIN_INCOMING:                 Frame Registers.    (line   78)
   40140 * STATIC_CHAIN_INCOMING_REGNUM:          Frame Registers.    (line   64)
   40141 * STATIC_CHAIN_REGNUM:                   Frame Registers.    (line   63)
   40142 * stdarg.h and register arguments:       Register Arguments. (line   47)
   40143 * STDC_0_IN_SYSTEM_HEADERS:              Misc.               (line  365)
   40144 * STMT_EXPR:                             Expression trees.   (line    6)
   40145 * STMT_IS_FULL_EXPR_P:                   Function Bodies.    (line   22)
   40146 * storage layout:                        Storage Layout.     (line    6)
   40147 * STORE_BY_PIECES_P:                     Costs.              (line  146)
   40148 * STORE_FLAG_VALUE:                      Misc.               (line  216)
   40149 * store_multiple instruction pattern:    Standard Names.     (line  160)
   40150 * strcpy:                                Storage Layout.     (line  215)
   40151 * STRICT_ALIGNMENT:                      Storage Layout.     (line  259)
   40152 * strict_low_part:                       RTL Declarations.   (line    9)
   40153 * strict_memory_address_p:               Addressing Modes.   (line  167)
   40154 * STRING_CST:                            Expression trees.   (line    6)
   40155 * STRING_POOL_ADDRESS_P:                 Flags.              (line  168)
   40156 * strlenM instruction pattern:           Standard Names.     (line  772)
   40157 * structure value address:               Aggregate Return.   (line    6)
   40158 * STRUCTURE_SIZE_BOUNDARY:               Storage Layout.     (line  251)
   40159 * structures, returning:                 Interface.          (line   10)
   40160 * subM3 instruction pattern:             Standard Names.     (line  222)
   40161 * SUBOBJECT:                             Function Bodies.    (line    6)
   40162 * SUBOBJECT_CLEANUP:                     Function Bodies.    (line    6)
   40163 * subreg:                                Regs and Memory.    (line   97)
   40164 * subreg and /s:                         Flags.              (line  190)
   40165 * subreg and /u:                         Flags.              (line  183)
   40166 * subreg and /u and /v:                  Flags.              (line  173)
   40167 * subreg, in strict_low_part:            RTL Declarations.   (line    9)
   40168 * subreg, special reload handling:       Regs and Memory.    (line  148)
   40169 * SUBREG_BYTE:                           Regs and Memory.    (line  169)
   40170 * SUBREG_PROMOTED_UNSIGNED_P:            Flags.              (line  173)
   40171 * SUBREG_PROMOTED_UNSIGNED_SET:          Flags.              (line  183)
   40172 * SUBREG_PROMOTED_VAR_P:                 Flags.              (line  190)
   40173 * SUBREG_REG:                            Regs and Memory.    (line  169)
   40174 * SUCCESS_EXIT_CODE:                     Host Misc.          (line   12)
   40175 * SUPPORTS_INIT_PRIORITY:                Macros for Initialization.
   40176                                                              (line   58)
   40177 * SUPPORTS_ONE_ONLY:                     Label Output.       (line  227)
   40178 * SUPPORTS_WEAK:                         Label Output.       (line  208)
   40179 * SWITCH_BODY:                           Function Bodies.    (line    6)
   40180 * SWITCH_COND:                           Function Bodies.    (line    6)
   40181 * SWITCH_CURTAILS_COMPILATION:           Driver.             (line   33)
   40182 * SWITCH_STMT:                           Function Bodies.    (line    6)
   40183 * SWITCH_TAKES_ARG:                      Driver.             (line    9)
   40184 * SWITCHES_NEED_SPACES:                  Driver.             (line   47)
   40185 * SYMBOL_FLAG_ANCHOR:                    Special Accessors.  (line  106)
   40186 * SYMBOL_FLAG_EXTERNAL:                  Special Accessors.  (line   88)
   40187 * SYMBOL_FLAG_FUNCTION:                  Special Accessors.  (line   81)
   40188 * SYMBOL_FLAG_HAS_BLOCK_INFO:            Special Accessors.  (line  102)
   40189 * SYMBOL_FLAG_LOCAL:                     Special Accessors.  (line   84)
   40190 * SYMBOL_FLAG_SMALL:                     Special Accessors.  (line   93)
   40191 * SYMBOL_FLAG_TLS_SHIFT:                 Special Accessors.  (line   97)
   40192 * symbol_ref:                            Constants.          (line   95)
   40193 * symbol_ref and /f:                     Flags.              (line  168)
   40194 * symbol_ref and /i:                     Flags.              (line  205)
   40195 * symbol_ref and /u:                     Flags.              (line   10)
   40196 * symbol_ref and /v:                     Flags.              (line  209)
   40197 * symbol_ref, RTL sharing:               Sharing.            (line   20)
   40198 * SYMBOL_REF_ANCHOR_P:                   Special Accessors.  (line  106)
   40199 * SYMBOL_REF_BLOCK:                      Special Accessors.  (line  119)
   40200 * SYMBOL_REF_BLOCK_OFFSET:               Special Accessors.  (line  124)
   40201 * SYMBOL_REF_CONSTANT:                   Special Accessors.  (line   67)
   40202 * SYMBOL_REF_DATA:                       Special Accessors.  (line   71)
   40203 * SYMBOL_REF_DECL:                       Special Accessors.  (line   55)
   40204 * SYMBOL_REF_EXTERNAL_P:                 Special Accessors.  (line   88)
   40205 * SYMBOL_REF_FLAG:                       Flags.              (line  209)
   40206 * SYMBOL_REF_FLAG, in TARGET_ENCODE_SECTION_INFO: Sections.  (line  259)
   40207 * SYMBOL_REF_FLAGS:                      Special Accessors.  (line   75)
   40208 * SYMBOL_REF_FUNCTION_P:                 Special Accessors.  (line   81)
   40209 * SYMBOL_REF_HAS_BLOCK_INFO_P:           Special Accessors.  (line  102)
   40210 * SYMBOL_REF_LOCAL_P:                    Special Accessors.  (line   84)
   40211 * SYMBOL_REF_SMALL_P:                    Special Accessors.  (line   93)
   40212 * SYMBOL_REF_TLS_MODEL:                  Special Accessors.  (line   97)
   40213 * SYMBOL_REF_USED:                       Flags.              (line  200)
   40214 * SYMBOL_REF_WEAK:                       Flags.              (line  205)
   40215 * symbolic label:                        Sharing.            (line   20)
   40216 * sync_addMODE instruction pattern:      Standard Names.     (line 1444)
   40217 * sync_andMODE instruction pattern:      Standard Names.     (line 1444)
   40218 * sync_compare_and_swap_ccMODE instruction pattern: Standard Names.
   40219                                                              (line 1431)
   40220 * sync_compare_and_swapMODE instruction pattern: Standard Names.
   40221                                                              (line 1413)
   40222 * sync_iorMODE instruction pattern:      Standard Names.     (line 1444)
   40223 * sync_lock_releaseMODE instruction pattern: Standard Names. (line 1511)
   40224 * sync_lock_test_and_setMODE instruction pattern: Standard Names.
   40225                                                              (line 1485)
   40226 * sync_nandMODE instruction pattern:     Standard Names.     (line 1444)
   40227 * sync_new_addMODE instruction pattern:  Standard Names.     (line 1478)
   40228 * sync_new_andMODE instruction pattern:  Standard Names.     (line 1478)
   40229 * sync_new_iorMODE instruction pattern:  Standard Names.     (line 1478)
   40230 * sync_new_nandMODE instruction pattern: Standard Names.     (line 1478)
   40231 * sync_new_subMODE instruction pattern:  Standard Names.     (line 1478)
   40232 * sync_new_xorMODE instruction pattern:  Standard Names.     (line 1478)
   40233 * sync_old_addMODE instruction pattern:  Standard Names.     (line 1461)
   40234 * sync_old_andMODE instruction pattern:  Standard Names.     (line 1461)
   40235 * sync_old_iorMODE instruction pattern:  Standard Names.     (line 1461)
   40236 * sync_old_nandMODE instruction pattern: Standard Names.     (line 1461)
   40237 * sync_old_subMODE instruction pattern:  Standard Names.     (line 1461)
   40238 * sync_old_xorMODE instruction pattern:  Standard Names.     (line 1461)
   40239 * sync_subMODE instruction pattern:      Standard Names.     (line 1444)
   40240 * sync_xorMODE instruction pattern:      Standard Names.     (line 1444)
   40241 * SYSROOT_HEADERS_SUFFIX_SPEC:           Driver.             (line  239)
   40242 * SYSROOT_SUFFIX_SPEC:                   Driver.             (line  234)
   40243 * SYSTEM_INCLUDE_DIR:                    Driver.             (line  408)
   40244 * t-TARGET:                              Target Fragment.    (line    6)
   40245 * table jump:                            Basic Blocks.       (line   57)
   40246 * tablejump instruction pattern:         Standard Names.     (line 1096)
   40247 * tag:                                   GTY Options.        (line   82)
   40248 * tagging insns:                         Tagging Insns.      (line    6)
   40249 * tail calls:                            Tail Calls.         (line    6)
   40250 * TAmode:                                Machine Modes.      (line  156)
   40251 * target attributes:                     Target Attributes.  (line    6)
   40252 * target description macros:             Target Macros.      (line    6)
   40253 * target functions:                      Target Structure.   (line    6)
   40254 * target hooks:                          Target Structure.   (line    6)
   40255 * target makefile fragment:              Target Fragment.    (line    6)
   40256 * target specifications:                 Run-time Target.    (line    6)
   40257 * TARGET_ADDRESS_COST:                   Costs.              (line  230)
   40258 * TARGET_ALIGN_ANON_BITFIELDS:           Storage Layout.     (line  336)
   40259 * TARGET_ALLOCATE_INITIAL_VALUE:         Misc.               (line  720)
   40260 * TARGET_ARG_PARTIAL_BYTES:              Register Arguments. (line   83)
   40261 * TARGET_ARM_EABI_UNWINDER:              Exception Region Output.
   40262                                                              (line  113)
   40263 * TARGET_ASM_ALIGNED_DI_OP:              Data Output.        (line   10)
   40264 * TARGET_ASM_ALIGNED_HI_OP:              Data Output.        (line    8)
   40265 * TARGET_ASM_ALIGNED_SI_OP:              Data Output.        (line    9)
   40266 * TARGET_ASM_ALIGNED_TI_OP:              Data Output.        (line   11)
   40267 * TARGET_ASM_ASSEMBLE_VISIBILITY:        Label Output.       (line  239)
   40268 * TARGET_ASM_BYTE_OP:                    Data Output.        (line    7)
   40269 * TARGET_ASM_CAN_OUTPUT_MI_THUNK:        Function Entry.     (line  237)
   40270 * TARGET_ASM_CLOSE_PAREN:                Data Output.        (line  130)
   40271 * TARGET_ASM_CONSTRUCTOR:                Macros for Initialization.
   40272                                                              (line   69)
   40273 * TARGET_ASM_DESTRUCTOR:                 Macros for Initialization.
   40274                                                              (line   83)
   40275 * TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL:    Dispatch Tables.    (line   74)
   40276 * TARGET_ASM_EMIT_UNWIND_LABEL:          Dispatch Tables.    (line   63)
   40277 * TARGET_ASM_EXTERNAL_LIBCALL:           Label Output.       (line  274)
   40278 * TARGET_ASM_FILE_END:                   File Framework.     (line   37)
   40279 * TARGET_ASM_FILE_START:                 File Framework.     (line    9)
   40280 * TARGET_ASM_FILE_START_APP_OFF:         File Framework.     (line   17)
   40281 * TARGET_ASM_FILE_START_FILE_DIRECTIVE:  File Framework.     (line   31)
   40282 * TARGET_ASM_FUNCTION_BEGIN_EPILOGUE:    Function Entry.     (line   61)
   40283 * TARGET_ASM_FUNCTION_END_PROLOGUE:      Function Entry.     (line   55)
   40284 * TARGET_ASM_FUNCTION_EPILOGUE:          Function Entry.     (line   68)
   40285 * TARGET_ASM_FUNCTION_EPILOGUE and trampolines: Trampolines. (line   70)
   40286 * TARGET_ASM_FUNCTION_PROLOGUE:          Function Entry.     (line   11)
   40287 * TARGET_ASM_FUNCTION_PROLOGUE and trampolines: Trampolines. (line   70)
   40288 * TARGET_ASM_FUNCTION_RODATA_SECTION:    Sections.           (line  206)
   40289 * TARGET_ASM_GLOBALIZE_DECL_NAME:        Label Output.       (line  174)
   40290 * TARGET_ASM_GLOBALIZE_LABEL:            Label Output.       (line  165)
   40291 * TARGET_ASM_INIT_SECTIONS:              Sections.           (line  151)
   40292 * TARGET_ASM_INTEGER:                    Data Output.        (line   27)
   40293 * TARGET_ASM_INTERNAL_LABEL:             Label Output.       (line  309)
   40294 * TARGET_ASM_MARK_DECL_PRESERVED:        Label Output.       (line  280)
   40295 * TARGET_ASM_NAMED_SECTION:              File Framework.     (line   89)
   40296 * TARGET_ASM_OPEN_PAREN:                 Data Output.        (line  129)
   40297 * TARGET_ASM_OUTPUT_ANCHOR:              Anchored Addresses. (line   44)
   40298 * TARGET_ASM_OUTPUT_DWARF_DTPREL:        SDB and DWARF.      (line   58)
   40299 * TARGET_ASM_OUTPUT_MI_THUNK:            Function Entry.     (line  195)
   40300 * TARGET_ASM_RECORD_GCC_SWITCHES:        File Framework.     (line  122)
   40301 * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION: File Framework.    (line  166)
   40302 * TARGET_ASM_SELECT_RTX_SECTION:         Sections.           (line  214)
   40303 * TARGET_ASM_SELECT_SECTION:             Sections.           (line  172)
   40304 * TARGET_ASM_TTYPE:                      Exception Region Output.
   40305                                                              (line  107)
   40306 * TARGET_ASM_UNALIGNED_DI_OP:            Data Output.        (line   14)
   40307 * TARGET_ASM_UNALIGNED_HI_OP:            Data Output.        (line   12)
   40308 * TARGET_ASM_UNALIGNED_SI_OP:            Data Output.        (line   13)
   40309 * TARGET_ASM_UNALIGNED_TI_OP:            Data Output.        (line   15)
   40310 * TARGET_ASM_UNIQUE_SECTION:             Sections.           (line  193)
   40311 * TARGET_ATTRIBUTE_TABLE:                Target Attributes.  (line   11)
   40312 * TARGET_BINDS_LOCAL_P:                  Sections.           (line  284)
   40313 * TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED: Misc.          (line  816)
   40314 * TARGET_BRANCH_TARGET_REGISTER_CLASS:   Misc.               (line  808)
   40315 * TARGET_BUILD_BUILTIN_VA_LIST:          Register Arguments. (line  249)
   40316 * TARGET_BUILTIN_RECIPROCAL:             Addressing Modes.   (line  228)
   40317 * TARGET_BUILTIN_SETJMP_FRAME_VALUE:     Frame Layout.       (line  109)
   40318 * TARGET_C99_FUNCTIONS:                  Library Calls.      (line   77)
   40319 * TARGET_CALLEE_COPIES:                  Register Arguments. (line  115)
   40320 * TARGET_CANNOT_FORCE_CONST_MEM:         Addressing Modes.   (line  209)
   40321 * TARGET_CANNOT_MODIFY_JUMPS_P:          Misc.               (line  795)
   40322 * TARGET_COMMUTATIVE_P:                  Misc.               (line  713)
   40323 * TARGET_COMP_TYPE_ATTRIBUTES:           Target Attributes.  (line   19)
   40324 * TARGET_CPU_CPP_BUILTINS:               Run-time Target.    (line    9)
   40325 * TARGET_CXX_ADJUST_CLASS_AT_DEFINITION: C++ ABI.            (line   87)
   40326 * TARGET_CXX_CDTOR_RETURNS_THIS:         C++ ABI.            (line   38)
   40327 * TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT:   C++ ABI.            (line   62)
   40328 * TARGET_CXX_COOKIE_HAS_SIZE:            C++ ABI.            (line   25)
   40329 * TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY: C++ ABI.       (line   54)
   40330 * TARGET_CXX_GET_COOKIE_SIZE:            C++ ABI.            (line   18)
   40331 * TARGET_CXX_GUARD_MASK_BIT:             C++ ABI.            (line   12)
   40332 * TARGET_CXX_GUARD_TYPE:                 C++ ABI.            (line    7)
   40333 * TARGET_CXX_IMPORT_EXPORT_CLASS:        C++ ABI.            (line   30)
   40334 * TARGET_CXX_KEY_METHOD_MAY_BE_INLINE:   C++ ABI.            (line   43)
   40335 * TARGET_CXX_LIBRARY_RTTI_COMDAT:        C++ ABI.            (line   69)
   40336 * TARGET_CXX_USE_AEABI_ATEXIT:           C++ ABI.            (line   74)
   40337 * TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT:  C++ ABI.            (line   80)
   40338 * TARGET_DECIMAL_FLOAT_SUPPORTED_P:      Storage Layout.     (line  539)
   40339 * TARGET_DECLSPEC:                       Target Attributes.  (line   64)
   40340 * TARGET_DEFAULT_PACK_STRUCT:            Misc.               (line  482)
   40341 * TARGET_DEFAULT_SHORT_ENUMS:            Type Layout.        (line  160)
   40342 * TARGET_DEFERRED_OUTPUT_DEFS:           Label Output.       (line  393)
   40343 * TARGET_DELEGITIMIZE_ADDRESS:           Addressing Modes.   (line  200)
   40344 * TARGET_DLLIMPORT_DECL_ATTRIBUTES:      Target Attributes.  (line   47)
   40345 * TARGET_DWARF_CALLING_CONVENTION:       SDB and DWARF.      (line   18)
   40346 * TARGET_DWARF_HANDLE_FRAME_UNSPEC:      Frame Layout.       (line  172)
   40347 * TARGET_DWARF_REGISTER_SPAN:            Exception Region Output.
   40348                                                              (line   90)
   40349 * TARGET_EDOM:                           Library Calls.      (line   59)
   40350 * TARGET_ENCODE_SECTION_INFO:            Sections.           (line  235)
   40351 * TARGET_ENCODE_SECTION_INFO and address validation: Addressing Modes.
   40352                                                              (line   91)
   40353 * TARGET_ENCODE_SECTION_INFO usage:      Instruction Output. (line  100)
   40354 * TARGET_EXECUTABLE_SUFFIX:              Misc.               (line  769)
   40355 * TARGET_EXPAND_BUILTIN:                 Misc.               (line  665)
   40356 * TARGET_EXPAND_BUILTIN_SAVEREGS:        Varargs.            (line   92)
   40357 * TARGET_EXPAND_TO_RTL_HOOK:             Storage Layout.     (line  545)
   40358 * TARGET_EXPR:                           Expression trees.   (line    6)
   40359 * TARGET_EXTRA_INCLUDES:                 Misc.               (line  841)
   40360 * TARGET_EXTRA_LIVE_ON_ENTRY:            Tail Calls.         (line   21)
   40361 * TARGET_EXTRA_PRE_INCLUDES:             Misc.               (line  848)
   40362 * TARGET_FIXED_CONDITION_CODE_REGS:      Condition Code.     (line  142)
   40363 * TARGET_FIXED_POINT_SUPPORTED_P:        Storage Layout.     (line  542)
   40364 * target_flags:                          Run-time Target.    (line   52)
   40365 * TARGET_FLOAT_FORMAT:                   Storage Layout.     (line  410)
   40366 * TARGET_FLT_EVAL_METHOD:                Type Layout.        (line  141)
   40367 * TARGET_FOLD_BUILTIN:                   Misc.               (line  685)
   40368 * TARGET_FORMAT_TYPES:                   Misc.               (line  868)
   40369 * TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes.  (line   86)
   40370 * TARGET_FUNCTION_OK_FOR_SIBCALL:        Tail Calls.         (line    8)
   40371 * TARGET_FUNCTION_VALUE:                 Scalar Return.      (line   11)
   40372 * TARGET_GIMPLIFY_VA_ARG_EXPR:           Register Arguments. (line  254)
   40373 * TARGET_HANDLE_C_OPTION:                Run-time Target.    (line   78)
   40374 * TARGET_HANDLE_OPTION:                  Run-time Target.    (line   61)
   40375 * TARGET_HAS_SINCOS:                     Library Calls.      (line   85)
   40376 * TARGET_HAVE_CTORS_DTORS:               Macros for Initialization.
   40377                                                              (line   64)
   40378 * TARGET_HAVE_NAMED_SECTIONS:            File Framework.     (line   99)
   40379 * TARGET_HAVE_SWITCHABLE_BSS_SECTIONS:   File Framework.     (line  103)
   40380 * TARGET_HELP:                           Run-time Target.    (line  141)
   40381 * TARGET_IN_SMALL_DATA_P:                Sections.           (line  276)
   40382 * TARGET_INIT_BUILTINS:                  Misc.               (line  647)
   40383 * TARGET_INIT_DWARF_REG_SIZES_EXTRA:     Exception Region Output.
   40384                                                              (line   99)
   40385 * TARGET_INIT_LIBFUNCS:                  Library Calls.      (line   16)
   40386 * TARGET_INSERT_ATTRIBUTES:              Target Attributes.  (line   73)
   40387 * TARGET_INSTANTIATE_DECLS:              Storage Layout.     (line  553)
   40388 * TARGET_INVALID_BINARY_OP:              Misc.               (line  906)
   40389 * TARGET_INVALID_CONVERSION:             Misc.               (line  893)
   40390 * TARGET_INVALID_UNARY_OP:               Misc.               (line  899)
   40391 * TARGET_LIB_INT_CMP_BIASED:             Library Calls.      (line   35)
   40392 * TARGET_LIBGCC_CMP_RETURN_MODE:         Storage Layout.     (line  398)
   40393 * TARGET_LIBGCC_SDATA_SECTION:           Sections.           (line  123)
   40394 * TARGET_LIBGCC_SHIFT_COUNT_MODE:        Storage Layout.     (line  404)
   40395 * TARGET_MACHINE_DEPENDENT_REORG:        Misc.               (line  632)
   40396 * TARGET_MANGLE_DECL_ASSEMBLER_NAME:     Sections.           (line  225)
   40397 * TARGET_MANGLE_TYPE:                    Storage Layout.     (line  557)
   40398 * TARGET_MD_ASM_CLOBBERS:                Misc.               (line  548)
   40399 * TARGET_MEM_REF:                        Expression trees.   (line    6)
   40400 * TARGET_MERGE_DECL_ATTRIBUTES:          Target Attributes.  (line   39)
   40401 * TARGET_MERGE_TYPE_ATTRIBUTES:          Target Attributes.  (line   31)
   40402 * TARGET_MIN_DIVISIONS_FOR_RECIP_MUL:    Misc.               (line  106)
   40403 * TARGET_MODE_REP_EXTENDED:              Misc.               (line  191)
   40404 * TARGET_MS_BITFIELD_LAYOUT_P:           Storage Layout.     (line  512)
   40405 * TARGET_MUST_PASS_IN_STACK:             Register Arguments. (line   62)
   40406 * TARGET_MUST_PASS_IN_STACK, and FUNCTION_ARG: Register Arguments.
   40407                                                              (line   52)
   40408 * TARGET_N_FORMAT_TYPES:                 Misc.               (line  873)
   40409 * TARGET_NARROW_VOLATILE_BITFIELDS:      Storage Layout.     (line  342)
   40410 * TARGET_OBJECT_SUFFIX:                  Misc.               (line  764)
   40411 * TARGET_OBJFMT_CPP_BUILTINS:            Run-time Target.    (line   46)
   40412 * TARGET_OPTF:                           Misc.               (line  855)
   40413 * TARGET_OPTION_TRANSLATE_TABLE:         Driver.             (line   53)
   40414 * TARGET_OS_CPP_BUILTINS:                Run-time Target.    (line   42)
   40415 * TARGET_PASS_BY_REFERENCE:              Register Arguments. (line  103)
   40416 * TARGET_POSIX_IO:                       Misc.               (line  572)
   40417 * TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs.            (line  152)
   40418 * TARGET_PROMOTE_FUNCTION_ARGS:          Storage Layout.     (line  131)
   40419 * TARGET_PROMOTE_FUNCTION_RETURN:        Storage Layout.     (line  136)
   40420 * TARGET_PROMOTE_PROTOTYPES:             Stack Arguments.    (line   11)
   40421 * TARGET_PTRMEMFUNC_VBIT_LOCATION:       Type Layout.        (line  235)
   40422 * TARGET_RELAXED_ORDERING:               Misc.               (line  877)
   40423 * TARGET_RESOLVE_OVERLOADED_BUILTIN:     Misc.               (line  675)
   40424 * TARGET_RETURN_IN_MEMORY:               Aggregate Return.   (line   16)
   40425 * TARGET_RETURN_IN_MSB:                  Scalar Return.      (line   97)
   40426 * TARGET_RTX_COSTS:                      Costs.              (line  204)
   40427 * TARGET_SCALAR_MODE_SUPPORTED_P:        Register Arguments. (line  266)
   40428 * TARGET_SCHED_ADJUST_COST:              Scheduling.         (line   37)
   40429 * TARGET_SCHED_ADJUST_PRIORITY:          Scheduling.         (line   52)
   40430 * TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling.     (line   89)
   40431 * TARGET_SCHED_DFA_NEW_CYCLE:            Scheduling.         (line  205)
   40432 * TARGET_SCHED_DFA_POST_CYCLE_ADVANCE:   Scheduling.         (line  160)
   40433 * TARGET_SCHED_DFA_POST_CYCLE_INSN:      Scheduling.         (line  144)
   40434 * TARGET_SCHED_DFA_PRE_CYCLE_ADVANCE:    Scheduling.         (line  153)
   40435 * TARGET_SCHED_DFA_PRE_CYCLE_INSN:       Scheduling.         (line  132)
   40436 * TARGET_SCHED_FINISH:                   Scheduling.         (line  109)
   40437 * TARGET_SCHED_FINISH_GLOBAL:            Scheduling.         (line  126)
   40438 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling.
   40439                                                              (line  168)
   40440 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling.
   40441                                                              (line  196)
   40442 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC: Scheduling.
   40443                                                              (line  277)
   40444 * TARGET_SCHED_GEN_CHECK:                Scheduling.         (line  265)
   40445 * TARGET_SCHED_H_I_D_EXTENDED:           Scheduling.         (line  241)
   40446 * TARGET_SCHED_INIT:                     Scheduling.         (line   99)
   40447 * TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling.         (line  149)
   40448 * TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN:  Scheduling.         (line  141)
   40449 * TARGET_SCHED_INIT_GLOBAL:              Scheduling.         (line  118)
   40450 * TARGET_SCHED_IS_COSTLY_DEPENDENCE:     Scheduling.         (line  219)
   40451 * TARGET_SCHED_ISSUE_RATE:               Scheduling.         (line   12)
   40452 * TARGET_SCHED_NEEDS_BLOCK_P:            Scheduling.         (line  258)
   40453 * TARGET_SCHED_REORDER:                  Scheduling.         (line   60)
   40454 * TARGET_SCHED_REORDER2:                 Scheduling.         (line   77)
   40455 * TARGET_SCHED_SET_SCHED_FLAGS:          Scheduling.         (line  288)
   40456 * TARGET_SCHED_SMS_RES_MII:              Scheduling.         (line  299)
   40457 * TARGET_SCHED_SPECULATE_INSN:           Scheduling.         (line  247)
   40458 * TARGET_SCHED_VARIABLE_ISSUE:           Scheduling.         (line   24)
   40459 * TARGET_SECONDARY_RELOAD:               Register Classes.   (line  257)
   40460 * TARGET_SECTION_TYPE_FLAGS:             File Framework.     (line  109)
   40461 * TARGET_SET_CURRENT_FUNCTION:           Misc.               (line  747)
   40462 * TARGET_SET_DEFAULT_TYPE_ATTRIBUTES:    Target Attributes.  (line   26)
   40463 * TARGET_SETUP_INCOMING_VARARGS:         Varargs.            (line  101)
   40464 * TARGET_SHIFT_TRUNCATION_MASK:          Misc.               (line  154)
   40465 * TARGET_SPLIT_COMPLEX_ARG:              Register Arguments. (line  237)
   40466 * TARGET_STACK_PROTECT_FAIL:             Stack Smashing Protection.
   40467                                                              (line   17)
   40468 * TARGET_STACK_PROTECT_GUARD:            Stack Smashing Protection.
   40469                                                              (line    7)
   40470 * TARGET_STRICT_ARGUMENT_NAMING:         Varargs.            (line  137)
   40471 * TARGET_STRUCT_VALUE_RTX:               Aggregate Return.   (line   44)
   40472 * TARGET_UNSPEC_MAY_TRAP_P:              Misc.               (line  739)
   40473 * TARGET_UNWIND_EMIT:                    Dispatch Tables.    (line   81)
   40474 * TARGET_UNWIND_INFO:                    Exception Region Output.
   40475                                                              (line   56)
   40476 * TARGET_USE_ANCHORS_FOR_SYMBOL_P:       Anchored Addresses. (line   55)
   40477 * TARGET_USE_BLOCKS_FOR_CONSTANT_P:      Addressing Modes.   (line  221)
   40478 * TARGET_USE_JCR_SECTION:                Misc.               (line  911)
   40479 * TARGET_USE_LOCAL_THUNK_ALIAS_P:        Misc.               (line  861)
   40480 * TARGET_USES_WEAK_UNWIND_INFO:          Exception Handling. (line  129)
   40481 * TARGET_VALID_DLLIMPORT_ATTRIBUTE_P:    Target Attributes.  (line   59)
   40482 * TARGET_VALID_POINTER_MODE:             Register Arguments. (line  260)
   40483 * TARGET_VECTOR_MODE_SUPPORTED_P:        Register Arguments. (line  278)
   40484 * TARGET_VECTOR_OPAQUE_P:                Storage Layout.     (line  505)
   40485 * TARGET_VECTORIZE_BUILTIN_CONVERSION:   Addressing Modes.   (line  288)
   40486 * TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes.  (line  237)
   40487 * TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN: Addressing Modes. (line  263)
   40488 * TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD: Addressing Modes.  (line  275)
   40489 * TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION: Addressing Modes.
   40490                                                              (line  303)
   40491 * TARGET_VERSION:                        Run-time Target.    (line   91)
   40492 * TARGET_VTABLE_DATA_ENTRY_DISTANCE:     Type Layout.        (line  288)
   40493 * TARGET_VTABLE_ENTRY_ALIGN:             Type Layout.        (line  282)
   40494 * TARGET_VTABLE_USES_DESCRIPTORS:        Type Layout.        (line  271)
   40495 * TARGET_WEAK_NOT_IN_ARCHIVE_TOC:        Label Output.       (line  245)
   40496 * targetm:                               Target Structure.   (line    7)
   40497 * targets, makefile:                     Makefile.           (line    6)
   40498 * TCmode:                                Machine Modes.      (line  197)
   40499 * TDmode:                                Machine Modes.      (line   94)
   40500 * TEMPLATE_DECL:                         Declarations.       (line    6)
   40501 * Temporaries:                           Temporaries.        (line    6)
   40502 * termination routines:                  Initialization.     (line    6)
   40503 * testing constraints:                   C Constraint Interface.
   40504                                                              (line    6)
   40505 * TEXT_SECTION_ASM_OP:                   Sections.           (line   38)
   40506 * TF_SIZE:                               Type Layout.        (line  132)
   40507 * TFmode:                                Machine Modes.      (line   98)
   40508 * THEN_CLAUSE:                           Function Bodies.    (line    6)
   40509 * THREAD_MODEL_SPEC:                     Driver.             (line  225)
   40510 * THROW_EXPR:                            Expression trees.   (line    6)
   40511 * THUNK_DECL:                            Declarations.       (line    6)
   40512 * THUNK_DELTA:                           Declarations.       (line    6)
   40513 * TImode:                                Machine Modes.      (line   48)
   40514 * TImode, in insn:                       Insns.              (line  231)
   40515 * tm.h macros:                           Target Macros.      (line    6)
   40516 * TQFmode:                               Machine Modes.      (line   62)
   40517 * TQmode:                                Machine Modes.      (line  119)
   40518 * TRAMPOLINE_ADJUST_ADDRESS:             Trampolines.        (line   62)
   40519 * TRAMPOLINE_ALIGNMENT:                  Trampolines.        (line   49)
   40520 * TRAMPOLINE_SECTION:                    Trampolines.        (line   40)
   40521 * TRAMPOLINE_SIZE:                       Trampolines.        (line   45)
   40522 * TRAMPOLINE_TEMPLATE:                   Trampolines.        (line   29)
   40523 * trampolines for nested functions:      Trampolines.        (line    6)
   40524 * TRANSFER_FROM_TRAMPOLINE:              Trampolines.        (line  124)
   40525 * trap instruction pattern:              Standard Names.     (line 1368)
   40526 * tree <1>:                              Macros and Functions.
   40527                                                              (line    6)
   40528 * tree:                                  Tree overview.      (line    6)
   40529 * Tree SSA:                              Tree SSA.           (line    6)
   40530 * TREE_CODE:                             Tree overview.      (line    6)
   40531 * TREE_FILENAME:                         Working with declarations.
   40532                                                              (line   14)
   40533 * tree_int_cst_equal:                    Expression trees.   (line    6)
   40534 * TREE_INT_CST_HIGH:                     Expression trees.   (line    6)
   40535 * TREE_INT_CST_LOW:                      Expression trees.   (line    6)
   40536 * tree_int_cst_lt:                       Expression trees.   (line    6)
   40537 * TREE_LINENO:                           Working with declarations.
   40538                                                              (line   20)
   40539 * TREE_LIST:                             Containers.         (line    6)
   40540 * TREE_OPERAND:                          Expression trees.   (line    6)
   40541 * TREE_PUBLIC:                           Function Basics.    (line    6)
   40542 * TREE_PURPOSE:                          Containers.         (line    6)
   40543 * TREE_STRING_LENGTH:                    Expression trees.   (line    6)
   40544 * TREE_STRING_POINTER:                   Expression trees.   (line    6)
   40545 * TREE_TYPE <1>:                         Expression trees.   (line    6)
   40546 * TREE_TYPE <2>:                         Function Basics.    (line  171)
   40547 * TREE_TYPE <3>:                         Working with declarations.
   40548                                                              (line   11)
   40549 * TREE_TYPE:                             Types.              (line    6)
   40550 * TREE_VALUE:                            Containers.         (line    6)
   40551 * TREE_VEC:                              Containers.         (line    6)
   40552 * TREE_VEC_ELT:                          Containers.         (line    6)
   40553 * TREE_VEC_LENGTH:                       Containers.         (line    6)
   40554 * Trees:                                 Trees.              (line    6)
   40555 * TRULY_NOOP_TRUNCATION:                 Misc.               (line  177)
   40556 * TRUNC_DIV_EXPR:                        Expression trees.   (line    6)
   40557 * TRUNC_MOD_EXPR:                        Expression trees.   (line    6)
   40558 * truncate:                              Conversions.        (line   38)
   40559 * truncMN2 instruction pattern:          Standard Names.     (line  815)
   40560 * TRUTH_AND_EXPR:                        Expression trees.   (line    6)
   40561 * TRUTH_ANDIF_EXPR:                      Expression trees.   (line    6)
   40562 * TRUTH_NOT_EXPR:                        Expression trees.   (line    6)
   40563 * TRUTH_OR_EXPR:                         Expression trees.   (line    6)
   40564 * TRUTH_ORIF_EXPR:                       Expression trees.   (line    6)
   40565 * TRUTH_XOR_EXPR:                        Expression trees.   (line    6)
   40566 * TRY_BLOCK:                             Function Bodies.    (line    6)
   40567 * TRY_HANDLERS:                          Function Bodies.    (line    6)
   40568 * TRY_STMTS:                             Function Bodies.    (line    6)
   40569 * tstM instruction pattern:              Standard Names.     (line  657)
   40570 * type:                                  Types.              (line    6)
   40571 * type declaration:                      Declarations.       (line    6)
   40572 * TYPE_ALIGN:                            Types.              (line    6)
   40573 * TYPE_ARG_TYPES:                        Types.              (line    6)
   40574 * TYPE_ASM_OP:                           Label Output.       (line   55)
   40575 * TYPE_ATTRIBUTES:                       Attributes.         (line   25)
   40576 * TYPE_BINFO:                            Classes.            (line    6)
   40577 * TYPE_BUILT_IN:                         Types.              (line   83)
   40578 * TYPE_CANONICAL:                        Types.              (line    6)
   40579 * TYPE_CONTEXT:                          Types.              (line    6)
   40580 * TYPE_DECL:                             Declarations.       (line    6)
   40581 * TYPE_FIELDS <1>:                       Classes.            (line    6)
   40582 * TYPE_FIELDS:                           Types.              (line    6)
   40583 * TYPE_HAS_ARRAY_NEW_OPERATOR:           Classes.            (line   91)
   40584 * TYPE_HAS_DEFAULT_CONSTRUCTOR:          Classes.            (line   76)
   40585 * TYPE_HAS_MUTABLE_P:                    Classes.            (line   81)
   40586 * TYPE_HAS_NEW_OPERATOR:                 Classes.            (line   88)
   40587 * TYPE_MAIN_VARIANT:                     Types.              (line    6)
   40588 * TYPE_MAX_VALUE:                        Types.              (line    6)
   40589 * TYPE_METHOD_BASETYPE:                  Types.              (line    6)
   40590 * TYPE_METHODS:                          Classes.            (line    6)
   40591 * TYPE_MIN_VALUE:                        Types.              (line    6)
   40592 * TYPE_NAME:                             Types.              (line    6)
   40593 * TYPE_NOTHROW_P:                        Function Basics.    (line  180)
   40594 * TYPE_OFFSET_BASETYPE:                  Types.              (line    6)
   40595 * TYPE_OPERAND_FMT:                      Label Output.       (line   66)
   40596 * TYPE_OVERLOADS_ARRAY_REF:              Classes.            (line   99)
   40597 * TYPE_OVERLOADS_ARROW:                  Classes.            (line  102)
   40598 * TYPE_OVERLOADS_CALL_EXPR:              Classes.            (line   95)
   40599 * TYPE_POLYMORPHIC_P:                    Classes.            (line   72)
   40600 * TYPE_PRECISION:                        Types.              (line    6)
   40601 * TYPE_PTR_P:                            Types.              (line   89)
   40602 * TYPE_PTRFN_P:                          Types.              (line   93)
   40603 * TYPE_PTRMEM_P:                         Types.              (line    6)
   40604 * TYPE_PTROB_P:                          Types.              (line   96)
   40605 * TYPE_PTROBV_P:                         Types.              (line    6)
   40606 * TYPE_QUAL_CONST:                       Types.              (line    6)
   40607 * TYPE_QUAL_RESTRICT:                    Types.              (line    6)
   40608 * TYPE_QUAL_VOLATILE:                    Types.              (line    6)
   40609 * TYPE_RAISES_EXCEPTIONS:                Function Basics.    (line  175)
   40610 * TYPE_SIZE:                             Types.              (line    6)
   40611 * TYPE_STRUCTURAL_EQUALITY_P:            Types.              (line    6)
   40612 * TYPE_UNQUALIFIED:                      Types.              (line    6)
   40613 * TYPE_VFIELD:                           Classes.            (line    6)
   40614 * TYPENAME_TYPE:                         Types.              (line    6)
   40615 * TYPENAME_TYPE_FULLNAME:                Types.              (line    6)
   40616 * TYPEOF_TYPE:                           Types.              (line    6)
   40617 * UDAmode:                               Machine Modes.      (line  168)
   40618 * udiv:                                  Arithmetic.         (line  125)
   40619 * udivM3 instruction pattern:            Standard Names.     (line  222)
   40620 * udivmodM4 instruction pattern:         Standard Names.     (line  428)
   40621 * udot_prodM instruction pattern:        Standard Names.     (line  265)
   40622 * UDQmode:                               Machine Modes.      (line  136)
   40623 * UHAmode:                               Machine Modes.      (line  160)
   40624 * UHQmode:                               Machine Modes.      (line  128)
   40625 * UINTMAX_TYPE:                          Type Layout.        (line  224)
   40626 * umaddMN4 instruction pattern:          Standard Names.     (line  375)
   40627 * umax:                                  Arithmetic.         (line  144)
   40628 * umaxM3 instruction pattern:            Standard Names.     (line  222)
   40629 * umin:                                  Arithmetic.         (line  144)
   40630 * uminM3 instruction pattern:            Standard Names.     (line  222)
   40631 * umod:                                  Arithmetic.         (line  131)
   40632 * umodM3 instruction pattern:            Standard Names.     (line  222)
   40633 * umsubMN4 instruction pattern:          Standard Names.     (line  399)
   40634 * umulhisi3 instruction pattern:         Standard Names.     (line  347)
   40635 * umulM3_highpart instruction pattern:   Standard Names.     (line  361)
   40636 * umulqihi3 instruction pattern:         Standard Names.     (line  347)
   40637 * umulsidi3 instruction pattern:         Standard Names.     (line  347)
   40638 * unchanging:                            Flags.              (line  299)
   40639 * unchanging, in call_insn:              Flags.              (line   19)
   40640 * unchanging, in jump_insn, call_insn and insn: Flags.       (line   24)
   40641 * unchanging, in mem:                    Flags.              (line  137)
   40642 * unchanging, in subreg:                 Flags.              (line  173)
   40643 * unchanging, in symbol_ref:             Flags.              (line   10)
   40644 * UNEQ_EXPR:                             Expression trees.   (line    6)
   40645 * UNGE_EXPR:                             Expression trees.   (line    6)
   40646 * UNGT_EXPR:                             Expression trees.   (line    6)
   40647 * UNION_TYPE <1>:                        Classes.            (line    6)
   40648 * UNION_TYPE:                            Types.              (line    6)
   40649 * unions, returning:                     Interface.          (line   10)
   40650 * UNITS_PER_SIMD_WORD:                   Storage Layout.     (line   77)
   40651 * UNITS_PER_WORD:                        Storage Layout.     (line   67)
   40652 * UNKNOWN_TYPE:                          Types.              (line    6)
   40653 * UNLE_EXPR:                             Expression trees.   (line    6)
   40654 * UNLIKELY_EXECUTED_TEXT_SECTION_NAME:   Sections.           (line   49)
   40655 * UNLT_EXPR:                             Expression trees.   (line    6)
   40656 * UNORDERED_EXPR:                        Expression trees.   (line    6)
   40657 * unshare_all_rtl:                       Sharing.            (line   58)
   40658 * unsigned division:                     Arithmetic.         (line  125)
   40659 * unsigned division with unsigned saturation: Arithmetic.    (line  125)
   40660 * unsigned greater than:                 Comparisons.        (line   64)
   40661 * unsigned less than:                    Comparisons.        (line   68)
   40662 * unsigned minimum and maximum:          Arithmetic.         (line  144)
   40663 * unsigned_fix:                          Conversions.        (line   72)
   40664 * unsigned_float:                        Conversions.        (line   62)
   40665 * unsigned_fract_convert:                Conversions.        (line   98)
   40666 * unsigned_sat_fract:                    Conversions.        (line  104)
   40667 * unspec:                                Side Effects.       (line  284)
   40668 * unspec_volatile:                       Side Effects.       (line  284)
   40669 * untyped_call instruction pattern:      Standard Names.     (line 1006)
   40670 * untyped_return instruction pattern:    Standard Names.     (line 1056)
   40671 * UPDATE_PATH_HOST_CANONICALIZE (PATH):  Filesystem.         (line   59)
   40672 * update_ssa:                            SSA.                (line   76)
   40673 * update_stmt:                           Statement Operands. (line    6)
   40674 * UQQmode:                               Machine Modes.      (line  123)
   40675 * US Software GOFAST, floating point emulation library: Library Calls.
   40676                                                              (line   44)
   40677 * us_ashift:                             Arithmetic.         (line  168)
   40678 * us_minus:                              Arithmetic.         (line   36)
   40679 * us_mult:                               Arithmetic.         (line   92)
   40680 * us_neg:                                Arithmetic.         (line   81)
   40681 * us_plus:                               Arithmetic.         (line   14)
   40682 * US_SOFTWARE_GOFAST:                    Library Calls.      (line   45)
   40683 * us_truncate:                           Conversions.        (line   48)
   40684 * usaddM3 instruction pattern:           Standard Names.     (line  222)
   40685 * USAmode:                               Machine Modes.      (line  164)
   40686 * usashlM3 instruction pattern:          Standard Names.     (line  431)
   40687 * usdivM3 instruction pattern:           Standard Names.     (line  222)
   40688 * use:                                   Side Effects.       (line  159)
   40689 * USE_C_ALLOCA:                          Host Misc.          (line   19)
   40690 * USE_LD_AS_NEEDED:                      Driver.             (line  198)
   40691 * USE_LOAD_POST_DECREMENT:               Costs.              (line  159)
   40692 * USE_LOAD_POST_INCREMENT:               Costs.              (line  154)
   40693 * USE_LOAD_PRE_DECREMENT:                Costs.              (line  169)
   40694 * USE_LOAD_PRE_INCREMENT:                Costs.              (line  164)
   40695 * use_param:                             GTY Options.        (line  114)
   40696 * use_paramN:                            GTY Options.        (line  132)
   40697 * use_params:                            GTY Options.        (line  140)
   40698 * USE_SELECT_SECTION_FOR_FUNCTIONS:      Sections.           (line  185)
   40699 * USE_STORE_POST_DECREMENT:              Costs.              (line  179)
   40700 * USE_STORE_POST_INCREMENT:              Costs.              (line  174)
   40701 * USE_STORE_PRE_DECREMENT:               Costs.              (line  189)
   40702 * USE_STORE_PRE_INCREMENT:               Costs.              (line  184)
   40703 * used:                                  Flags.              (line  317)
   40704 * used, in symbol_ref:                   Flags.              (line  200)
   40705 * USER_LABEL_PREFIX:                     Instruction Output. (line  126)
   40706 * USING_DECL:                            Declarations.       (line    6)
   40707 * USING_STMT:                            Function Bodies.    (line    6)
   40708 * usmaddMN4 instruction pattern:         Standard Names.     (line  383)
   40709 * usmsubMN4 instruction pattern:         Standard Names.     (line  407)
   40710 * usmulhisi3 instruction pattern:        Standard Names.     (line  351)
   40711 * usmulM3 instruction pattern:           Standard Names.     (line  222)
   40712 * usmulqihi3 instruction pattern:        Standard Names.     (line  351)
   40713 * usmulsidi3 instruction pattern:        Standard Names.     (line  351)
   40714 * usnegM2 instruction pattern:           Standard Names.     (line  445)
   40715 * USQmode:                               Machine Modes.      (line  132)
   40716 * ussubM3 instruction pattern:           Standard Names.     (line  222)
   40717 * usum_widenM3 instruction pattern:      Standard Names.     (line  275)
   40718 * UTAmode:                               Machine Modes.      (line  172)
   40719 * UTQmode:                               Machine Modes.      (line  140)
   40720 * V in constraint:                       Simple Constraints. (line   41)
   40721 * VA_ARG_EXPR:                           Expression trees.   (line    6)
   40722 * values, returned by functions:         Scalar Return.      (line    6)
   40723 * VAR_DECL <1>:                          Expression trees.   (line    6)
   40724 * VAR_DECL:                              Declarations.       (line    6)
   40725 * varargs implementation:                Varargs.            (line    6)
   40726 * variable:                              Declarations.       (line    6)
   40727 * VAX_FLOAT_FORMAT:                      Storage Layout.     (line  418)
   40728 * vec_concat:                            Vector Operations.  (line   25)
   40729 * vec_duplicate:                         Vector Operations.  (line   30)
   40730 * VEC_EXTRACT_EVEN_EXPR:                 Expression trees.   (line    6)
   40731 * vec_extract_evenM instruction pattern: Standard Names.     (line  176)
   40732 * VEC_EXTRACT_ODD_EXPR:                  Expression trees.   (line    6)
   40733 * vec_extract_oddM instruction pattern:  Standard Names.     (line  183)
   40734 * vec_extractM instruction pattern:      Standard Names.     (line  171)
   40735 * vec_initM instruction pattern:         Standard Names.     (line  204)
   40736 * VEC_INTERLEAVE_HIGH_EXPR:              Expression trees.   (line    6)
   40737 * vec_interleave_highM instruction pattern: Standard Names.  (line  190)
   40738 * VEC_INTERLEAVE_LOW_EXPR:               Expression trees.   (line    6)
   40739 * vec_interleave_lowM instruction pattern: Standard Names.   (line  197)
   40740 * VEC_LSHIFT_EXPR:                       Expression trees.   (line    6)
   40741 * vec_merge:                             Vector Operations.  (line   11)
   40742 * VEC_PACK_FIX_TRUNC_EXPR:               Expression trees.   (line    6)
   40743 * VEC_PACK_SAT_EXPR:                     Expression trees.   (line    6)
   40744 * vec_pack_sfix_trunc_M instruction pattern: Standard Names. (line  302)
   40745 * vec_pack_ssat_M instruction pattern:   Standard Names.     (line  295)
   40746 * VEC_PACK_TRUNC_EXPR:                   Expression trees.   (line    6)
   40747 * vec_pack_trunc_M instruction pattern:  Standard Names.     (line  288)
   40748 * vec_pack_ufix_trunc_M instruction pattern: Standard Names. (line  302)
   40749 * vec_pack_usat_M instruction pattern:   Standard Names.     (line  295)
   40750 * VEC_RSHIFT_EXPR:                       Expression trees.   (line    6)
   40751 * vec_select:                            Vector Operations.  (line   19)
   40752 * vec_setM instruction pattern:          Standard Names.     (line  166)
   40753 * vec_shl_M instruction pattern:         Standard Names.     (line  282)
   40754 * vec_shr_M instruction pattern:         Standard Names.     (line  282)
   40755 * VEC_UNPACK_FLOAT_HI_EXPR:              Expression trees.   (line    6)
   40756 * VEC_UNPACK_FLOAT_LO_EXPR:              Expression trees.   (line    6)
   40757 * VEC_UNPACK_HI_EXPR:                    Expression trees.   (line    6)
   40758 * VEC_UNPACK_LO_EXPR:                    Expression trees.   (line    6)
   40759 * vec_unpacks_float_hi_M instruction pattern: Standard Names.
   40760                                                              (line  324)
   40761 * vec_unpacks_float_lo_M instruction pattern: Standard Names.
   40762                                                              (line  324)
   40763 * vec_unpacks_hi_M instruction pattern:  Standard Names.     (line  309)
   40764 * vec_unpacks_lo_M instruction pattern:  Standard Names.     (line  309)
   40765 * vec_unpacku_float_hi_M instruction pattern: Standard Names.
   40766                                                              (line  324)
   40767 * vec_unpacku_float_lo_M instruction pattern: Standard Names.
   40768                                                              (line  324)
   40769 * vec_unpacku_hi_M instruction pattern:  Standard Names.     (line  317)
   40770 * vec_unpacku_lo_M instruction pattern:  Standard Names.     (line  317)
   40771 * VEC_WIDEN_MULT_HI_EXPR:                Expression trees.   (line    6)
   40772 * VEC_WIDEN_MULT_LO_EXPR:                Expression trees.   (line    6)
   40773 * vec_widen_smult_hi_M instruction pattern: Standard Names.  (line  333)
   40774 * vec_widen_smult_lo_M instruction pattern: Standard Names.  (line  333)
   40775 * vec_widen_umult_hi_M instruction pattern: Standard Names.  (line  333)
   40776 * vec_widen_umult_lo__M instruction pattern: Standard Names. (line  333)
   40777 * vector:                                Containers.         (line    6)
   40778 * vector operations:                     Vector Operations.  (line    6)
   40779 * VECTOR_CST:                            Expression trees.   (line    6)
   40780 * VECTOR_STORE_FLAG_VALUE:               Misc.               (line  308)
   40781 * virtual operands:                      Statement Operands. (line    6)
   40782 * VIRTUAL_INCOMING_ARGS_REGNUM:          Regs and Memory.    (line   59)
   40783 * VIRTUAL_OUTGOING_ARGS_REGNUM:          Regs and Memory.    (line   87)
   40784 * VIRTUAL_STACK_DYNAMIC_REGNUM:          Regs and Memory.    (line   78)
   40785 * VIRTUAL_STACK_VARS_REGNUM:             Regs and Memory.    (line   69)
   40786 * VLIW:                                  Processor pipeline description.
   40787                                                              (line    6)
   40788 * VMS:                                   Filesystem.         (line   37)
   40789 * VMS_DEBUGGING_INFO:                    VMS Debug.          (line    9)
   40790 * VOID_TYPE:                             Types.              (line    6)
   40791 * VOIDmode:                              Machine Modes.      (line  190)
   40792 * volatil:                               Flags.              (line  331)
   40793 * volatil, in insn, call_insn, jump_insn, code_label, barrier, and note: Flags.
   40794                                                              (line   29)
   40795 * volatil, in label_ref and reg_label:   Flags.              (line   50)
   40796 * volatil, in mem, asm_operands, and asm_input: Flags.       (line   79)
   40797 * volatil, in reg:                       Flags.              (line  101)
   40798 * volatil, in subreg:                    Flags.              (line  173)
   40799 * volatil, in symbol_ref:                Flags.              (line  209)
   40800 * volatile memory references:            Flags.              (line  332)
   40801 * voting between constraint alternatives: Class Preferences. (line    6)
   40802 * walk_dominator_tree:                   SSA.                (line  259)
   40803 * walk_use_def_chains:                   SSA.                (line  235)
   40804 * WCHAR_TYPE:                            Type Layout.        (line  192)
   40805 * WCHAR_TYPE_SIZE:                       Type Layout.        (line  200)
   40806 * which_alternative:                     Output Statement.   (line   59)
   40807 * WHILE_BODY:                            Function Bodies.    (line    6)
   40808 * WHILE_COND:                            Function Bodies.    (line    6)
   40809 * WHILE_STMT:                            Function Bodies.    (line    6)
   40810 * WIDEST_HARDWARE_FP_SIZE:               Type Layout.        (line  147)
   40811 * WINT_TYPE:                             Type Layout.        (line  205)
   40812 * word_mode:                             Machine Modes.      (line  336)
   40813 * WORD_REGISTER_OPERATIONS:              Misc.               (line   63)
   40814 * WORD_SWITCH_TAKES_ARG:                 Driver.             (line   20)
   40815 * WORDS_BIG_ENDIAN:                      Storage Layout.     (line   29)
   40816 * WORDS_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  132)
   40817 * X in constraint:                       Simple Constraints. (line  112)
   40818 * x-HOST:                                Host Fragment.      (line    6)
   40819 * XCmode:                                Machine Modes.      (line  197)
   40820 * XCOFF_DEBUGGING_INFO:                  DBX Options.        (line   13)
   40821 * XEXP:                                  Accessors.          (line    6)
   40822 * XF_SIZE:                               Type Layout.        (line  131)
   40823 * XFmode:                                Machine Modes.      (line   79)
   40824 * XINT:                                  Accessors.          (line    6)
   40825 * xm-MACHINE.h <1>:                      Host Misc.          (line    6)
   40826 * xm-MACHINE.h:                          Filesystem.         (line    6)
   40827 * xor:                                   Arithmetic.         (line  163)
   40828 * xor, canonicalization of:              Insn Canonicalizations.
   40829                                                              (line   84)
   40830 * xorM3 instruction pattern:             Standard Names.     (line  222)
   40831 * XSTR:                                  Accessors.          (line    6)
   40832 * XVEC:                                  Accessors.          (line   41)
   40833 * XVECEXP:                               Accessors.          (line   48)
   40834 * XVECLEN:                               Accessors.          (line   44)
   40835 * XWINT:                                 Accessors.          (line    6)
   40836 * zero_extend:                           Conversions.        (line   28)
   40837 * zero_extendMN2 instruction pattern:    Standard Names.     (line  825)
   40838 * zero_extract:                          Bit-Fields.         (line   30)
   40839 * zero_extract, canonicalization of:     Insn Canonicalizations.
   40840                                                              (line   96)
   40841 
   40842 
   40843 
   40844 Tag Table:
   40845 Node: Top2112
   40846 Node: Contributing5008
   40847 Node: Portability5749
   40848 Node: Interface7537
   40849 Node: Libgcc10577
   40850 Node: Integer library routines12418
   40851 Node: Soft float library routines19257
   40852 Node: Decimal float library routines31194
   40853 Node: Fixed-point fractional library routines46947
   40854 Node: Exception handling routines147345
   40855 Node: Miscellaneous routines148452
   40856 Node: Languages148835
   40857 Node: Source Tree150382
   40858 Node: Configure Terms151001
   40859 Node: Top Level153959
   40860 Node: gcc Directory156307
   40861 Node: Subdirectories157276
   40862 Node: Configuration159614
   40863 Node: Config Fragments160334
   40864 Node: System Config161678
   40865 Node: Configuration Files162614
   40866 Node: Build165189
   40867 Node: Makefile165601
   40868 Ref: Makefile-Footnote-1172319
   40869 Ref: Makefile-Footnote-2172468
   40870 Node: Library Files172542
   40871 Node: Headers173104
   40872 Node: Documentation175187
   40873 Node: Texinfo Manuals176046
   40874 Node: Man Page Generation178384
   40875 Node: Miscellaneous Docs180299
   40876 Node: Front End181598
   40877 Node: Front End Directory185299
   40878 Node: Front End Config190292
   40879 Node: Back End193206
   40880 Node: Testsuites196883
   40881 Node: Test Idioms197675
   40882 Node: Test Directives201076
   40883 Node: Ada Tests212245
   40884 Node: C Tests213537
   40885 Node: libgcj Tests217892
   40886 Node: gcov Testing219024
   40887 Node: profopt Testing222008
   40888 Node: compat Testing223451
   40889 Node: Options227673
   40890 Node: Option file format228114
   40891 Node: Option properties230664
   40892 Node: Passes236323
   40893 Node: Parsing pass237058
   40894 Node: Gimplification pass240586
   40895 Node: Pass manager242413
   40896 Node: Tree-SSA passes243742
   40897 Node: RTL passes265558
   40898 Node: Trees277400
   40899 Node: Deficiencies280126
   40900 Node: Tree overview280363
   40901 Node: Macros and Functions284486
   40902 Node: Identifiers284632
   40903 Node: Containers286157
   40904 Node: Types287312
   40905 Node: Scopes303015
   40906 Node: Namespaces303777
   40907 Node: Classes306589
   40908 Node: Declarations311346
   40909 Node: Working with declarations311841
   40910 Node: Internal structure318298
   40911 Node: Current structure hierarchy318680
   40912 Node: Adding new DECL node types320772
   40913 Node: Functions324843
   40914 Node: Function Basics327246
   40915 Node: Function Bodies334411
   40916 Node: Attributes345653
   40917 Node: Expression trees346894
   40918 Node: Tree SSA389503
   40919 Node: GENERIC391380
   40920 Node: GIMPLE392990
   40921 Node: Interfaces394281
   40922 Node: Temporaries396434
   40923 Ref: Temporaries-Footnote-1397754
   40924 Node: GIMPLE Expressions397817
   40925 Node: Compound Expressions398589
   40926 Node: Compound Lvalues398837
   40927 Node: Conditional Expressions399617
   40928 Node: Logical Operators400294
   40929 Node: Statements400787
   40930 Node: Blocks401495
   40931 Node: Statement Sequences402912
   40932 Node: Empty Statements403249
   40933 Node: Loops403827
   40934 Node: Selection Statements404071
   40935 Node: Jumps404924
   40936 Node: Cleanups405585
   40937 Node: GIMPLE Exception Handling407376
   40938 Node: GIMPLE Example409255
   40939 Node: Rough GIMPLE Grammar410666
   40940 Node: Annotations416015
   40941 Node: Statement Operands416681
   40942 Node: SSA431242
   40943 Node: Alias analysis443630
   40944 Node: Loop Analysis and Representation451089
   40945 Node: Loop representation452139
   40946 Node: Loop querying459059
   40947 Node: Loop manipulation461892
   40948 Node: LCSSA464260
   40949 Node: Scalar evolutions466332
   40950 Node: loop-iv469576
   40951 Node: Number of iterations471502
   40952 Node: Dependency analysis474311
   40953 Node: Lambda480679
   40954 Node: Omega482349
   40955 Node: RTL483914
   40956 Node: RTL Objects486018
   40957 Node: RTL Classes489892
   40958 Node: Accessors494844
   40959 Node: Special Accessors497238
   40960 Node: Flags502456
   40961 Node: Machine Modes517692
   40962 Node: Constants530008
   40963 Node: Regs and Memory536653
   40964 Node: Arithmetic550195
   40965 Node: Comparisons559715
   40966 Node: Bit-Fields564007
   40967 Node: Vector Operations565559
   40968 Node: Conversions567185
   40969 Node: RTL Declarations571695
   40970 Node: Side Effects572516
   40971 Node: Incdec588632
   40972 Node: Assembler591972
   40973 Node: Insns593504
   40974 Node: Calls619434
   40975 Node: Sharing622027
   40976 Node: Reading RTL625137
   40977 Node: Control Flow626127
   40978 Node: Basic Blocks627098
   40979 Node: Edges631666
   40980 Node: Profile information640228
   40981 Node: Maintaining the CFG644914
   40982 Node: Liveness information651806
   40983 Node: Machine Desc653933
   40984 Node: Overview656415
   40985 Node: Patterns658456
   40986 Node: Example661894
   40987 Node: RTL Template663329
   40988 Node: Output Template673984
   40989 Node: Output Statement677950
   40990 Node: Predicates681912
   40991 Node: Machine-Independent Predicates684830
   40992 Node: Defining Predicates689462
   40993 Node: Constraints695427
   40994 Node: Simple Constraints696588
   40995 Node: Multi-Alternative708650
   40996 Node: Class Preferences711491
   40997 Node: Modifiers712383
   40998 Node: Machine Constraints716509
   40999 Node: Define Constraints748256
   41000 Node: C Constraint Interface755036
   41001 Node: Standard Names758656
   41002 Ref: shift patterns777584
   41003 Ref: prologue instruction pattern818233
   41004 Ref: epilogue instruction pattern818726
   41005 Node: Pattern Ordering828269
   41006 Node: Dependent Patterns829505
   41007 Node: Jump Patterns832319
   41008 Node: Looping Patterns838015
   41009 Node: Insn Canonicalizations842617
   41010 Node: Expander Definitions847001
   41011 Node: Insn Splitting855119
   41012 Node: Including Patterns864715
   41013 Node: Peephole Definitions866495
   41014 Node: define_peephole867748
   41015 Node: define_peephole2874079
   41016 Node: Insn Attributes877146
   41017 Node: Defining Attributes878252
   41018 Node: Expressions880269
   41019 Node: Tagging Insns886871
   41020 Node: Attr Example891224
   41021 Node: Insn Lengths893598
   41022 Node: Constant Attributes896657
   41023 Node: Delay Slots897826
   41024 Node: Processor pipeline description901050
   41025 Ref: Processor pipeline description-Footnote-1918416
   41026 Node: Conditional Execution918746
   41027 Node: Constant Definitions921599
   41028 Node: Iterators923194
   41029 Node: Mode Iterators923641
   41030 Node: Defining Mode Iterators924603
   41031 Node: Substitutions926097
   41032 Node: Examples928338
   41033 Node: Code Iterators929786
   41034 Node: Target Macros932043
   41035 Node: Target Structure934995
   41036 Node: Driver936264
   41037 Node: Run-time Target959945
   41038 Node: Per-Function Data967149
   41039 Node: Storage Layout969912
   41040 Node: Type Layout996533
   41041 Node: Registers1009490
   41042 Node: Register Basics1010413
   41043 Node: Allocation Order1015980
   41044 Node: Values in Registers1017425
   41045 Node: Leaf Functions1024530
   41046 Node: Stack Registers1027388
   41047 Node: Register Classes1028504
   41048 Node: Old Constraints1054079
   41049 Node: Stack and Calling1061231
   41050 Node: Frame Layout1061765
   41051 Node: Exception Handling1072612
   41052 Node: Stack Checking1078990
   41053 Node: Frame Registers1082621
   41054 Node: Elimination1089227
   41055 Node: Stack Arguments1093258
   41056 Node: Register Arguments1099859
   41057 Node: Scalar Return1114088
   41058 Node: Aggregate Return1119373
   41059 Node: Caller Saves1123032
   41060 Node: Function Entry1124210
   41061 Node: Profiling1136825
   41062 Node: Tail Calls1138524
   41063 Node: Stack Smashing Protection1139891
   41064 Node: Varargs1141003
   41065 Node: Trampolines1148963
   41066 Node: Library Calls1155629
   41067 Node: Addressing Modes1160492
   41068 Node: Anchored Addresses1175750
   41069 Node: Condition Code1178411
   41070 Node: Costs1186700
   41071 Node: Scheduling1199423
   41072 Node: Sections1216170
   41073 Node: PIC1230820
   41074 Node: Assembler Format1232810
   41075 Node: File Framework1233889
   41076 Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1238795
   41077 Node: Data Output1242062
   41078 Node: Uninitialized Data1249821
   41079 Node: Label Output1254892
   41080 Node: Initialization1276559
   41081 Node: Macros for Initialization1282521
   41082 Node: Instruction Output1288973
   41083 Node: Dispatch Tables1297967
   41084 Node: Exception Region Output1301762
   41085 Node: Alignment Output1307522
   41086 Node: Debugging Info1311685
   41087 Node: All Debuggers1312355
   41088 Node: DBX Options1315210
   41089 Node: DBX Hooks1320659
   41090 Node: File Names and DBX1322585
   41091 Node: SDB and DWARF1324696
   41092 Node: VMS Debug1328688
   41093 Node: Floating Point1329258
   41094 Node: Mode Switching1334081
   41095 Node: Target Attributes1338007
   41096 Node: MIPS Coprocessors1342749
   41097 Node: PCH Target1344323
   41098 Node: C++ ABI1345844
   41099 Node: Misc1350463
   41100 Ref: TARGET_SHIFT_TRUNCATION_MASK1357834
   41101 Node: Host Config1397048
   41102 Node: Host Common1398108
   41103 Node: Filesystem1400487
   41104 Node: Host Misc1404602
   41105 Node: Fragments1406741
   41106 Node: Target Fragment1407936
   41107 Node: Host Fragment1413602
   41108 Node: Collect21415044
   41109 Node: Header Dirs1417587
   41110 Node: Type Information1419010
   41111 Node: GTY Options1421198
   41112 Node: GGC Roots1431871
   41113 Node: Files1432591
   41114 Node: Funding1434951
   41115 Node: GNU Project1437447
   41116 Node: Copying1438096
   41117 Node: GNU Free Documentation License1475627
   41118 Node: Contributors1498036
   41119 Node: Option Index1534234
   41120 Node: Concept Index1534819
   41121 
   41122 End Tag Table
   41123