Home | History | Annotate | Download | only in info
      1 This is doc/gccint.info, produced by makeinfo version 4.13 from
      2 /tmp/android-8532/src/build/../gcc/gcc-4.6/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, 2008, 2010 Free
      6 Software 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.3 or
     10 any later version published by the Free Software Foundation; with the
     11 Invariant Sections being "Funding Free Software", the Front-Cover Texts
     12 being (a) (see below), and with the Back-Cover Texts being (b) (see
     13 below).  A copy of the license is included in the section entitled "GNU
     14 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, 2008, 2010 Free
     34 Software 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.3 or
     38 any later version published by the Free Software Foundation; with the
     39 Invariant Sections being "Funding Free Software", the Front-Cover Texts
     40 being (a) (see below), and with the Back-Cover Texts being (b) (see
     41 below).  A copy of the license is included in the section entitled "GNU
     42 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.6.x-google.  The use of the GNU compilers is documented
     65 in a 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 * Testsuites::      GCC testsuites.
     89 * Options::         Option specification files.
     90 * Passes::          Order of passes, what they do, and what each file is for.
     91 * GENERIC::         Language-independent representation generated by Front Ends
     92 * GIMPLE::          Tuple representation used by Tree SSA optimizers
     93 * Tree SSA::        Analysis and optimization of GIMPLE
     94 * RTL::             Machine-dependent low-level intermediate representation.
     95 * Control Flow::    Maintaining and manipulating the control flow graph.
     96 * Loop Analysis and Representation:: Analysis and representation of loops
     97 * Machine Desc::    How to write machine description instruction patterns.
     98 * Target Macros::   How to write the machine description C macros and functions.
     99 * Host Config::     Writing the `xm-MACHINE.h' file.
    100 * Fragments::       Writing the `t-TARGET' and `x-HOST' files.
    101 * Collect2::        How `collect2' works; how it finds `ld'.
    102 * Header Dirs::     Understanding the standard header file directories.
    103 * Type Information:: GCC's memory management; generating type information.
    104 * Plugins::         Extending the compiler with plugins.
    105 * LTO::             Using Link-Time Optimization.
    106 
    107 * Funding::         How to help assure funding for free software.
    108 * GNU Project::     The GNU Project and GNU/Linux.
    109 
    110 * Copying::         GNU General Public License says
    111                     how you can copy and share GCC.
    112 * GNU Free Documentation License:: How you can copy and share this manual.
    113 * Contributors::    People who have contributed to GCC.
    114 
    115 * Option Index::    Index to command line options.
    116 * Concept Index::   Index of concepts and symbol names.
    117 
    118 
    119 File: gccint.info,  Node: Contributing,  Next: Portability,  Prev: Top,  Up: Top
    120 
    121 1 Contributing to GCC Development
    122 *********************************
    123 
    124 If you would like to help pretest GCC releases to assure they work well,
    125 current development sources are available by SVN (see
    126 `http://gcc.gnu.org/svn.html').  Source and binary snapshots are also
    127 available for FTP; see `http://gcc.gnu.org/snapshots.html'.
    128 
    129  If you would like to work on improvements to GCC, please read the
    130 advice at these URLs:
    131 
    132      `http://gcc.gnu.org/contribute.html'
    133      `http://gcc.gnu.org/contributewhy.html'
    134 
    135 for information on how to make useful contributions and avoid
    136 duplication of effort.  Suggested projects are listed at
    137 `http://gcc.gnu.org/projects/'.
    138 
    139 
    140 File: gccint.info,  Node: Portability,  Next: Interface,  Prev: Contributing,  Up: Top
    141 
    142 2 GCC and Portability
    143 *********************
    144 
    145 GCC itself aims to be portable to any machine where `int' is at least a
    146 32-bit type.  It aims to target machines with a flat (non-segmented)
    147 byte addressed data address space (the code address space can be
    148 separate).  Target ABIs may have 8, 16, 32 or 64-bit `int' type.  `char'
    149 can be wider than 8 bits.
    150 
    151  GCC gets most of the information about the target machine from a
    152 machine description which gives an algebraic formula for each of the
    153 machine's instructions.  This is a very clean way to describe the
    154 target.  But when the compiler needs information that is difficult to
    155 express in this fashion, ad-hoc parameters have been defined for
    156 machine descriptions.  The purpose of portability is to reduce the
    157 total work needed on the compiler; it was not of interest for its own
    158 sake.
    159 
    160  GCC does not contain machine dependent code, but it does contain code
    161 that depends on machine parameters such as endianness (whether the most
    162 significant byte has the highest or lowest address of the bytes in a
    163 word) and the availability of autoincrement addressing.  In the
    164 RTL-generation pass, it is often necessary to have multiple strategies
    165 for generating code for a particular kind of syntax tree, strategies
    166 that are usable for different combinations of parameters.  Often, not
    167 all possible cases have been addressed, but only the common ones or
    168 only the ones that have been encountered.  As a result, a new target
    169 may require additional strategies.  You will know if this happens
    170 because the compiler will call `abort'.  Fortunately, the new
    171 strategies can be added in a machine-independent fashion, and will
    172 affect only the target machines that need them.
    173 
    174 
    175 File: gccint.info,  Node: Interface,  Next: Libgcc,  Prev: Portability,  Up: Top
    176 
    177 3 Interfacing to GCC Output
    178 ***************************
    179 
    180 GCC is normally configured to use the same function calling convention
    181 normally in use on the target system.  This is done with the
    182 machine-description macros described (*note Target Macros::).
    183 
    184  However, returning of structure and union values is done differently on
    185 some target machines.  As a result, functions compiled with PCC
    186 returning such types cannot be called from code compiled with GCC, and
    187 vice versa.  This does not cause trouble often because few Unix library
    188 routines return structures or unions.
    189 
    190  GCC code returns structures and unions that are 1, 2, 4 or 8 bytes
    191 long in the same registers used for `int' or `double' return values.
    192 (GCC typically allocates variables of such types in registers also.)
    193 Structures and unions of other sizes are returned by storing them into
    194 an address passed by the caller (usually in a register).  The target
    195 hook `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
    196 
    197  By contrast, PCC on most target machines returns structures and unions
    198 of any size by copying the data into an area of static storage, and then
    199 returning the address of that storage as if it were a pointer value.
    200 The caller must copy the data from that memory area to the place where
    201 the value is wanted.  This is slower than the method used by GCC, and
    202 fails to be reentrant.
    203 
    204  On some target machines, such as RISC machines and the 80386, the
    205 standard system convention is to pass to the subroutine the address of
    206 where to return the value.  On these machines, GCC has been configured
    207 to be compatible with the standard compiler, when this method is used.
    208 It may not be compatible for structures of 1, 2, 4 or 8 bytes.
    209 
    210  GCC uses the system's standard convention for passing arguments.  On
    211 some machines, the first few arguments are passed in registers; in
    212 others, all are passed on the stack.  It would be possible to use
    213 registers for argument passing on any machine, and this would probably
    214 result in a significant speedup.  But the result would be complete
    215 incompatibility with code that follows the standard convention.  So this
    216 change is practical only if you are switching to GCC as the sole C
    217 compiler for the system.  We may implement register argument passing on
    218 certain machines once we have a complete GNU system so that we can
    219 compile the libraries with GCC.
    220 
    221  On some machines (particularly the SPARC), certain types of arguments
    222 are passed "by invisible reference".  This means that the value is
    223 stored in memory, and the address of the memory location is passed to
    224 the subroutine.
    225 
    226  If you use `longjmp', beware of automatic variables.  ISO C says that
    227 automatic variables that are not declared `volatile' have undefined
    228 values after a `longjmp'.  And this is all GCC promises to do, because
    229 it is very difficult to restore register variables correctly, and one
    230 of GCC's features is that it can put variables in registers without
    231 your asking it to.
    232 
    233 
    234 File: gccint.info,  Node: Libgcc,  Next: Languages,  Prev: Interface,  Up: Top
    235 
    236 4 The GCC low-level runtime library
    237 ***********************************
    238 
    239 GCC provides a low-level runtime library, `libgcc.a' or `libgcc_s.so.1'
    240 on some platforms.  GCC generates calls to routines in this library
    241 automatically, whenever it needs to perform some operation that is too
    242 complicated to emit inline code for.
    243 
    244  Most of the routines in `libgcc' handle arithmetic operations that the
    245 target processor cannot perform directly.  This includes integer
    246 multiply and divide on some machines, and all floating-point and
    247 fixed-point operations on other machines.  `libgcc' also includes
    248 routines for exception handling, and a handful of miscellaneous
    249 operations.
    250 
    251  Some of these routines can be defined in mostly machine-independent C.
    252 Others must be hand-written in assembly language for each processor
    253 that needs them.
    254 
    255  GCC will also generate calls to C library routines, such as `memcpy'
    256 and `memset', in some cases.  The set of routines that GCC may possibly
    257 use is documented in *note Other Builtins: (gcc)Other Builtins.
    258 
    259  These routines take arguments and return values of a specific machine
    260 mode, not a specific C type.  *Note Machine Modes::, for an explanation
    261 of this concept.  For illustrative purposes, in this chapter the
    262 floating point type `float' is assumed to correspond to `SFmode';
    263 `double' to `DFmode'; and `long double' to both `TFmode' and `XFmode'.
    264 Similarly, the integer types `int' and `unsigned int' correspond to
    265 `SImode'; `long' and `unsigned long' to `DImode'; and `long long' and
    266 `unsigned long long' to `TImode'.
    267 
    268 * Menu:
    269 
    270 * Integer library routines::
    271 * Soft float library routines::
    272 * Decimal float library routines::
    273 * Fixed-point fractional library routines::
    274 * Exception handling routines::
    275 * Miscellaneous routines::
    276 
    277 
    278 File: gccint.info,  Node: Integer library routines,  Next: Soft float library routines,  Up: Libgcc
    279 
    280 4.1 Routines for integer arithmetic
    281 ===================================
    282 
    283 The integer arithmetic routines are used on platforms that don't provide
    284 hardware support for arithmetic operations on some modes.
    285 
    286 4.1.1 Arithmetic functions
    287 --------------------------
    288 
    289  -- Runtime Function: int __ashlsi3 (int A, int B)
    290  -- Runtime Function: long __ashldi3 (long A, int B)
    291  -- Runtime Function: long long __ashlti3 (long long A, int B)
    292      These functions return the result of shifting A left by B bits.
    293 
    294  -- Runtime Function: int __ashrsi3 (int A, int B)
    295  -- Runtime Function: long __ashrdi3 (long A, int B)
    296  -- Runtime Function: long long __ashrti3 (long long A, int B)
    297      These functions return the result of arithmetically shifting A
    298      right by B bits.
    299 
    300  -- Runtime Function: int __divsi3 (int A, int B)
    301  -- Runtime Function: long __divdi3 (long A, long B)
    302  -- Runtime Function: long long __divti3 (long long A, long long B)
    303      These functions return the quotient of the signed division of A and
    304      B.
    305 
    306  -- Runtime Function: int __lshrsi3 (int A, int B)
    307  -- Runtime Function: long __lshrdi3 (long A, int B)
    308  -- Runtime Function: long long __lshrti3 (long long A, int B)
    309      These functions return the result of logically shifting A right by
    310      B bits.
    311 
    312  -- Runtime Function: int __modsi3 (int A, int B)
    313  -- Runtime Function: long __moddi3 (long A, long B)
    314  -- Runtime Function: long long __modti3 (long long A, long long B)
    315      These functions return the remainder of the signed division of A
    316      and B.
    317 
    318  -- Runtime Function: int __mulsi3 (int A, int B)
    319  -- Runtime Function: long __muldi3 (long A, long B)
    320  -- Runtime Function: long long __multi3 (long long A, long long B)
    321      These functions return the product of A and B.
    322 
    323  -- Runtime Function: long __negdi2 (long A)
    324  -- Runtime Function: long long __negti2 (long long A)
    325      These functions return the negation of A.
    326 
    327  -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned
    328           int B)
    329  -- Runtime Function: unsigned long __udivdi3 (unsigned long A,
    330           unsigned long B)
    331  -- Runtime Function: unsigned long long __udivti3 (unsigned long long
    332           A, unsigned long long B)
    333      These functions return the quotient of the unsigned division of A
    334      and B.
    335 
    336  -- Runtime Function: unsigned long __udivmoddi3 (unsigned long A,
    337           unsigned long B, unsigned long *C)
    338  -- Runtime Function: unsigned long long __udivti3 (unsigned long long
    339           A, unsigned long long B, unsigned long long *C)
    340      These functions calculate both the quotient and remainder of the
    341      unsigned division of A and B.  The return value is the quotient,
    342      and the remainder is placed in variable pointed to by C.
    343 
    344  -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned
    345           int B)
    346  -- Runtime Function: unsigned long __umoddi3 (unsigned long A,
    347           unsigned long B)
    348  -- Runtime Function: unsigned long long __umodti3 (unsigned long long
    349           A, unsigned long long B)
    350      These functions return the remainder of the unsigned division of A
    351      and B.
    352 
    353 4.1.2 Comparison functions
    354 --------------------------
    355 
    356 The following functions implement integral comparisons.  These functions
    357 implement a low-level compare, upon which the higher level comparison
    358 operators (such as less than and greater than or equal to) can be
    359 constructed.  The returned values lie in the range zero to two, to allow
    360 the high-level operators to be implemented by testing the returned
    361 result using either signed or unsigned comparison.
    362 
    363  -- Runtime Function: int __cmpdi2 (long A, long B)
    364  -- Runtime Function: int __cmpti2 (long long A, long long B)
    365      These functions perform a signed comparison of A and B.  If A is
    366      less than B, they return 0; if A is greater than B, they return 2;
    367      and if A and B are equal they return 1.
    368 
    369  -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B)
    370  -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned
    371           long long B)
    372      These functions perform an unsigned comparison of A and B.  If A
    373      is less than B, they return 0; if A is greater than B, they return
    374      2; and if A and B are equal they return 1.
    375 
    376 4.1.3 Trapping arithmetic functions
    377 -----------------------------------
    378 
    379 The following functions implement trapping arithmetic.  These functions
    380 call the libc function `abort' upon signed arithmetic overflow.
    381 
    382  -- Runtime Function: int __absvsi2 (int A)
    383  -- Runtime Function: long __absvdi2 (long A)
    384      These functions return the absolute value of A.
    385 
    386  -- Runtime Function: int __addvsi3 (int A, int B)
    387  -- Runtime Function: long __addvdi3 (long A, long B)
    388      These functions return the sum of A and B; that is `A + B'.
    389 
    390  -- Runtime Function: int __mulvsi3 (int A, int B)
    391  -- Runtime Function: long __mulvdi3 (long A, long B)
    392      The functions return the product of A and B; that is `A * B'.
    393 
    394  -- Runtime Function: int __negvsi2 (int A)
    395  -- Runtime Function: long __negvdi2 (long A)
    396      These functions return the negation of A; that is `-A'.
    397 
    398  -- Runtime Function: int __subvsi3 (int A, int B)
    399  -- Runtime Function: long __subvdi3 (long A, long B)
    400      These functions return the difference between B and A; that is `A
    401      - B'.
    402 
    403 4.1.4 Bit operations
    404 --------------------
    405 
    406  -- Runtime Function: int __clzsi2 (int A)
    407  -- Runtime Function: int __clzdi2 (long A)
    408  -- Runtime Function: int __clzti2 (long long A)
    409      These functions return the number of leading 0-bits in A, starting
    410      at the most significant bit position.  If A is zero, the result is
    411      undefined.
    412 
    413  -- Runtime Function: int __ctzsi2 (int A)
    414  -- Runtime Function: int __ctzdi2 (long A)
    415  -- Runtime Function: int __ctzti2 (long long A)
    416      These functions return the number of trailing 0-bits in A, starting
    417      at the least significant bit position.  If A is zero, the result is
    418      undefined.
    419 
    420  -- Runtime Function: int __ffsdi2 (long A)
    421  -- Runtime Function: int __ffsti2 (long long A)
    422      These functions return the index of the least significant 1-bit in
    423      A, or the value zero if A is zero.  The least significant bit is
    424      index one.
    425 
    426  -- Runtime Function: int __paritysi2 (int A)
    427  -- Runtime Function: int __paritydi2 (long A)
    428  -- Runtime Function: int __parityti2 (long long A)
    429      These functions return the value zero if the number of bits set in
    430      A is even, and the value one otherwise.
    431 
    432  -- Runtime Function: int __popcountsi2 (int A)
    433  -- Runtime Function: int __popcountdi2 (long A)
    434  -- Runtime Function: int __popcountti2 (long long A)
    435      These functions return the number of bits set in A.
    436 
    437  -- Runtime Function: int32_t __bswapsi2 (int32_t A)
    438  -- Runtime Function: int64_t __bswapdi2 (int64_t A)
    439      These functions return the A byteswapped.
    440 
    441 
    442 File: gccint.info,  Node: Soft float library routines,  Next: Decimal float library routines,  Prev: Integer library routines,  Up: Libgcc
    443 
    444 4.2 Routines for floating point emulation
    445 =========================================
    446 
    447 The software floating point library is used on machines which do not
    448 have hardware support for floating point.  It is also used whenever
    449 `-msoft-float' is used to disable generation of floating point
    450 instructions.  (Not all targets support this switch.)
    451 
    452  For compatibility with other compilers, the floating point emulation
    453 routines can be renamed with the `DECLARE_LIBRARY_RENAMES' macro (*note
    454 Library Calls::).  In this section, the default names are used.
    455 
    456  Presently the library does not support `XFmode', which is used for
    457 `long double' on some architectures.
    458 
    459 4.2.1 Arithmetic functions
    460 --------------------------
    461 
    462  -- Runtime Function: float __addsf3 (float A, float B)
    463  -- Runtime Function: double __adddf3 (double A, double B)
    464  -- Runtime Function: long double __addtf3 (long double A, long double
    465           B)
    466  -- Runtime Function: long double __addxf3 (long double A, long double
    467           B)
    468      These functions return the sum of A and B.
    469 
    470  -- Runtime Function: float __subsf3 (float A, float B)
    471  -- Runtime Function: double __subdf3 (double A, double B)
    472  -- Runtime Function: long double __subtf3 (long double A, long double
    473           B)
    474  -- Runtime Function: long double __subxf3 (long double A, long double
    475           B)
    476      These functions return the difference between B and A; that is,
    477      A - B.
    478 
    479  -- Runtime Function: float __mulsf3 (float A, float B)
    480  -- Runtime Function: double __muldf3 (double A, double B)
    481  -- Runtime Function: long double __multf3 (long double A, long double
    482           B)
    483  -- Runtime Function: long double __mulxf3 (long double A, long double
    484           B)
    485      These functions return the product of A and B.
    486 
    487  -- Runtime Function: float __divsf3 (float A, float B)
    488  -- Runtime Function: double __divdf3 (double A, double B)
    489  -- Runtime Function: long double __divtf3 (long double A, long double
    490           B)
    491  -- Runtime Function: long double __divxf3 (long double A, long double
    492           B)
    493      These functions return the quotient of A and B; that is, A / B.
    494 
    495  -- Runtime Function: float __negsf2 (float A)
    496  -- Runtime Function: double __negdf2 (double A)
    497  -- Runtime Function: long double __negtf2 (long double A)
    498  -- Runtime Function: long double __negxf2 (long double A)
    499      These functions return the negation of A.  They simply flip the
    500      sign bit, so they can produce negative zero and negative NaN.
    501 
    502 4.2.2 Conversion functions
    503 --------------------------
    504 
    505  -- Runtime Function: double __extendsfdf2 (float A)
    506  -- Runtime Function: long double __extendsftf2 (float A)
    507  -- Runtime Function: long double __extendsfxf2 (float A)
    508  -- Runtime Function: long double __extenddftf2 (double A)
    509  -- Runtime Function: long double __extenddfxf2 (double A)
    510      These functions extend A to the wider mode of their return type.
    511 
    512  -- Runtime Function: double __truncxfdf2 (long double A)
    513  -- Runtime Function: double __trunctfdf2 (long double A)
    514  -- Runtime Function: float __truncxfsf2 (long double A)
    515  -- Runtime Function: float __trunctfsf2 (long double A)
    516  -- Runtime Function: float __truncdfsf2 (double A)
    517      These functions truncate A to the narrower mode of their return
    518      type, rounding toward zero.
    519 
    520  -- Runtime Function: int __fixsfsi (float A)
    521  -- Runtime Function: int __fixdfsi (double A)
    522  -- Runtime Function: int __fixtfsi (long double A)
    523  -- Runtime Function: int __fixxfsi (long double A)
    524      These functions convert A to a signed integer, rounding toward
    525      zero.
    526 
    527  -- Runtime Function: long __fixsfdi (float A)
    528  -- Runtime Function: long __fixdfdi (double A)
    529  -- Runtime Function: long __fixtfdi (long double A)
    530  -- Runtime Function: long __fixxfdi (long double A)
    531      These functions convert A to a signed long, rounding toward zero.
    532 
    533  -- Runtime Function: long long __fixsfti (float A)
    534  -- Runtime Function: long long __fixdfti (double A)
    535  -- Runtime Function: long long __fixtfti (long double A)
    536  -- Runtime Function: long long __fixxfti (long double A)
    537      These functions convert A to a signed long long, rounding toward
    538      zero.
    539 
    540  -- Runtime Function: unsigned int __fixunssfsi (float A)
    541  -- Runtime Function: unsigned int __fixunsdfsi (double A)
    542  -- Runtime Function: unsigned int __fixunstfsi (long double A)
    543  -- Runtime Function: unsigned int __fixunsxfsi (long double A)
    544      These functions convert A to an unsigned integer, rounding toward
    545      zero.  Negative values all become zero.
    546 
    547  -- Runtime Function: unsigned long __fixunssfdi (float A)
    548  -- Runtime Function: unsigned long __fixunsdfdi (double A)
    549  -- Runtime Function: unsigned long __fixunstfdi (long double A)
    550  -- Runtime Function: unsigned long __fixunsxfdi (long double A)
    551      These functions convert A to an unsigned long, rounding toward
    552      zero.  Negative values all become zero.
    553 
    554  -- Runtime Function: unsigned long long __fixunssfti (float A)
    555  -- Runtime Function: unsigned long long __fixunsdfti (double A)
    556  -- Runtime Function: unsigned long long __fixunstfti (long double A)
    557  -- Runtime Function: unsigned long long __fixunsxfti (long double A)
    558      These functions convert A to an unsigned long long, rounding
    559      toward zero.  Negative values all become zero.
    560 
    561  -- Runtime Function: float __floatsisf (int I)
    562  -- Runtime Function: double __floatsidf (int I)
    563  -- Runtime Function: long double __floatsitf (int I)
    564  -- Runtime Function: long double __floatsixf (int I)
    565      These functions convert I, a signed integer, to floating point.
    566 
    567  -- Runtime Function: float __floatdisf (long I)
    568  -- Runtime Function: double __floatdidf (long I)
    569  -- Runtime Function: long double __floatditf (long I)
    570  -- Runtime Function: long double __floatdixf (long I)
    571      These functions convert I, a signed long, to floating point.
    572 
    573  -- Runtime Function: float __floattisf (long long I)
    574  -- Runtime Function: double __floattidf (long long I)
    575  -- Runtime Function: long double __floattitf (long long I)
    576  -- Runtime Function: long double __floattixf (long long I)
    577      These functions convert I, a signed long long, to floating point.
    578 
    579  -- Runtime Function: float __floatunsisf (unsigned int I)
    580  -- Runtime Function: double __floatunsidf (unsigned int I)
    581  -- Runtime Function: long double __floatunsitf (unsigned int I)
    582  -- Runtime Function: long double __floatunsixf (unsigned int I)
    583      These functions convert I, an unsigned integer, to floating point.
    584 
    585  -- Runtime Function: float __floatundisf (unsigned long I)
    586  -- Runtime Function: double __floatundidf (unsigned long I)
    587  -- Runtime Function: long double __floatunditf (unsigned long I)
    588  -- Runtime Function: long double __floatundixf (unsigned long I)
    589      These functions convert I, an unsigned long, to floating point.
    590 
    591  -- Runtime Function: float __floatuntisf (unsigned long long I)
    592  -- Runtime Function: double __floatuntidf (unsigned long long I)
    593  -- Runtime Function: long double __floatuntitf (unsigned long long I)
    594  -- Runtime Function: long double __floatuntixf (unsigned long long I)
    595      These functions convert I, an unsigned long long, to floating
    596      point.
    597 
    598 4.2.3 Comparison functions
    599 --------------------------
    600 
    601 There are two sets of basic comparison functions.
    602 
    603  -- Runtime Function: int __cmpsf2 (float A, float B)
    604  -- Runtime Function: int __cmpdf2 (double A, double B)
    605  -- Runtime Function: int __cmptf2 (long double A, long double B)
    606      These functions calculate a <=> b.  That is, if A is less than B,
    607      they return -1; if A is greater than B, they return 1; and if A
    608      and B are equal they return 0.  If either argument is NaN they
    609      return 1, but you should not rely on this; if NaN is a
    610      possibility, use one of the higher-level comparison functions.
    611 
    612  -- Runtime Function: int __unordsf2 (float A, float B)
    613  -- Runtime Function: int __unorddf2 (double A, double B)
    614  -- Runtime Function: int __unordtf2 (long double A, long double B)
    615      These functions return a nonzero value if either argument is NaN,
    616      otherwise 0.
    617 
    618  There is also a complete group of higher level functions which
    619 correspond directly to comparison operators.  They implement the ISO C
    620 semantics for floating-point comparisons, taking NaN into account.  Pay
    621 careful attention to the return values defined for each set.  Under the
    622 hood, all of these routines are implemented as
    623 
    624        if (__unordXf2 (a, b))
    625          return E;
    626        return __cmpXf2 (a, b);
    627 
    628 where E is a constant chosen to give the proper behavior for NaN.
    629 Thus, the meaning of the return value is different for each set.  Do
    630 not rely on this implementation; only the semantics documented below
    631 are guaranteed.
    632 
    633  -- Runtime Function: int __eqsf2 (float A, float B)
    634  -- Runtime Function: int __eqdf2 (double A, double B)
    635  -- Runtime Function: int __eqtf2 (long double A, long double B)
    636      These functions return zero if neither argument is NaN, and A and
    637      B are equal.
    638 
    639  -- Runtime Function: int __nesf2 (float A, float B)
    640  -- Runtime Function: int __nedf2 (double A, double B)
    641  -- Runtime Function: int __netf2 (long double A, long double B)
    642      These functions return a nonzero value if either argument is NaN,
    643      or if A and B are unequal.
    644 
    645  -- Runtime Function: int __gesf2 (float A, float B)
    646  -- Runtime Function: int __gedf2 (double A, double B)
    647  -- Runtime Function: int __getf2 (long double A, long double B)
    648      These functions return a value greater than or equal to zero if
    649      neither argument is NaN, and A is greater than or equal to B.
    650 
    651  -- Runtime Function: int __ltsf2 (float A, float B)
    652  -- Runtime Function: int __ltdf2 (double A, double B)
    653  -- Runtime Function: int __lttf2 (long double A, long double B)
    654      These functions return a value less than zero if neither argument
    655      is NaN, and A is strictly less than B.
    656 
    657  -- Runtime Function: int __lesf2 (float A, float B)
    658  -- Runtime Function: int __ledf2 (double A, double B)
    659  -- Runtime Function: int __letf2 (long double A, long double B)
    660      These functions return a value less than or equal to zero if
    661      neither argument is NaN, and A is less than or equal to B.
    662 
    663  -- Runtime Function: int __gtsf2 (float A, float B)
    664  -- Runtime Function: int __gtdf2 (double A, double B)
    665  -- Runtime Function: int __gttf2 (long double A, long double B)
    666      These functions return a value greater than zero if neither
    667      argument is NaN, and A is strictly greater than B.
    668 
    669 4.2.4 Other floating-point functions
    670 ------------------------------------
    671 
    672  -- Runtime Function: float __powisf2 (float A, int B)
    673  -- Runtime Function: double __powidf2 (double A, int B)
    674  -- Runtime Function: long double __powitf2 (long double A, int B)
    675  -- Runtime Function: long double __powixf2 (long double A, int B)
    676      These functions convert raise A to the power B.
    677 
    678  -- Runtime Function: complex float __mulsc3 (float A, float B, float
    679           C, float D)
    680  -- Runtime Function: complex double __muldc3 (double A, double B,
    681           double C, double D)
    682  -- Runtime Function: complex long double __multc3 (long double A, long
    683           double B, long double C, long double D)
    684  -- Runtime Function: complex long double __mulxc3 (long double A, long
    685           double B, long double C, long double D)
    686      These functions return the product of A + iB and C + iD, following
    687      the rules of C99 Annex G.
    688 
    689  -- Runtime Function: complex float __divsc3 (float A, float B, float
    690           C, float D)
    691  -- Runtime Function: complex double __divdc3 (double A, double B,
    692           double C, double D)
    693  -- Runtime Function: complex long double __divtc3 (long double A, long
    694           double B, long double C, long double D)
    695  -- Runtime Function: complex long double __divxc3 (long double A, long
    696           double B, long double C, long double D)
    697      These functions return the quotient of A + iB and C + iD (i.e., (A
    698      + iB) / (C + iD)), following the rules of C99 Annex G.
    699 
    700 
    701 File: gccint.info,  Node: Decimal float library routines,  Next: Fixed-point fractional library routines,  Prev: Soft float library routines,  Up: Libgcc
    702 
    703 4.3 Routines for decimal floating point emulation
    704 =================================================
    705 
    706 The software decimal floating point library implements IEEE 754-2008
    707 decimal floating point arithmetic and is only activated on selected
    708 targets.
    709 
    710  The software decimal floating point library supports either DPD
    711 (Densely Packed Decimal) or BID (Binary Integer Decimal) encoding as
    712 selected at configure time.
    713 
    714 4.3.1 Arithmetic functions
    715 --------------------------
    716 
    717  -- Runtime Function: _Decimal32 __dpd_addsd3 (_Decimal32 A, _Decimal32
    718           B)
    719  -- Runtime Function: _Decimal32 __bid_addsd3 (_Decimal32 A, _Decimal32
    720           B)
    721  -- Runtime Function: _Decimal64 __dpd_adddd3 (_Decimal64 A, _Decimal64
    722           B)
    723  -- Runtime Function: _Decimal64 __bid_adddd3 (_Decimal64 A, _Decimal64
    724           B)
    725  -- Runtime Function: _Decimal128 __dpd_addtd3 (_Decimal128 A,
    726           _Decimal128 B)
    727  -- Runtime Function: _Decimal128 __bid_addtd3 (_Decimal128 A,
    728           _Decimal128 B)
    729      These functions return the sum of A and B.
    730 
    731  -- Runtime Function: _Decimal32 __dpd_subsd3 (_Decimal32 A, _Decimal32
    732           B)
    733  -- Runtime Function: _Decimal32 __bid_subsd3 (_Decimal32 A, _Decimal32
    734           B)
    735  -- Runtime Function: _Decimal64 __dpd_subdd3 (_Decimal64 A, _Decimal64
    736           B)
    737  -- Runtime Function: _Decimal64 __bid_subdd3 (_Decimal64 A, _Decimal64
    738           B)
    739  -- Runtime Function: _Decimal128 __dpd_subtd3 (_Decimal128 A,
    740           _Decimal128 B)
    741  -- Runtime Function: _Decimal128 __bid_subtd3 (_Decimal128 A,
    742           _Decimal128 B)
    743      These functions return the difference between B and A; that is,
    744      A - B.
    745 
    746  -- Runtime Function: _Decimal32 __dpd_mulsd3 (_Decimal32 A, _Decimal32
    747           B)
    748  -- Runtime Function: _Decimal32 __bid_mulsd3 (_Decimal32 A, _Decimal32
    749           B)
    750  -- Runtime Function: _Decimal64 __dpd_muldd3 (_Decimal64 A, _Decimal64
    751           B)
    752  -- Runtime Function: _Decimal64 __bid_muldd3 (_Decimal64 A, _Decimal64
    753           B)
    754  -- Runtime Function: _Decimal128 __dpd_multd3 (_Decimal128 A,
    755           _Decimal128 B)
    756  -- Runtime Function: _Decimal128 __bid_multd3 (_Decimal128 A,
    757           _Decimal128 B)
    758      These functions return the product of A and B.
    759 
    760  -- Runtime Function: _Decimal32 __dpd_divsd3 (_Decimal32 A, _Decimal32
    761           B)
    762  -- Runtime Function: _Decimal32 __bid_divsd3 (_Decimal32 A, _Decimal32
    763           B)
    764  -- Runtime Function: _Decimal64 __dpd_divdd3 (_Decimal64 A, _Decimal64
    765           B)
    766  -- Runtime Function: _Decimal64 __bid_divdd3 (_Decimal64 A, _Decimal64
    767           B)
    768  -- Runtime Function: _Decimal128 __dpd_divtd3 (_Decimal128 A,
    769           _Decimal128 B)
    770  -- Runtime Function: _Decimal128 __bid_divtd3 (_Decimal128 A,
    771           _Decimal128 B)
    772      These functions return the quotient of A and B; that is, A / B.
    773 
    774  -- Runtime Function: _Decimal32 __dpd_negsd2 (_Decimal32 A)
    775  -- Runtime Function: _Decimal32 __bid_negsd2 (_Decimal32 A)
    776  -- Runtime Function: _Decimal64 __dpd_negdd2 (_Decimal64 A)
    777  -- Runtime Function: _Decimal64 __bid_negdd2 (_Decimal64 A)
    778  -- Runtime Function: _Decimal128 __dpd_negtd2 (_Decimal128 A)
    779  -- Runtime Function: _Decimal128 __bid_negtd2 (_Decimal128 A)
    780      These functions return the negation of A.  They simply flip the
    781      sign bit, so they can produce negative zero and negative NaN.
    782 
    783 4.3.2 Conversion functions
    784 --------------------------
    785 
    786  -- Runtime Function: _Decimal64 __dpd_extendsddd2 (_Decimal32 A)
    787  -- Runtime Function: _Decimal64 __bid_extendsddd2 (_Decimal32 A)
    788  -- Runtime Function: _Decimal128 __dpd_extendsdtd2 (_Decimal32 A)
    789  -- Runtime Function: _Decimal128 __bid_extendsdtd2 (_Decimal32 A)
    790  -- Runtime Function: _Decimal128 __dpd_extendddtd2 (_Decimal64 A)
    791  -- Runtime Function: _Decimal128 __bid_extendddtd2 (_Decimal64 A)
    792  -- Runtime Function: _Decimal32 __dpd_truncddsd2 (_Decimal64 A)
    793  -- Runtime Function: _Decimal32 __bid_truncddsd2 (_Decimal64 A)
    794  -- Runtime Function: _Decimal32 __dpd_trunctdsd2 (_Decimal128 A)
    795  -- Runtime Function: _Decimal32 __bid_trunctdsd2 (_Decimal128 A)
    796  -- Runtime Function: _Decimal64 __dpd_trunctddd2 (_Decimal128 A)
    797  -- Runtime Function: _Decimal64 __bid_trunctddd2 (_Decimal128 A)
    798      These functions convert the value A from one decimal floating type
    799      to another.
    800 
    801  -- Runtime Function: _Decimal64 __dpd_extendsfdd (float A)
    802  -- Runtime Function: _Decimal64 __bid_extendsfdd (float A)
    803  -- Runtime Function: _Decimal128 __dpd_extendsftd (float A)
    804  -- Runtime Function: _Decimal128 __bid_extendsftd (float A)
    805  -- Runtime Function: _Decimal128 __dpd_extenddftd (double A)
    806  -- Runtime Function: _Decimal128 __bid_extenddftd (double A)
    807  -- Runtime Function: _Decimal128 __dpd_extendxftd (long double A)
    808  -- Runtime Function: _Decimal128 __bid_extendxftd (long double A)
    809  -- Runtime Function: _Decimal32 __dpd_truncdfsd (double A)
    810  -- Runtime Function: _Decimal32 __bid_truncdfsd (double A)
    811  -- Runtime Function: _Decimal32 __dpd_truncxfsd (long double A)
    812  -- Runtime Function: _Decimal32 __bid_truncxfsd (long double A)
    813  -- Runtime Function: _Decimal32 __dpd_trunctfsd (long double A)
    814  -- Runtime Function: _Decimal32 __bid_trunctfsd (long double A)
    815  -- Runtime Function: _Decimal64 __dpd_truncxfdd (long double A)
    816  -- Runtime Function: _Decimal64 __bid_truncxfdd (long double A)
    817  -- Runtime Function: _Decimal64 __dpd_trunctfdd (long double A)
    818  -- Runtime Function: _Decimal64 __bid_trunctfdd (long double A)
    819      These functions convert the value of A from a binary floating type
    820      to a decimal floating type of a different size.
    821 
    822  -- Runtime Function: float __dpd_truncddsf (_Decimal64 A)
    823  -- Runtime Function: float __bid_truncddsf (_Decimal64 A)
    824  -- Runtime Function: float __dpd_trunctdsf (_Decimal128 A)
    825  -- Runtime Function: float __bid_trunctdsf (_Decimal128 A)
    826  -- Runtime Function: double __dpd_extendsddf (_Decimal32 A)
    827  -- Runtime Function: double __bid_extendsddf (_Decimal32 A)
    828  -- Runtime Function: double __dpd_trunctddf (_Decimal128 A)
    829  -- Runtime Function: double __bid_trunctddf (_Decimal128 A)
    830  -- Runtime Function: long double __dpd_extendsdxf (_Decimal32 A)
    831  -- Runtime Function: long double __bid_extendsdxf (_Decimal32 A)
    832  -- Runtime Function: long double __dpd_extendddxf (_Decimal64 A)
    833  -- Runtime Function: long double __bid_extendddxf (_Decimal64 A)
    834  -- Runtime Function: long double __dpd_trunctdxf (_Decimal128 A)
    835  -- Runtime Function: long double __bid_trunctdxf (_Decimal128 A)
    836  -- Runtime Function: long double __dpd_extendsdtf (_Decimal32 A)
    837  -- Runtime Function: long double __bid_extendsdtf (_Decimal32 A)
    838  -- Runtime Function: long double __dpd_extendddtf (_Decimal64 A)
    839  -- Runtime Function: long double __bid_extendddtf (_Decimal64 A)
    840      These functions convert the value of A from a decimal floating type
    841      to a binary floating type of a different size.
    842 
    843  -- Runtime Function: _Decimal32 __dpd_extendsfsd (float A)
    844  -- Runtime Function: _Decimal32 __bid_extendsfsd (float A)
    845  -- Runtime Function: _Decimal64 __dpd_extenddfdd (double A)
    846  -- Runtime Function: _Decimal64 __bid_extenddfdd (double A)
    847  -- Runtime Function: _Decimal128 __dpd_extendtftd (long double A)
    848  -- Runtime Function: _Decimal128 __bid_extendtftd (long double A)
    849  -- Runtime Function: float __dpd_truncsdsf (_Decimal32 A)
    850  -- Runtime Function: float __bid_truncsdsf (_Decimal32 A)
    851  -- Runtime Function: double __dpd_truncdddf (_Decimal64 A)
    852  -- Runtime Function: double __bid_truncdddf (_Decimal64 A)
    853  -- Runtime Function: long double __dpd_trunctdtf (_Decimal128 A)
    854  -- Runtime Function: long double __bid_trunctdtf (_Decimal128 A)
    855      These functions convert the value of A between decimal and binary
    856      floating types of the same size.
    857 
    858  -- Runtime Function: int __dpd_fixsdsi (_Decimal32 A)
    859  -- Runtime Function: int __bid_fixsdsi (_Decimal32 A)
    860  -- Runtime Function: int __dpd_fixddsi (_Decimal64 A)
    861  -- Runtime Function: int __bid_fixddsi (_Decimal64 A)
    862  -- Runtime Function: int __dpd_fixtdsi (_Decimal128 A)
    863  -- Runtime Function: int __bid_fixtdsi (_Decimal128 A)
    864      These functions convert A to a signed integer.
    865 
    866  -- Runtime Function: long __dpd_fixsddi (_Decimal32 A)
    867  -- Runtime Function: long __bid_fixsddi (_Decimal32 A)
    868  -- Runtime Function: long __dpd_fixdddi (_Decimal64 A)
    869  -- Runtime Function: long __bid_fixdddi (_Decimal64 A)
    870  -- Runtime Function: long __dpd_fixtddi (_Decimal128 A)
    871  -- Runtime Function: long __bid_fixtddi (_Decimal128 A)
    872      These functions convert A to a signed long.
    873 
    874  -- Runtime Function: unsigned int __dpd_fixunssdsi (_Decimal32 A)
    875  -- Runtime Function: unsigned int __bid_fixunssdsi (_Decimal32 A)
    876  -- Runtime Function: unsigned int __dpd_fixunsddsi (_Decimal64 A)
    877  -- Runtime Function: unsigned int __bid_fixunsddsi (_Decimal64 A)
    878  -- Runtime Function: unsigned int __dpd_fixunstdsi (_Decimal128 A)
    879  -- Runtime Function: unsigned int __bid_fixunstdsi (_Decimal128 A)
    880      These functions convert A to an unsigned integer.  Negative values
    881      all become zero.
    882 
    883  -- Runtime Function: unsigned long __dpd_fixunssddi (_Decimal32 A)
    884  -- Runtime Function: unsigned long __bid_fixunssddi (_Decimal32 A)
    885  -- Runtime Function: unsigned long __dpd_fixunsdddi (_Decimal64 A)
    886  -- Runtime Function: unsigned long __bid_fixunsdddi (_Decimal64 A)
    887  -- Runtime Function: unsigned long __dpd_fixunstddi (_Decimal128 A)
    888  -- Runtime Function: unsigned long __bid_fixunstddi (_Decimal128 A)
    889      These functions convert A to an unsigned long.  Negative values
    890      all become zero.
    891 
    892  -- Runtime Function: _Decimal32 __dpd_floatsisd (int I)
    893  -- Runtime Function: _Decimal32 __bid_floatsisd (int I)
    894  -- Runtime Function: _Decimal64 __dpd_floatsidd (int I)
    895  -- Runtime Function: _Decimal64 __bid_floatsidd (int I)
    896  -- Runtime Function: _Decimal128 __dpd_floatsitd (int I)
    897  -- Runtime Function: _Decimal128 __bid_floatsitd (int I)
    898      These functions convert I, a signed integer, to decimal floating
    899      point.
    900 
    901  -- Runtime Function: _Decimal32 __dpd_floatdisd (long I)
    902  -- Runtime Function: _Decimal32 __bid_floatdisd (long I)
    903  -- Runtime Function: _Decimal64 __dpd_floatdidd (long I)
    904  -- Runtime Function: _Decimal64 __bid_floatdidd (long I)
    905  -- Runtime Function: _Decimal128 __dpd_floatditd (long I)
    906  -- Runtime Function: _Decimal128 __bid_floatditd (long I)
    907      These functions convert I, a signed long, to decimal floating
    908      point.
    909 
    910  -- Runtime Function: _Decimal32 __dpd_floatunssisd (unsigned int I)
    911  -- Runtime Function: _Decimal32 __bid_floatunssisd (unsigned int I)
    912  -- Runtime Function: _Decimal64 __dpd_floatunssidd (unsigned int I)
    913  -- Runtime Function: _Decimal64 __bid_floatunssidd (unsigned int I)
    914  -- Runtime Function: _Decimal128 __dpd_floatunssitd (unsigned int I)
    915  -- Runtime Function: _Decimal128 __bid_floatunssitd (unsigned int I)
    916      These functions convert I, an unsigned integer, to decimal
    917      floating point.
    918 
    919  -- Runtime Function: _Decimal32 __dpd_floatunsdisd (unsigned long I)
    920  -- Runtime Function: _Decimal32 __bid_floatunsdisd (unsigned long I)
    921  -- Runtime Function: _Decimal64 __dpd_floatunsdidd (unsigned long I)
    922  -- Runtime Function: _Decimal64 __bid_floatunsdidd (unsigned long I)
    923  -- Runtime Function: _Decimal128 __dpd_floatunsditd (unsigned long I)
    924  -- Runtime Function: _Decimal128 __bid_floatunsditd (unsigned long I)
    925      These functions convert I, an unsigned long, to decimal floating
    926      point.
    927 
    928 4.3.3 Comparison functions
    929 --------------------------
    930 
    931  -- Runtime Function: int __dpd_unordsd2 (_Decimal32 A, _Decimal32 B)
    932  -- Runtime Function: int __bid_unordsd2 (_Decimal32 A, _Decimal32 B)
    933  -- Runtime Function: int __dpd_unorddd2 (_Decimal64 A, _Decimal64 B)
    934  -- Runtime Function: int __bid_unorddd2 (_Decimal64 A, _Decimal64 B)
    935  -- Runtime Function: int __dpd_unordtd2 (_Decimal128 A, _Decimal128 B)
    936  -- Runtime Function: int __bid_unordtd2 (_Decimal128 A, _Decimal128 B)
    937      These functions return a nonzero value if either argument is NaN,
    938      otherwise 0.
    939 
    940  There is also a complete group of higher level functions which
    941 correspond directly to comparison operators.  They implement the ISO C
    942 semantics for floating-point comparisons, taking NaN into account.  Pay
    943 careful attention to the return values defined for each set.  Under the
    944 hood, all of these routines are implemented as
    945 
    946        if (__bid_unordXd2 (a, b))
    947          return E;
    948        return __bid_cmpXd2 (a, b);
    949 
    950 where E is a constant chosen to give the proper behavior for NaN.
    951 Thus, the meaning of the return value is different for each set.  Do
    952 not rely on this implementation; only the semantics documented below
    953 are guaranteed.
    954 
    955  -- Runtime Function: int __dpd_eqsd2 (_Decimal32 A, _Decimal32 B)
    956  -- Runtime Function: int __bid_eqsd2 (_Decimal32 A, _Decimal32 B)
    957  -- Runtime Function: int __dpd_eqdd2 (_Decimal64 A, _Decimal64 B)
    958  -- Runtime Function: int __bid_eqdd2 (_Decimal64 A, _Decimal64 B)
    959  -- Runtime Function: int __dpd_eqtd2 (_Decimal128 A, _Decimal128 B)
    960  -- Runtime Function: int __bid_eqtd2 (_Decimal128 A, _Decimal128 B)
    961      These functions return zero if neither argument is NaN, and A and
    962      B are equal.
    963 
    964  -- Runtime Function: int __dpd_nesd2 (_Decimal32 A, _Decimal32 B)
    965  -- Runtime Function: int __bid_nesd2 (_Decimal32 A, _Decimal32 B)
    966  -- Runtime Function: int __dpd_nedd2 (_Decimal64 A, _Decimal64 B)
    967  -- Runtime Function: int __bid_nedd2 (_Decimal64 A, _Decimal64 B)
    968  -- Runtime Function: int __dpd_netd2 (_Decimal128 A, _Decimal128 B)
    969  -- Runtime Function: int __bid_netd2 (_Decimal128 A, _Decimal128 B)
    970      These functions return a nonzero value if either argument is NaN,
    971      or if A and B are unequal.
    972 
    973  -- Runtime Function: int __dpd_gesd2 (_Decimal32 A, _Decimal32 B)
    974  -- Runtime Function: int __bid_gesd2 (_Decimal32 A, _Decimal32 B)
    975  -- Runtime Function: int __dpd_gedd2 (_Decimal64 A, _Decimal64 B)
    976  -- Runtime Function: int __bid_gedd2 (_Decimal64 A, _Decimal64 B)
    977  -- Runtime Function: int __dpd_getd2 (_Decimal128 A, _Decimal128 B)
    978  -- Runtime Function: int __bid_getd2 (_Decimal128 A, _Decimal128 B)
    979      These functions return a value greater than or equal to zero if
    980      neither argument is NaN, and A is greater than or equal to B.
    981 
    982  -- Runtime Function: int __dpd_ltsd2 (_Decimal32 A, _Decimal32 B)
    983  -- Runtime Function: int __bid_ltsd2 (_Decimal32 A, _Decimal32 B)
    984  -- Runtime Function: int __dpd_ltdd2 (_Decimal64 A, _Decimal64 B)
    985  -- Runtime Function: int __bid_ltdd2 (_Decimal64 A, _Decimal64 B)
    986  -- Runtime Function: int __dpd_lttd2 (_Decimal128 A, _Decimal128 B)
    987  -- Runtime Function: int __bid_lttd2 (_Decimal128 A, _Decimal128 B)
    988      These functions return a value less than zero if neither argument
    989      is NaN, and A is strictly less than B.
    990 
    991  -- Runtime Function: int __dpd_lesd2 (_Decimal32 A, _Decimal32 B)
    992  -- Runtime Function: int __bid_lesd2 (_Decimal32 A, _Decimal32 B)
    993  -- Runtime Function: int __dpd_ledd2 (_Decimal64 A, _Decimal64 B)
    994  -- Runtime Function: int __bid_ledd2 (_Decimal64 A, _Decimal64 B)
    995  -- Runtime Function: int __dpd_letd2 (_Decimal128 A, _Decimal128 B)
    996  -- Runtime Function: int __bid_letd2 (_Decimal128 A, _Decimal128 B)
    997      These functions return a value less than or equal to zero if
    998      neither argument is NaN, and A is less than or equal to B.
    999 
   1000  -- Runtime Function: int __dpd_gtsd2 (_Decimal32 A, _Decimal32 B)
   1001  -- Runtime Function: int __bid_gtsd2 (_Decimal32 A, _Decimal32 B)
   1002  -- Runtime Function: int __dpd_gtdd2 (_Decimal64 A, _Decimal64 B)
   1003  -- Runtime Function: int __bid_gtdd2 (_Decimal64 A, _Decimal64 B)
   1004  -- Runtime Function: int __dpd_gttd2 (_Decimal128 A, _Decimal128 B)
   1005  -- Runtime Function: int __bid_gttd2 (_Decimal128 A, _Decimal128 B)
   1006      These functions return a value greater than zero if neither
   1007      argument is NaN, and A is strictly greater than B.
   1008 
   1009 
   1010 File: gccint.info,  Node: Fixed-point fractional library routines,  Next: Exception handling routines,  Prev: Decimal float library routines,  Up: Libgcc
   1011 
   1012 4.4 Routines for fixed-point fractional emulation
   1013 =================================================
   1014 
   1015 The software fixed-point library implements fixed-point fractional
   1016 arithmetic, and is only activated on selected targets.
   1017 
   1018  For ease of comprehension `fract' is an alias for the `_Fract' type,
   1019 `accum' an alias for `_Accum', and `sat' an alias for `_Sat'.
   1020 
   1021  For illustrative purposes, in this section the fixed-point fractional
   1022 type `short fract' is assumed to correspond to machine mode `QQmode';
   1023 `unsigned short fract' to `UQQmode'; `fract' to `HQmode';
   1024 `unsigned fract' to `UHQmode'; `long fract' to `SQmode';
   1025 `unsigned long fract' to `USQmode'; `long long fract' to `DQmode'; and
   1026 `unsigned long long fract' to `UDQmode'.  Similarly the fixed-point
   1027 accumulator type `short accum' corresponds to `HAmode';
   1028 `unsigned short accum' to `UHAmode'; `accum' to `SAmode';
   1029 `unsigned accum' to `USAmode'; `long accum' to `DAmode';
   1030 `unsigned long accum' to `UDAmode'; `long long accum' to `TAmode'; and
   1031 `unsigned long long accum' to `UTAmode'.
   1032 
   1033 4.4.1 Arithmetic functions
   1034 --------------------------
   1035 
   1036  -- Runtime Function: short fract __addqq3 (short fract A, short fract
   1037           B)
   1038  -- Runtime Function: fract __addhq3 (fract A, fract B)
   1039  -- Runtime Function: long fract __addsq3 (long fract A, long fract B)
   1040  -- Runtime Function: long long fract __adddq3 (long long fract A, long
   1041           long fract B)
   1042  -- Runtime Function: unsigned short fract __adduqq3 (unsigned short
   1043           fract A, unsigned short fract B)
   1044  -- Runtime Function: unsigned fract __adduhq3 (unsigned fract A,
   1045           unsigned fract B)
   1046  -- Runtime Function: unsigned long fract __addusq3 (unsigned long
   1047           fract A, unsigned long fract B)
   1048  -- Runtime Function: unsigned long long fract __addudq3 (unsigned long
   1049           long fract A, unsigned long long fract B)
   1050  -- Runtime Function: short accum __addha3 (short accum A, short accum
   1051           B)
   1052  -- Runtime Function: accum __addsa3 (accum A, accum B)
   1053  -- Runtime Function: long accum __addda3 (long accum A, long accum B)
   1054  -- Runtime Function: long long accum __addta3 (long long accum A, long
   1055           long accum B)
   1056  -- Runtime Function: unsigned short accum __adduha3 (unsigned short
   1057           accum A, unsigned short accum B)
   1058  -- Runtime Function: unsigned accum __addusa3 (unsigned accum A,
   1059           unsigned accum B)
   1060  -- Runtime Function: unsigned long accum __adduda3 (unsigned long
   1061           accum A, unsigned long accum B)
   1062  -- Runtime Function: unsigned long long accum __adduta3 (unsigned long
   1063           long accum A, unsigned long long accum B)
   1064      These functions return the sum of A and B.
   1065 
   1066  -- Runtime Function: short fract __ssaddqq3 (short fract A, short
   1067           fract B)
   1068  -- Runtime Function: fract __ssaddhq3 (fract A, fract B)
   1069  -- Runtime Function: long fract __ssaddsq3 (long fract A, long fract B)
   1070  -- Runtime Function: long long fract __ssadddq3 (long long fract A,
   1071           long long fract B)
   1072  -- Runtime Function: short accum __ssaddha3 (short accum A, short
   1073           accum B)
   1074  -- Runtime Function: accum __ssaddsa3 (accum A, accum B)
   1075  -- Runtime Function: long accum __ssaddda3 (long accum A, long accum B)
   1076  -- Runtime Function: long long accum __ssaddta3 (long long accum A,
   1077           long long accum B)
   1078      These functions return the sum of A and B with signed saturation.
   1079 
   1080  -- Runtime Function: unsigned short fract __usadduqq3 (unsigned short
   1081           fract A, unsigned short fract B)
   1082  -- Runtime Function: unsigned fract __usadduhq3 (unsigned fract A,
   1083           unsigned fract B)
   1084  -- Runtime Function: unsigned long fract __usaddusq3 (unsigned long
   1085           fract A, unsigned long fract B)
   1086  -- Runtime Function: unsigned long long fract __usaddudq3 (unsigned
   1087           long long fract A, unsigned long long fract B)
   1088  -- Runtime Function: unsigned short accum __usadduha3 (unsigned short
   1089           accum A, unsigned short accum B)
   1090  -- Runtime Function: unsigned accum __usaddusa3 (unsigned accum A,
   1091           unsigned accum B)
   1092  -- Runtime Function: unsigned long accum __usadduda3 (unsigned long
   1093           accum A, unsigned long accum B)
   1094  -- Runtime Function: unsigned long long accum __usadduta3 (unsigned
   1095           long long accum A, unsigned long long accum B)
   1096      These functions return the sum of A and B with unsigned saturation.
   1097 
   1098  -- Runtime Function: short fract __subqq3 (short fract A, short fract
   1099           B)
   1100  -- Runtime Function: fract __subhq3 (fract A, fract B)
   1101  -- Runtime Function: long fract __subsq3 (long fract A, long fract B)
   1102  -- Runtime Function: long long fract __subdq3 (long long fract A, long
   1103           long fract B)
   1104  -- Runtime Function: unsigned short fract __subuqq3 (unsigned short
   1105           fract A, unsigned short fract B)
   1106  -- Runtime Function: unsigned fract __subuhq3 (unsigned fract A,
   1107           unsigned fract B)
   1108  -- Runtime Function: unsigned long fract __subusq3 (unsigned long
   1109           fract A, unsigned long fract B)
   1110  -- Runtime Function: unsigned long long fract __subudq3 (unsigned long
   1111           long fract A, unsigned long long fract B)
   1112  -- Runtime Function: short accum __subha3 (short accum A, short accum
   1113           B)
   1114  -- Runtime Function: accum __subsa3 (accum A, accum B)
   1115  -- Runtime Function: long accum __subda3 (long accum A, long accum B)
   1116  -- Runtime Function: long long accum __subta3 (long long accum A, long
   1117           long accum B)
   1118  -- Runtime Function: unsigned short accum __subuha3 (unsigned short
   1119           accum A, unsigned short accum B)
   1120  -- Runtime Function: unsigned accum __subusa3 (unsigned accum A,
   1121           unsigned accum B)
   1122  -- Runtime Function: unsigned long accum __subuda3 (unsigned long
   1123           accum A, unsigned long accum B)
   1124  -- Runtime Function: unsigned long long accum __subuta3 (unsigned long
   1125           long accum A, unsigned long long accum B)
   1126      These functions return the difference of A and B; that is, `A - B'.
   1127 
   1128  -- Runtime Function: short fract __sssubqq3 (short fract A, short
   1129           fract B)
   1130  -- Runtime Function: fract __sssubhq3 (fract A, fract B)
   1131  -- Runtime Function: long fract __sssubsq3 (long fract A, long fract B)
   1132  -- Runtime Function: long long fract __sssubdq3 (long long fract A,
   1133           long long fract B)
   1134  -- Runtime Function: short accum __sssubha3 (short accum A, short
   1135           accum B)
   1136  -- Runtime Function: accum __sssubsa3 (accum A, accum B)
   1137  -- Runtime Function: long accum __sssubda3 (long accum A, long accum B)
   1138  -- Runtime Function: long long accum __sssubta3 (long long accum A,
   1139           long long accum B)
   1140      These functions return the difference of A and B with signed
   1141      saturation;  that is, `A - B'.
   1142 
   1143  -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short
   1144           fract A, unsigned short fract B)
   1145  -- Runtime Function: unsigned fract __ussubuhq3 (unsigned fract A,
   1146           unsigned fract B)
   1147  -- Runtime Function: unsigned long fract __ussubusq3 (unsigned long
   1148           fract A, unsigned long fract B)
   1149  -- Runtime Function: unsigned long long fract __ussubudq3 (unsigned
   1150           long long fract A, unsigned long long fract B)
   1151  -- Runtime Function: unsigned short accum __ussubuha3 (unsigned short
   1152           accum A, unsigned short accum B)
   1153  -- Runtime Function: unsigned accum __ussubusa3 (unsigned accum A,
   1154           unsigned accum B)
   1155  -- Runtime Function: unsigned long accum __ussubuda3 (unsigned long
   1156           accum A, unsigned long accum B)
   1157  -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned
   1158           long long accum A, unsigned long long accum B)
   1159      These functions return the difference of A and B with unsigned
   1160      saturation;  that is, `A - B'.
   1161 
   1162  -- Runtime Function: short fract __mulqq3 (short fract A, short fract
   1163           B)
   1164  -- Runtime Function: fract __mulhq3 (fract A, fract B)
   1165  -- Runtime Function: long fract __mulsq3 (long fract A, long fract B)
   1166  -- Runtime Function: long long fract __muldq3 (long long fract A, long
   1167           long fract B)
   1168  -- Runtime Function: unsigned short fract __muluqq3 (unsigned short
   1169           fract A, unsigned short fract B)
   1170  -- Runtime Function: unsigned fract __muluhq3 (unsigned fract A,
   1171           unsigned fract B)
   1172  -- Runtime Function: unsigned long fract __mulusq3 (unsigned long
   1173           fract A, unsigned long fract B)
   1174  -- Runtime Function: unsigned long long fract __muludq3 (unsigned long
   1175           long fract A, unsigned long long fract B)
   1176  -- Runtime Function: short accum __mulha3 (short accum A, short accum
   1177           B)
   1178  -- Runtime Function: accum __mulsa3 (accum A, accum B)
   1179  -- Runtime Function: long accum __mulda3 (long accum A, long accum B)
   1180  -- Runtime Function: long long accum __multa3 (long long accum A, long
   1181           long accum B)
   1182  -- Runtime Function: unsigned short accum __muluha3 (unsigned short
   1183           accum A, unsigned short accum B)
   1184  -- Runtime Function: unsigned accum __mulusa3 (unsigned accum A,
   1185           unsigned accum B)
   1186  -- Runtime Function: unsigned long accum __muluda3 (unsigned long
   1187           accum A, unsigned long accum B)
   1188  -- Runtime Function: unsigned long long accum __muluta3 (unsigned long
   1189           long accum A, unsigned long long accum B)
   1190      These functions return the product of A and B.
   1191 
   1192  -- Runtime Function: short fract __ssmulqq3 (short fract A, short
   1193           fract B)
   1194  -- Runtime Function: fract __ssmulhq3 (fract A, fract B)
   1195  -- Runtime Function: long fract __ssmulsq3 (long fract A, long fract B)
   1196  -- Runtime Function: long long fract __ssmuldq3 (long long fract A,
   1197           long long fract B)
   1198  -- Runtime Function: short accum __ssmulha3 (short accum A, short
   1199           accum B)
   1200  -- Runtime Function: accum __ssmulsa3 (accum A, accum B)
   1201  -- Runtime Function: long accum __ssmulda3 (long accum A, long accum B)
   1202  -- Runtime Function: long long accum __ssmulta3 (long long accum A,
   1203           long long accum B)
   1204      These functions return the product of A and B with signed
   1205      saturation.
   1206 
   1207  -- Runtime Function: unsigned short fract __usmuluqq3 (unsigned short
   1208           fract A, unsigned short fract B)
   1209  -- Runtime Function: unsigned fract __usmuluhq3 (unsigned fract A,
   1210           unsigned fract B)
   1211  -- Runtime Function: unsigned long fract __usmulusq3 (unsigned long
   1212           fract A, unsigned long fract B)
   1213  -- Runtime Function: unsigned long long fract __usmuludq3 (unsigned
   1214           long long fract A, unsigned long long fract B)
   1215  -- Runtime Function: unsigned short accum __usmuluha3 (unsigned short
   1216           accum A, unsigned short accum B)
   1217  -- Runtime Function: unsigned accum __usmulusa3 (unsigned accum A,
   1218           unsigned accum B)
   1219  -- Runtime Function: unsigned long accum __usmuluda3 (unsigned long
   1220           accum A, unsigned long accum B)
   1221  -- Runtime Function: unsigned long long accum __usmuluta3 (unsigned
   1222           long long accum A, unsigned long long accum B)
   1223      These functions return the product of A and B with unsigned
   1224      saturation.
   1225 
   1226  -- Runtime Function: short fract __divqq3 (short fract A, short fract
   1227           B)
   1228  -- Runtime Function: fract __divhq3 (fract A, fract B)
   1229  -- Runtime Function: long fract __divsq3 (long fract A, long fract B)
   1230  -- Runtime Function: long long fract __divdq3 (long long fract A, long
   1231           long fract B)
   1232  -- Runtime Function: short accum __divha3 (short accum A, short accum
   1233           B)
   1234  -- Runtime Function: accum __divsa3 (accum A, accum B)
   1235  -- Runtime Function: long accum __divda3 (long accum A, long accum B)
   1236  -- Runtime Function: long long accum __divta3 (long long accum A, long
   1237           long accum B)
   1238      These functions return the quotient of the signed division of A
   1239      and B.
   1240 
   1241  -- Runtime Function: unsigned short fract __udivuqq3 (unsigned short
   1242           fract A, unsigned short fract B)
   1243  -- Runtime Function: unsigned fract __udivuhq3 (unsigned fract A,
   1244           unsigned fract B)
   1245  -- Runtime Function: unsigned long fract __udivusq3 (unsigned long
   1246           fract A, unsigned long fract B)
   1247  -- Runtime Function: unsigned long long fract __udivudq3 (unsigned
   1248           long long fract A, unsigned long long fract B)
   1249  -- Runtime Function: unsigned short accum __udivuha3 (unsigned short
   1250           accum A, unsigned short accum B)
   1251  -- Runtime Function: unsigned accum __udivusa3 (unsigned accum A,
   1252           unsigned accum B)
   1253  -- Runtime Function: unsigned long accum __udivuda3 (unsigned long
   1254           accum A, unsigned long accum B)
   1255  -- Runtime Function: unsigned long long accum __udivuta3 (unsigned
   1256           long long accum A, unsigned long long accum B)
   1257      These functions return the quotient of the unsigned division of A
   1258      and B.
   1259 
   1260  -- Runtime Function: short fract __ssdivqq3 (short fract A, short
   1261           fract B)
   1262  -- Runtime Function: fract __ssdivhq3 (fract A, fract B)
   1263  -- Runtime Function: long fract __ssdivsq3 (long fract A, long fract B)
   1264  -- Runtime Function: long long fract __ssdivdq3 (long long fract A,
   1265           long long fract B)
   1266  -- Runtime Function: short accum __ssdivha3 (short accum A, short
   1267           accum B)
   1268  -- Runtime Function: accum __ssdivsa3 (accum A, accum B)
   1269  -- Runtime Function: long accum __ssdivda3 (long accum A, long accum B)
   1270  -- Runtime Function: long long accum __ssdivta3 (long long accum A,
   1271           long long accum B)
   1272      These functions return the quotient of the signed division of A
   1273      and B with signed saturation.
   1274 
   1275  -- Runtime Function: unsigned short fract __usdivuqq3 (unsigned short
   1276           fract A, unsigned short fract B)
   1277  -- Runtime Function: unsigned fract __usdivuhq3 (unsigned fract A,
   1278           unsigned fract B)
   1279  -- Runtime Function: unsigned long fract __usdivusq3 (unsigned long
   1280           fract A, unsigned long fract B)
   1281  -- Runtime Function: unsigned long long fract __usdivudq3 (unsigned
   1282           long long fract A, unsigned long long fract B)
   1283  -- Runtime Function: unsigned short accum __usdivuha3 (unsigned short
   1284           accum A, unsigned short accum B)
   1285  -- Runtime Function: unsigned accum __usdivusa3 (unsigned accum A,
   1286           unsigned accum B)
   1287  -- Runtime Function: unsigned long accum __usdivuda3 (unsigned long
   1288           accum A, unsigned long accum B)
   1289  -- Runtime Function: unsigned long long accum __usdivuta3 (unsigned
   1290           long long accum A, unsigned long long accum B)
   1291      These functions return the quotient of the unsigned division of A
   1292      and B with unsigned saturation.
   1293 
   1294  -- Runtime Function: short fract __negqq2 (short fract A)
   1295  -- Runtime Function: fract __neghq2 (fract A)
   1296  -- Runtime Function: long fract __negsq2 (long fract A)
   1297  -- Runtime Function: long long fract __negdq2 (long long fract A)
   1298  -- Runtime Function: unsigned short fract __neguqq2 (unsigned short
   1299           fract A)
   1300  -- Runtime Function: unsigned fract __neguhq2 (unsigned fract A)
   1301  -- Runtime Function: unsigned long fract __negusq2 (unsigned long
   1302           fract A)
   1303  -- Runtime Function: unsigned long long fract __negudq2 (unsigned long
   1304           long fract A)
   1305  -- Runtime Function: short accum __negha2 (short accum A)
   1306  -- Runtime Function: accum __negsa2 (accum A)
   1307  -- Runtime Function: long accum __negda2 (long accum A)
   1308  -- Runtime Function: long long accum __negta2 (long long accum A)
   1309  -- Runtime Function: unsigned short accum __neguha2 (unsigned short
   1310           accum A)
   1311  -- Runtime Function: unsigned accum __negusa2 (unsigned accum A)
   1312  -- Runtime Function: unsigned long accum __neguda2 (unsigned long
   1313           accum A)
   1314  -- Runtime Function: unsigned long long accum __neguta2 (unsigned long
   1315           long accum A)
   1316      These functions return the negation of A.
   1317 
   1318  -- Runtime Function: short fract __ssnegqq2 (short fract A)
   1319  -- Runtime Function: fract __ssneghq2 (fract A)
   1320  -- Runtime Function: long fract __ssnegsq2 (long fract A)
   1321  -- Runtime Function: long long fract __ssnegdq2 (long long fract A)
   1322  -- Runtime Function: short accum __ssnegha2 (short accum A)
   1323  -- Runtime Function: accum __ssnegsa2 (accum A)
   1324  -- Runtime Function: long accum __ssnegda2 (long accum A)
   1325  -- Runtime Function: long long accum __ssnegta2 (long long accum A)
   1326      These functions return the negation of A with signed saturation.
   1327 
   1328  -- Runtime Function: unsigned short fract __usneguqq2 (unsigned short
   1329           fract A)
   1330  -- Runtime Function: unsigned fract __usneguhq2 (unsigned fract A)
   1331  -- Runtime Function: unsigned long fract __usnegusq2 (unsigned long
   1332           fract A)
   1333  -- Runtime Function: unsigned long long fract __usnegudq2 (unsigned
   1334           long long fract A)
   1335  -- Runtime Function: unsigned short accum __usneguha2 (unsigned short
   1336           accum A)
   1337  -- Runtime Function: unsigned accum __usnegusa2 (unsigned accum A)
   1338  -- Runtime Function: unsigned long accum __usneguda2 (unsigned long
   1339           accum A)
   1340  -- Runtime Function: unsigned long long accum __usneguta2 (unsigned
   1341           long long accum A)
   1342      These functions return the negation of A with unsigned saturation.
   1343 
   1344  -- Runtime Function: short fract __ashlqq3 (short fract A, int B)
   1345  -- Runtime Function: fract __ashlhq3 (fract A, int B)
   1346  -- Runtime Function: long fract __ashlsq3 (long fract A, int B)
   1347  -- Runtime Function: long long fract __ashldq3 (long long fract A, int
   1348           B)
   1349  -- Runtime Function: unsigned short fract __ashluqq3 (unsigned short
   1350           fract A, int B)
   1351  -- Runtime Function: unsigned fract __ashluhq3 (unsigned fract A, int
   1352           B)
   1353  -- Runtime Function: unsigned long fract __ashlusq3 (unsigned long
   1354           fract A, int B)
   1355  -- Runtime Function: unsigned long long fract __ashludq3 (unsigned
   1356           long long fract A, int B)
   1357  -- Runtime Function: short accum __ashlha3 (short accum A, int B)
   1358  -- Runtime Function: accum __ashlsa3 (accum A, int B)
   1359  -- Runtime Function: long accum __ashlda3 (long accum A, int B)
   1360  -- Runtime Function: long long accum __ashlta3 (long long accum A, int
   1361           B)
   1362  -- Runtime Function: unsigned short accum __ashluha3 (unsigned short
   1363           accum A, int B)
   1364  -- Runtime Function: unsigned accum __ashlusa3 (unsigned accum A, int
   1365           B)
   1366  -- Runtime Function: unsigned long accum __ashluda3 (unsigned long
   1367           accum A, int B)
   1368  -- Runtime Function: unsigned long long accum __ashluta3 (unsigned
   1369           long long accum A, int B)
   1370      These functions return the result of shifting A left by B bits.
   1371 
   1372  -- Runtime Function: short fract __ashrqq3 (short fract A, int B)
   1373  -- Runtime Function: fract __ashrhq3 (fract A, int B)
   1374  -- Runtime Function: long fract __ashrsq3 (long fract A, int B)
   1375  -- Runtime Function: long long fract __ashrdq3 (long long fract A, int
   1376           B)
   1377  -- Runtime Function: short accum __ashrha3 (short accum A, int B)
   1378  -- Runtime Function: accum __ashrsa3 (accum A, int B)
   1379  -- Runtime Function: long accum __ashrda3 (long accum A, int B)
   1380  -- Runtime Function: long long accum __ashrta3 (long long accum A, int
   1381           B)
   1382      These functions return the result of arithmetically shifting A
   1383      right by B bits.
   1384 
   1385  -- Runtime Function: unsigned short fract __lshruqq3 (unsigned short
   1386           fract A, int B)
   1387  -- Runtime Function: unsigned fract __lshruhq3 (unsigned fract A, int
   1388           B)
   1389  -- Runtime Function: unsigned long fract __lshrusq3 (unsigned long
   1390           fract A, int B)
   1391  -- Runtime Function: unsigned long long fract __lshrudq3 (unsigned
   1392           long long fract A, int B)
   1393  -- Runtime Function: unsigned short accum __lshruha3 (unsigned short
   1394           accum A, int B)
   1395  -- Runtime Function: unsigned accum __lshrusa3 (unsigned accum A, int
   1396           B)
   1397  -- Runtime Function: unsigned long accum __lshruda3 (unsigned long
   1398           accum A, int B)
   1399  -- Runtime Function: unsigned long long accum __lshruta3 (unsigned
   1400           long long accum A, int B)
   1401      These functions return the result of logically shifting A right by
   1402      B bits.
   1403 
   1404  -- Runtime Function: fract __ssashlhq3 (fract A, int B)
   1405  -- Runtime Function: long fract __ssashlsq3 (long fract A, int B)
   1406  -- Runtime Function: long long fract __ssashldq3 (long long fract A,
   1407           int B)
   1408  -- Runtime Function: short accum __ssashlha3 (short accum A, int B)
   1409  -- Runtime Function: accum __ssashlsa3 (accum A, int B)
   1410  -- Runtime Function: long accum __ssashlda3 (long accum A, int B)
   1411  -- Runtime Function: long long accum __ssashlta3 (long long accum A,
   1412           int B)
   1413      These functions return the result of shifting A left by B bits
   1414      with signed saturation.
   1415 
   1416  -- Runtime Function: unsigned short fract __usashluqq3 (unsigned short
   1417           fract A, int B)
   1418  -- Runtime Function: unsigned fract __usashluhq3 (unsigned fract A,
   1419           int B)
   1420  -- Runtime Function: unsigned long fract __usashlusq3 (unsigned long
   1421           fract A, int B)
   1422  -- Runtime Function: unsigned long long fract __usashludq3 (unsigned
   1423           long long fract A, int B)
   1424  -- Runtime Function: unsigned short accum __usashluha3 (unsigned short
   1425           accum A, int B)
   1426  -- Runtime Function: unsigned accum __usashlusa3 (unsigned accum A,
   1427           int B)
   1428  -- Runtime Function: unsigned long accum __usashluda3 (unsigned long
   1429           accum A, int B)
   1430  -- Runtime Function: unsigned long long accum __usashluta3 (unsigned
   1431           long long accum A, int B)
   1432      These functions return the result of shifting A left by B bits
   1433      with unsigned saturation.
   1434 
   1435 4.4.2 Comparison functions
   1436 --------------------------
   1437 
   1438 The following functions implement fixed-point comparisons.  These
   1439 functions implement a low-level compare, upon which the higher level
   1440 comparison operators (such as less than and greater than or equal to)
   1441 can be constructed.  The returned values lie in the range zero to two,
   1442 to allow the high-level operators to be implemented by testing the
   1443 returned result using either signed or unsigned comparison.
   1444 
   1445  -- Runtime Function: int __cmpqq2 (short fract A, short fract B)
   1446  -- Runtime Function: int __cmphq2 (fract A, fract B)
   1447  -- Runtime Function: int __cmpsq2 (long fract A, long fract B)
   1448  -- Runtime Function: int __cmpdq2 (long long fract A, long long fract
   1449           B)
   1450  -- Runtime Function: int __cmpuqq2 (unsigned short fract A, unsigned
   1451           short fract B)
   1452  -- Runtime Function: int __cmpuhq2 (unsigned fract A, unsigned fract B)
   1453  -- Runtime Function: int __cmpusq2 (unsigned long fract A, unsigned
   1454           long fract B)
   1455  -- Runtime Function: int __cmpudq2 (unsigned long long fract A,
   1456           unsigned long long fract B)
   1457  -- Runtime Function: int __cmpha2 (short accum A, short accum B)
   1458  -- Runtime Function: int __cmpsa2 (accum A, accum B)
   1459  -- Runtime Function: int __cmpda2 (long accum A, long accum B)
   1460  -- Runtime Function: int __cmpta2 (long long accum A, long long accum
   1461           B)
   1462  -- Runtime Function: int __cmpuha2 (unsigned short accum A, unsigned
   1463           short accum B)
   1464  -- Runtime Function: int __cmpusa2 (unsigned accum A, unsigned accum B)
   1465  -- Runtime Function: int __cmpuda2 (unsigned long accum A, unsigned
   1466           long accum B)
   1467  -- Runtime Function: int __cmputa2 (unsigned long long accum A,
   1468           unsigned long long accum B)
   1469      These functions perform a signed or unsigned comparison of A and B
   1470      (depending on the selected machine mode).  If A is less than B,
   1471      they return 0; if A is greater than B, they return 2; and if A and
   1472      B are equal they return 1.
   1473 
   1474 4.4.3 Conversion functions
   1475 --------------------------
   1476 
   1477  -- Runtime Function: fract __fractqqhq2 (short fract A)
   1478  -- Runtime Function: long fract __fractqqsq2 (short fract A)
   1479  -- Runtime Function: long long fract __fractqqdq2 (short fract A)
   1480  -- Runtime Function: short accum __fractqqha (short fract A)
   1481  -- Runtime Function: accum __fractqqsa (short fract A)
   1482  -- Runtime Function: long accum __fractqqda (short fract A)
   1483  -- Runtime Function: long long accum __fractqqta (short fract A)
   1484  -- Runtime Function: unsigned short fract __fractqquqq (short fract A)
   1485  -- Runtime Function: unsigned fract __fractqquhq (short fract A)
   1486  -- Runtime Function: unsigned long fract __fractqqusq (short fract A)
   1487  -- Runtime Function: unsigned long long fract __fractqqudq (short
   1488           fract A)
   1489  -- Runtime Function: unsigned short accum __fractqquha (short fract A)
   1490  -- Runtime Function: unsigned accum __fractqqusa (short fract A)
   1491  -- Runtime Function: unsigned long accum __fractqquda (short fract A)
   1492  -- Runtime Function: unsigned long long accum __fractqquta (short
   1493           fract A)
   1494  -- Runtime Function: signed char __fractqqqi (short fract A)
   1495  -- Runtime Function: short __fractqqhi (short fract A)
   1496  -- Runtime Function: int __fractqqsi (short fract A)
   1497  -- Runtime Function: long __fractqqdi (short fract A)
   1498  -- Runtime Function: long long __fractqqti (short fract A)
   1499  -- Runtime Function: float __fractqqsf (short fract A)
   1500  -- Runtime Function: double __fractqqdf (short fract A)
   1501  -- Runtime Function: short fract __fracthqqq2 (fract A)
   1502  -- Runtime Function: long fract __fracthqsq2 (fract A)
   1503  -- Runtime Function: long long fract __fracthqdq2 (fract A)
   1504  -- Runtime Function: short accum __fracthqha (fract A)
   1505  -- Runtime Function: accum __fracthqsa (fract A)
   1506  -- Runtime Function: long accum __fracthqda (fract A)
   1507  -- Runtime Function: long long accum __fracthqta (fract A)
   1508  -- Runtime Function: unsigned short fract __fracthquqq (fract A)
   1509  -- Runtime Function: unsigned fract __fracthquhq (fract A)
   1510  -- Runtime Function: unsigned long fract __fracthqusq (fract A)
   1511  -- Runtime Function: unsigned long long fract __fracthqudq (fract A)
   1512  -- Runtime Function: unsigned short accum __fracthquha (fract A)
   1513  -- Runtime Function: unsigned accum __fracthqusa (fract A)
   1514  -- Runtime Function: unsigned long accum __fracthquda (fract A)
   1515  -- Runtime Function: unsigned long long accum __fracthquta (fract A)
   1516  -- Runtime Function: signed char __fracthqqi (fract A)
   1517  -- Runtime Function: short __fracthqhi (fract A)
   1518  -- Runtime Function: int __fracthqsi (fract A)
   1519  -- Runtime Function: long __fracthqdi (fract A)
   1520  -- Runtime Function: long long __fracthqti (fract A)
   1521  -- Runtime Function: float __fracthqsf (fract A)
   1522  -- Runtime Function: double __fracthqdf (fract A)
   1523  -- Runtime Function: short fract __fractsqqq2 (long fract A)
   1524  -- Runtime Function: fract __fractsqhq2 (long fract A)
   1525  -- Runtime Function: long long fract __fractsqdq2 (long fract A)
   1526  -- Runtime Function: short accum __fractsqha (long fract A)
   1527  -- Runtime Function: accum __fractsqsa (long fract A)
   1528  -- Runtime Function: long accum __fractsqda (long fract A)
   1529  -- Runtime Function: long long accum __fractsqta (long fract A)
   1530  -- Runtime Function: unsigned short fract __fractsquqq (long fract A)
   1531  -- Runtime Function: unsigned fract __fractsquhq (long fract A)
   1532  -- Runtime Function: unsigned long fract __fractsqusq (long fract A)
   1533  -- Runtime Function: unsigned long long fract __fractsqudq (long fract
   1534           A)
   1535  -- Runtime Function: unsigned short accum __fractsquha (long fract A)
   1536  -- Runtime Function: unsigned accum __fractsqusa (long fract A)
   1537  -- Runtime Function: unsigned long accum __fractsquda (long fract A)
   1538  -- Runtime Function: unsigned long long accum __fractsquta (long fract
   1539           A)
   1540  -- Runtime Function: signed char __fractsqqi (long fract A)
   1541  -- Runtime Function: short __fractsqhi (long fract A)
   1542  -- Runtime Function: int __fractsqsi (long fract A)
   1543  -- Runtime Function: long __fractsqdi (long fract A)
   1544  -- Runtime Function: long long __fractsqti (long fract A)
   1545  -- Runtime Function: float __fractsqsf (long fract A)
   1546  -- Runtime Function: double __fractsqdf (long fract A)
   1547  -- Runtime Function: short fract __fractdqqq2 (long long fract A)
   1548  -- Runtime Function: fract __fractdqhq2 (long long fract A)
   1549  -- Runtime Function: long fract __fractdqsq2 (long long fract A)
   1550  -- Runtime Function: short accum __fractdqha (long long fract A)
   1551  -- Runtime Function: accum __fractdqsa (long long fract A)
   1552  -- Runtime Function: long accum __fractdqda (long long fract A)
   1553  -- Runtime Function: long long accum __fractdqta (long long fract A)
   1554  -- Runtime Function: unsigned short fract __fractdquqq (long long
   1555           fract A)
   1556  -- Runtime Function: unsigned fract __fractdquhq (long long fract A)
   1557  -- Runtime Function: unsigned long fract __fractdqusq (long long fract
   1558           A)
   1559  -- Runtime Function: unsigned long long fract __fractdqudq (long long
   1560           fract A)
   1561  -- Runtime Function: unsigned short accum __fractdquha (long long
   1562           fract A)
   1563  -- Runtime Function: unsigned accum __fractdqusa (long long fract A)
   1564  -- Runtime Function: unsigned long accum __fractdquda (long long fract
   1565           A)
   1566  -- Runtime Function: unsigned long long accum __fractdquta (long long
   1567           fract A)
   1568  -- Runtime Function: signed char __fractdqqi (long long fract A)
   1569  -- Runtime Function: short __fractdqhi (long long fract A)
   1570  -- Runtime Function: int __fractdqsi (long long fract A)
   1571  -- Runtime Function: long __fractdqdi (long long fract A)
   1572  -- Runtime Function: long long __fractdqti (long long fract A)
   1573  -- Runtime Function: float __fractdqsf (long long fract A)
   1574  -- Runtime Function: double __fractdqdf (long long fract A)
   1575  -- Runtime Function: short fract __fracthaqq (short accum A)
   1576  -- Runtime Function: fract __fracthahq (short accum A)
   1577  -- Runtime Function: long fract __fracthasq (short accum A)
   1578  -- Runtime Function: long long fract __fracthadq (short accum A)
   1579  -- Runtime Function: accum __fracthasa2 (short accum A)
   1580  -- Runtime Function: long accum __fracthada2 (short accum A)
   1581  -- Runtime Function: long long accum __fracthata2 (short accum A)
   1582  -- Runtime Function: unsigned short fract __fracthauqq (short accum A)
   1583  -- Runtime Function: unsigned fract __fracthauhq (short accum A)
   1584  -- Runtime Function: unsigned long fract __fracthausq (short accum A)
   1585  -- Runtime Function: unsigned long long fract __fracthaudq (short
   1586           accum A)
   1587  -- Runtime Function: unsigned short accum __fracthauha (short accum A)
   1588  -- Runtime Function: unsigned accum __fracthausa (short accum A)
   1589  -- Runtime Function: unsigned long accum __fracthauda (short accum A)
   1590  -- Runtime Function: unsigned long long accum __fracthauta (short
   1591           accum A)
   1592  -- Runtime Function: signed char __fracthaqi (short accum A)
   1593  -- Runtime Function: short __fracthahi (short accum A)
   1594  -- Runtime Function: int __fracthasi (short accum A)
   1595  -- Runtime Function: long __fracthadi (short accum A)
   1596  -- Runtime Function: long long __fracthati (short accum A)
   1597  -- Runtime Function: float __fracthasf (short accum A)
   1598  -- Runtime Function: double __fracthadf (short accum A)
   1599  -- Runtime Function: short fract __fractsaqq (accum A)
   1600  -- Runtime Function: fract __fractsahq (accum A)
   1601  -- Runtime Function: long fract __fractsasq (accum A)
   1602  -- Runtime Function: long long fract __fractsadq (accum A)
   1603  -- Runtime Function: short accum __fractsaha2 (accum A)
   1604  -- Runtime Function: long accum __fractsada2 (accum A)
   1605  -- Runtime Function: long long accum __fractsata2 (accum A)
   1606  -- Runtime Function: unsigned short fract __fractsauqq (accum A)
   1607  -- Runtime Function: unsigned fract __fractsauhq (accum A)
   1608  -- Runtime Function: unsigned long fract __fractsausq (accum A)
   1609  -- Runtime Function: unsigned long long fract __fractsaudq (accum A)
   1610  -- Runtime Function: unsigned short accum __fractsauha (accum A)
   1611  -- Runtime Function: unsigned accum __fractsausa (accum A)
   1612  -- Runtime Function: unsigned long accum __fractsauda (accum A)
   1613  -- Runtime Function: unsigned long long accum __fractsauta (accum A)
   1614  -- Runtime Function: signed char __fractsaqi (accum A)
   1615  -- Runtime Function: short __fractsahi (accum A)
   1616  -- Runtime Function: int __fractsasi (accum A)
   1617  -- Runtime Function: long __fractsadi (accum A)
   1618  -- Runtime Function: long long __fractsati (accum A)
   1619  -- Runtime Function: float __fractsasf (accum A)
   1620  -- Runtime Function: double __fractsadf (accum A)
   1621  -- Runtime Function: short fract __fractdaqq (long accum A)
   1622  -- Runtime Function: fract __fractdahq (long accum A)
   1623  -- Runtime Function: long fract __fractdasq (long accum A)
   1624  -- Runtime Function: long long fract __fractdadq (long accum A)
   1625  -- Runtime Function: short accum __fractdaha2 (long accum A)
   1626  -- Runtime Function: accum __fractdasa2 (long accum A)
   1627  -- Runtime Function: long long accum __fractdata2 (long accum A)
   1628  -- Runtime Function: unsigned short fract __fractdauqq (long accum A)
   1629  -- Runtime Function: unsigned fract __fractdauhq (long accum A)
   1630  -- Runtime Function: unsigned long fract __fractdausq (long accum A)
   1631  -- Runtime Function: unsigned long long fract __fractdaudq (long accum
   1632           A)
   1633  -- Runtime Function: unsigned short accum __fractdauha (long accum A)
   1634  -- Runtime Function: unsigned accum __fractdausa (long accum A)
   1635  -- Runtime Function: unsigned long accum __fractdauda (long accum A)
   1636  -- Runtime Function: unsigned long long accum __fractdauta (long accum
   1637           A)
   1638  -- Runtime Function: signed char __fractdaqi (long accum A)
   1639  -- Runtime Function: short __fractdahi (long accum A)
   1640  -- Runtime Function: int __fractdasi (long accum A)
   1641  -- Runtime Function: long __fractdadi (long accum A)
   1642  -- Runtime Function: long long __fractdati (long accum A)
   1643  -- Runtime Function: float __fractdasf (long accum A)
   1644  -- Runtime Function: double __fractdadf (long accum A)
   1645  -- Runtime Function: short fract __fracttaqq (long long accum A)
   1646  -- Runtime Function: fract __fracttahq (long long accum A)
   1647  -- Runtime Function: long fract __fracttasq (long long accum A)
   1648  -- Runtime Function: long long fract __fracttadq (long long accum A)
   1649  -- Runtime Function: short accum __fracttaha2 (long long accum A)
   1650  -- Runtime Function: accum __fracttasa2 (long long accum A)
   1651  -- Runtime Function: long accum __fracttada2 (long long accum A)
   1652  -- Runtime Function: unsigned short fract __fracttauqq (long long
   1653           accum A)
   1654  -- Runtime Function: unsigned fract __fracttauhq (long long accum A)
   1655  -- Runtime Function: unsigned long fract __fracttausq (long long accum
   1656           A)
   1657  -- Runtime Function: unsigned long long fract __fracttaudq (long long
   1658           accum A)
   1659  -- Runtime Function: unsigned short accum __fracttauha (long long
   1660           accum A)
   1661  -- Runtime Function: unsigned accum __fracttausa (long long accum A)
   1662  -- Runtime Function: unsigned long accum __fracttauda (long long accum
   1663           A)
   1664  -- Runtime Function: unsigned long long accum __fracttauta (long long
   1665           accum A)
   1666  -- Runtime Function: signed char __fracttaqi (long long accum A)
   1667  -- Runtime Function: short __fracttahi (long long accum A)
   1668  -- Runtime Function: int __fracttasi (long long accum A)
   1669  -- Runtime Function: long __fracttadi (long long accum A)
   1670  -- Runtime Function: long long __fracttati (long long accum A)
   1671  -- Runtime Function: float __fracttasf (long long accum A)
   1672  -- Runtime Function: double __fracttadf (long long accum A)
   1673  -- Runtime Function: short fract __fractuqqqq (unsigned short fract A)
   1674  -- Runtime Function: fract __fractuqqhq (unsigned short fract A)
   1675  -- Runtime Function: long fract __fractuqqsq (unsigned short fract A)
   1676  -- Runtime Function: long long fract __fractuqqdq (unsigned short
   1677           fract A)
   1678  -- Runtime Function: short accum __fractuqqha (unsigned short fract A)
   1679  -- Runtime Function: accum __fractuqqsa (unsigned short fract A)
   1680  -- Runtime Function: long accum __fractuqqda (unsigned short fract A)
   1681  -- Runtime Function: long long accum __fractuqqta (unsigned short
   1682           fract A)
   1683  -- Runtime Function: unsigned fract __fractuqquhq2 (unsigned short
   1684           fract A)
   1685  -- Runtime Function: unsigned long fract __fractuqqusq2 (unsigned
   1686           short fract A)
   1687  -- Runtime Function: unsigned long long fract __fractuqqudq2 (unsigned
   1688           short fract A)
   1689  -- Runtime Function: unsigned short accum __fractuqquha (unsigned
   1690           short fract A)
   1691  -- Runtime Function: unsigned accum __fractuqqusa (unsigned short
   1692           fract A)
   1693  -- Runtime Function: unsigned long accum __fractuqquda (unsigned short
   1694           fract A)
   1695  -- Runtime Function: unsigned long long accum __fractuqquta (unsigned
   1696           short fract A)
   1697  -- Runtime Function: signed char __fractuqqqi (unsigned short fract A)
   1698  -- Runtime Function: short __fractuqqhi (unsigned short fract A)
   1699  -- Runtime Function: int __fractuqqsi (unsigned short fract A)
   1700  -- Runtime Function: long __fractuqqdi (unsigned short fract A)
   1701  -- Runtime Function: long long __fractuqqti (unsigned short fract A)
   1702  -- Runtime Function: float __fractuqqsf (unsigned short fract A)
   1703  -- Runtime Function: double __fractuqqdf (unsigned short fract A)
   1704  -- Runtime Function: short fract __fractuhqqq (unsigned fract A)
   1705  -- Runtime Function: fract __fractuhqhq (unsigned fract A)
   1706  -- Runtime Function: long fract __fractuhqsq (unsigned fract A)
   1707  -- Runtime Function: long long fract __fractuhqdq (unsigned fract A)
   1708  -- Runtime Function: short accum __fractuhqha (unsigned fract A)
   1709  -- Runtime Function: accum __fractuhqsa (unsigned fract A)
   1710  -- Runtime Function: long accum __fractuhqda (unsigned fract A)
   1711  -- Runtime Function: long long accum __fractuhqta (unsigned fract A)
   1712  -- Runtime Function: unsigned short fract __fractuhquqq2 (unsigned
   1713           fract A)
   1714  -- Runtime Function: unsigned long fract __fractuhqusq2 (unsigned
   1715           fract A)
   1716  -- Runtime Function: unsigned long long fract __fractuhqudq2 (unsigned
   1717           fract A)
   1718  -- Runtime Function: unsigned short accum __fractuhquha (unsigned
   1719           fract A)
   1720  -- Runtime Function: unsigned accum __fractuhqusa (unsigned fract A)
   1721  -- Runtime Function: unsigned long accum __fractuhquda (unsigned fract
   1722           A)
   1723  -- Runtime Function: unsigned long long accum __fractuhquta (unsigned
   1724           fract A)
   1725  -- Runtime Function: signed char __fractuhqqi (unsigned fract A)
   1726  -- Runtime Function: short __fractuhqhi (unsigned fract A)
   1727  -- Runtime Function: int __fractuhqsi (unsigned fract A)
   1728  -- Runtime Function: long __fractuhqdi (unsigned fract A)
   1729  -- Runtime Function: long long __fractuhqti (unsigned fract A)
   1730  -- Runtime Function: float __fractuhqsf (unsigned fract A)
   1731  -- Runtime Function: double __fractuhqdf (unsigned fract A)
   1732  -- Runtime Function: short fract __fractusqqq (unsigned long fract A)
   1733  -- Runtime Function: fract __fractusqhq (unsigned long fract A)
   1734  -- Runtime Function: long fract __fractusqsq (unsigned long fract A)
   1735  -- Runtime Function: long long fract __fractusqdq (unsigned long fract
   1736           A)
   1737  -- Runtime Function: short accum __fractusqha (unsigned long fract A)
   1738  -- Runtime Function: accum __fractusqsa (unsigned long fract A)
   1739  -- Runtime Function: long accum __fractusqda (unsigned long fract A)
   1740  -- Runtime Function: long long accum __fractusqta (unsigned long fract
   1741           A)
   1742  -- Runtime Function: unsigned short fract __fractusquqq2 (unsigned
   1743           long fract A)
   1744  -- Runtime Function: unsigned fract __fractusquhq2 (unsigned long
   1745           fract A)
   1746  -- Runtime Function: unsigned long long fract __fractusqudq2 (unsigned
   1747           long fract A)
   1748  -- Runtime Function: unsigned short accum __fractusquha (unsigned long
   1749           fract A)
   1750  -- Runtime Function: unsigned accum __fractusqusa (unsigned long fract
   1751           A)
   1752  -- Runtime Function: unsigned long accum __fractusquda (unsigned long
   1753           fract A)
   1754  -- Runtime Function: unsigned long long accum __fractusquta (unsigned
   1755           long fract A)
   1756  -- Runtime Function: signed char __fractusqqi (unsigned long fract A)
   1757  -- Runtime Function: short __fractusqhi (unsigned long fract A)
   1758  -- Runtime Function: int __fractusqsi (unsigned long fract A)
   1759  -- Runtime Function: long __fractusqdi (unsigned long fract A)
   1760  -- Runtime Function: long long __fractusqti (unsigned long fract A)
   1761  -- Runtime Function: float __fractusqsf (unsigned long fract A)
   1762  -- Runtime Function: double __fractusqdf (unsigned long fract A)
   1763  -- Runtime Function: short fract __fractudqqq (unsigned long long
   1764           fract A)
   1765  -- Runtime Function: fract __fractudqhq (unsigned long long fract A)
   1766  -- Runtime Function: long fract __fractudqsq (unsigned long long fract
   1767           A)
   1768  -- Runtime Function: long long fract __fractudqdq (unsigned long long
   1769           fract A)
   1770  -- Runtime Function: short accum __fractudqha (unsigned long long
   1771           fract A)
   1772  -- Runtime Function: accum __fractudqsa (unsigned long long fract A)
   1773  -- Runtime Function: long accum __fractudqda (unsigned long long fract
   1774           A)
   1775  -- Runtime Function: long long accum __fractudqta (unsigned long long
   1776           fract A)
   1777  -- Runtime Function: unsigned short fract __fractudquqq2 (unsigned
   1778           long long fract A)
   1779  -- Runtime Function: unsigned fract __fractudquhq2 (unsigned long long
   1780           fract A)
   1781  -- Runtime Function: unsigned long fract __fractudqusq2 (unsigned long
   1782           long fract A)
   1783  -- Runtime Function: unsigned short accum __fractudquha (unsigned long
   1784           long fract A)
   1785  -- Runtime Function: unsigned accum __fractudqusa (unsigned long long
   1786           fract A)
   1787  -- Runtime Function: unsigned long accum __fractudquda (unsigned long
   1788           long fract A)
   1789  -- Runtime Function: unsigned long long accum __fractudquta (unsigned
   1790           long long fract A)
   1791  -- Runtime Function: signed char __fractudqqi (unsigned long long
   1792           fract A)
   1793  -- Runtime Function: short __fractudqhi (unsigned long long fract A)
   1794  -- Runtime Function: int __fractudqsi (unsigned long long fract A)
   1795  -- Runtime Function: long __fractudqdi (unsigned long long fract A)
   1796  -- Runtime Function: long long __fractudqti (unsigned long long fract
   1797           A)
   1798  -- Runtime Function: float __fractudqsf (unsigned long long fract A)
   1799  -- Runtime Function: double __fractudqdf (unsigned long long fract A)
   1800  -- Runtime Function: short fract __fractuhaqq (unsigned short accum A)
   1801  -- Runtime Function: fract __fractuhahq (unsigned short accum A)
   1802  -- Runtime Function: long fract __fractuhasq (unsigned short accum A)
   1803  -- Runtime Function: long long fract __fractuhadq (unsigned short
   1804           accum A)
   1805  -- Runtime Function: short accum __fractuhaha (unsigned short accum A)
   1806  -- Runtime Function: accum __fractuhasa (unsigned short accum A)
   1807  -- Runtime Function: long accum __fractuhada (unsigned short accum A)
   1808  -- Runtime Function: long long accum __fractuhata (unsigned short
   1809           accum A)
   1810  -- Runtime Function: unsigned short fract __fractuhauqq (unsigned
   1811           short accum A)
   1812  -- Runtime Function: unsigned fract __fractuhauhq (unsigned short
   1813           accum A)
   1814  -- Runtime Function: unsigned long fract __fractuhausq (unsigned short
   1815           accum A)
   1816  -- Runtime Function: unsigned long long fract __fractuhaudq (unsigned
   1817           short accum A)
   1818  -- Runtime Function: unsigned accum __fractuhausa2 (unsigned short
   1819           accum A)
   1820  -- Runtime Function: unsigned long accum __fractuhauda2 (unsigned
   1821           short accum A)
   1822  -- Runtime Function: unsigned long long accum __fractuhauta2 (unsigned
   1823           short accum A)
   1824  -- Runtime Function: signed char __fractuhaqi (unsigned short accum A)
   1825  -- Runtime Function: short __fractuhahi (unsigned short accum A)
   1826  -- Runtime Function: int __fractuhasi (unsigned short accum A)
   1827  -- Runtime Function: long __fractuhadi (unsigned short accum A)
   1828  -- Runtime Function: long long __fractuhati (unsigned short accum A)
   1829  -- Runtime Function: float __fractuhasf (unsigned short accum A)
   1830  -- Runtime Function: double __fractuhadf (unsigned short accum A)
   1831  -- Runtime Function: short fract __fractusaqq (unsigned accum A)
   1832  -- Runtime Function: fract __fractusahq (unsigned accum A)
   1833  -- Runtime Function: long fract __fractusasq (unsigned accum A)
   1834  -- Runtime Function: long long fract __fractusadq (unsigned accum A)
   1835  -- Runtime Function: short accum __fractusaha (unsigned accum A)
   1836  -- Runtime Function: accum __fractusasa (unsigned accum A)
   1837  -- Runtime Function: long accum __fractusada (unsigned accum A)
   1838  -- Runtime Function: long long accum __fractusata (unsigned accum A)
   1839  -- Runtime Function: unsigned short fract __fractusauqq (unsigned
   1840           accum A)
   1841  -- Runtime Function: unsigned fract __fractusauhq (unsigned accum A)
   1842  -- Runtime Function: unsigned long fract __fractusausq (unsigned accum
   1843           A)
   1844  -- Runtime Function: unsigned long long fract __fractusaudq (unsigned
   1845           accum A)
   1846  -- Runtime Function: unsigned short accum __fractusauha2 (unsigned
   1847           accum A)
   1848  -- Runtime Function: unsigned long accum __fractusauda2 (unsigned
   1849           accum A)
   1850  -- Runtime Function: unsigned long long accum __fractusauta2 (unsigned
   1851           accum A)
   1852  -- Runtime Function: signed char __fractusaqi (unsigned accum A)
   1853  -- Runtime Function: short __fractusahi (unsigned accum A)
   1854  -- Runtime Function: int __fractusasi (unsigned accum A)
   1855  -- Runtime Function: long __fractusadi (unsigned accum A)
   1856  -- Runtime Function: long long __fractusati (unsigned accum A)
   1857  -- Runtime Function: float __fractusasf (unsigned accum A)
   1858  -- Runtime Function: double __fractusadf (unsigned accum A)
   1859  -- Runtime Function: short fract __fractudaqq (unsigned long accum A)
   1860  -- Runtime Function: fract __fractudahq (unsigned long accum A)
   1861  -- Runtime Function: long fract __fractudasq (unsigned long accum A)
   1862  -- Runtime Function: long long fract __fractudadq (unsigned long accum
   1863           A)
   1864  -- Runtime Function: short accum __fractudaha (unsigned long accum A)
   1865  -- Runtime Function: accum __fractudasa (unsigned long accum A)
   1866  -- Runtime Function: long accum __fractudada (unsigned long accum A)
   1867  -- Runtime Function: long long accum __fractudata (unsigned long accum
   1868           A)
   1869  -- Runtime Function: unsigned short fract __fractudauqq (unsigned long
   1870           accum A)
   1871  -- Runtime Function: unsigned fract __fractudauhq (unsigned long accum
   1872           A)
   1873  -- Runtime Function: unsigned long fract __fractudausq (unsigned long
   1874           accum A)
   1875  -- Runtime Function: unsigned long long fract __fractudaudq (unsigned
   1876           long accum A)
   1877  -- Runtime Function: unsigned short accum __fractudauha2 (unsigned
   1878           long accum A)
   1879  -- Runtime Function: unsigned accum __fractudausa2 (unsigned long
   1880           accum A)
   1881  -- Runtime Function: unsigned long long accum __fractudauta2 (unsigned
   1882           long accum A)
   1883  -- Runtime Function: signed char __fractudaqi (unsigned long accum A)
   1884  -- Runtime Function: short __fractudahi (unsigned long accum A)
   1885  -- Runtime Function: int __fractudasi (unsigned long accum A)
   1886  -- Runtime Function: long __fractudadi (unsigned long accum A)
   1887  -- Runtime Function: long long __fractudati (unsigned long accum A)
   1888  -- Runtime Function: float __fractudasf (unsigned long accum A)
   1889  -- Runtime Function: double __fractudadf (unsigned long accum A)
   1890  -- Runtime Function: short fract __fractutaqq (unsigned long long
   1891           accum A)
   1892  -- Runtime Function: fract __fractutahq (unsigned long long accum A)
   1893  -- Runtime Function: long fract __fractutasq (unsigned long long accum
   1894           A)
   1895  -- Runtime Function: long long fract __fractutadq (unsigned long long
   1896           accum A)
   1897  -- Runtime Function: short accum __fractutaha (unsigned long long
   1898           accum A)
   1899  -- Runtime Function: accum __fractutasa (unsigned long long accum A)
   1900  -- Runtime Function: long accum __fractutada (unsigned long long accum
   1901           A)
   1902  -- Runtime Function: long long accum __fractutata (unsigned long long
   1903           accum A)
   1904  -- Runtime Function: unsigned short fract __fractutauqq (unsigned long
   1905           long accum A)
   1906  -- Runtime Function: unsigned fract __fractutauhq (unsigned long long
   1907           accum A)
   1908  -- Runtime Function: unsigned long fract __fractutausq (unsigned long
   1909           long accum A)
   1910  -- Runtime Function: unsigned long long fract __fractutaudq (unsigned
   1911           long long accum A)
   1912  -- Runtime Function: unsigned short accum __fractutauha2 (unsigned
   1913           long long accum A)
   1914  -- Runtime Function: unsigned accum __fractutausa2 (unsigned long long
   1915           accum A)
   1916  -- Runtime Function: unsigned long accum __fractutauda2 (unsigned long
   1917           long accum A)
   1918  -- Runtime Function: signed char __fractutaqi (unsigned long long
   1919           accum A)
   1920  -- Runtime Function: short __fractutahi (unsigned long long accum A)
   1921  -- Runtime Function: int __fractutasi (unsigned long long accum A)
   1922  -- Runtime Function: long __fractutadi (unsigned long long accum A)
   1923  -- Runtime Function: long long __fractutati (unsigned long long accum
   1924           A)
   1925  -- Runtime Function: float __fractutasf (unsigned long long accum A)
   1926  -- Runtime Function: double __fractutadf (unsigned long long accum A)
   1927  -- Runtime Function: short fract __fractqiqq (signed char A)
   1928  -- Runtime Function: fract __fractqihq (signed char A)
   1929  -- Runtime Function: long fract __fractqisq (signed char A)
   1930  -- Runtime Function: long long fract __fractqidq (signed char A)
   1931  -- Runtime Function: short accum __fractqiha (signed char A)
   1932  -- Runtime Function: accum __fractqisa (signed char A)
   1933  -- Runtime Function: long accum __fractqida (signed char A)
   1934  -- Runtime Function: long long accum __fractqita (signed char A)
   1935  -- Runtime Function: unsigned short fract __fractqiuqq (signed char A)
   1936  -- Runtime Function: unsigned fract __fractqiuhq (signed char A)
   1937  -- Runtime Function: unsigned long fract __fractqiusq (signed char A)
   1938  -- Runtime Function: unsigned long long fract __fractqiudq (signed
   1939           char A)
   1940  -- Runtime Function: unsigned short accum __fractqiuha (signed char A)
   1941  -- Runtime Function: unsigned accum __fractqiusa (signed char A)
   1942  -- Runtime Function: unsigned long accum __fractqiuda (signed char A)
   1943  -- Runtime Function: unsigned long long accum __fractqiuta (signed
   1944           char A)
   1945  -- Runtime Function: short fract __fracthiqq (short A)
   1946  -- Runtime Function: fract __fracthihq (short A)
   1947  -- Runtime Function: long fract __fracthisq (short A)
   1948  -- Runtime Function: long long fract __fracthidq (short A)
   1949  -- Runtime Function: short accum __fracthiha (short A)
   1950  -- Runtime Function: accum __fracthisa (short A)
   1951  -- Runtime Function: long accum __fracthida (short A)
   1952  -- Runtime Function: long long accum __fracthita (short A)
   1953  -- Runtime Function: unsigned short fract __fracthiuqq (short A)
   1954  -- Runtime Function: unsigned fract __fracthiuhq (short A)
   1955  -- Runtime Function: unsigned long fract __fracthiusq (short A)
   1956  -- Runtime Function: unsigned long long fract __fracthiudq (short A)
   1957  -- Runtime Function: unsigned short accum __fracthiuha (short A)
   1958  -- Runtime Function: unsigned accum __fracthiusa (short A)
   1959  -- Runtime Function: unsigned long accum __fracthiuda (short A)
   1960  -- Runtime Function: unsigned long long accum __fracthiuta (short A)
   1961  -- Runtime Function: short fract __fractsiqq (int A)
   1962  -- Runtime Function: fract __fractsihq (int A)
   1963  -- Runtime Function: long fract __fractsisq (int A)
   1964  -- Runtime Function: long long fract __fractsidq (int A)
   1965  -- Runtime Function: short accum __fractsiha (int A)
   1966  -- Runtime Function: accum __fractsisa (int A)
   1967  -- Runtime Function: long accum __fractsida (int A)
   1968  -- Runtime Function: long long accum __fractsita (int A)
   1969  -- Runtime Function: unsigned short fract __fractsiuqq (int A)
   1970  -- Runtime Function: unsigned fract __fractsiuhq (int A)
   1971  -- Runtime Function: unsigned long fract __fractsiusq (int A)
   1972  -- Runtime Function: unsigned long long fract __fractsiudq (int A)
   1973  -- Runtime Function: unsigned short accum __fractsiuha (int A)
   1974  -- Runtime Function: unsigned accum __fractsiusa (int A)
   1975  -- Runtime Function: unsigned long accum __fractsiuda (int A)
   1976  -- Runtime Function: unsigned long long accum __fractsiuta (int A)
   1977  -- Runtime Function: short fract __fractdiqq (long A)
   1978  -- Runtime Function: fract __fractdihq (long A)
   1979  -- Runtime Function: long fract __fractdisq (long A)
   1980  -- Runtime Function: long long fract __fractdidq (long A)
   1981  -- Runtime Function: short accum __fractdiha (long A)
   1982  -- Runtime Function: accum __fractdisa (long A)
   1983  -- Runtime Function: long accum __fractdida (long A)
   1984  -- Runtime Function: long long accum __fractdita (long A)
   1985  -- Runtime Function: unsigned short fract __fractdiuqq (long A)
   1986  -- Runtime Function: unsigned fract __fractdiuhq (long A)
   1987  -- Runtime Function: unsigned long fract __fractdiusq (long A)
   1988  -- Runtime Function: unsigned long long fract __fractdiudq (long A)
   1989  -- Runtime Function: unsigned short accum __fractdiuha (long A)
   1990  -- Runtime Function: unsigned accum __fractdiusa (long A)
   1991  -- Runtime Function: unsigned long accum __fractdiuda (long A)
   1992  -- Runtime Function: unsigned long long accum __fractdiuta (long A)
   1993  -- Runtime Function: short fract __fracttiqq (long long A)
   1994  -- Runtime Function: fract __fracttihq (long long A)
   1995  -- Runtime Function: long fract __fracttisq (long long A)
   1996  -- Runtime Function: long long fract __fracttidq (long long A)
   1997  -- Runtime Function: short accum __fracttiha (long long A)
   1998  -- Runtime Function: accum __fracttisa (long long A)
   1999  -- Runtime Function: long accum __fracttida (long long A)
   2000  -- Runtime Function: long long accum __fracttita (long long A)
   2001  -- Runtime Function: unsigned short fract __fracttiuqq (long long A)
   2002  -- Runtime Function: unsigned fract __fracttiuhq (long long A)
   2003  -- Runtime Function: unsigned long fract __fracttiusq (long long A)
   2004  -- Runtime Function: unsigned long long fract __fracttiudq (long long
   2005           A)
   2006  -- Runtime Function: unsigned short accum __fracttiuha (long long A)
   2007  -- Runtime Function: unsigned accum __fracttiusa (long long A)
   2008  -- Runtime Function: unsigned long accum __fracttiuda (long long A)
   2009  -- Runtime Function: unsigned long long accum __fracttiuta (long long
   2010           A)
   2011  -- Runtime Function: short fract __fractsfqq (float A)
   2012  -- Runtime Function: fract __fractsfhq (float A)
   2013  -- Runtime Function: long fract __fractsfsq (float A)
   2014  -- Runtime Function: long long fract __fractsfdq (float A)
   2015  -- Runtime Function: short accum __fractsfha (float A)
   2016  -- Runtime Function: accum __fractsfsa (float A)
   2017  -- Runtime Function: long accum __fractsfda (float A)
   2018  -- Runtime Function: long long accum __fractsfta (float A)
   2019  -- Runtime Function: unsigned short fract __fractsfuqq (float A)
   2020  -- Runtime Function: unsigned fract __fractsfuhq (float A)
   2021  -- Runtime Function: unsigned long fract __fractsfusq (float A)
   2022  -- Runtime Function: unsigned long long fract __fractsfudq (float A)
   2023  -- Runtime Function: unsigned short accum __fractsfuha (float A)
   2024  -- Runtime Function: unsigned accum __fractsfusa (float A)
   2025  -- Runtime Function: unsigned long accum __fractsfuda (float A)
   2026  -- Runtime Function: unsigned long long accum __fractsfuta (float A)
   2027  -- Runtime Function: short fract __fractdfqq (double A)
   2028  -- Runtime Function: fract __fractdfhq (double A)
   2029  -- Runtime Function: long fract __fractdfsq (double A)
   2030  -- Runtime Function: long long fract __fractdfdq (double A)
   2031  -- Runtime Function: short accum __fractdfha (double A)
   2032  -- Runtime Function: accum __fractdfsa (double A)
   2033  -- Runtime Function: long accum __fractdfda (double A)
   2034  -- Runtime Function: long long accum __fractdfta (double A)
   2035  -- Runtime Function: unsigned short fract __fractdfuqq (double A)
   2036  -- Runtime Function: unsigned fract __fractdfuhq (double A)
   2037  -- Runtime Function: unsigned long fract __fractdfusq (double A)
   2038  -- Runtime Function: unsigned long long fract __fractdfudq (double A)
   2039  -- Runtime Function: unsigned short accum __fractdfuha (double A)
   2040  -- Runtime Function: unsigned accum __fractdfusa (double A)
   2041  -- Runtime Function: unsigned long accum __fractdfuda (double A)
   2042  -- Runtime Function: unsigned long long accum __fractdfuta (double A)
   2043      These functions convert from fractional and signed non-fractionals
   2044      to fractionals and signed non-fractionals, without saturation.
   2045 
   2046  -- Runtime Function: fract __satfractqqhq2 (short fract A)
   2047  -- Runtime Function: long fract __satfractqqsq2 (short fract A)
   2048  -- Runtime Function: long long fract __satfractqqdq2 (short fract A)
   2049  -- Runtime Function: short accum __satfractqqha (short fract A)
   2050  -- Runtime Function: accum __satfractqqsa (short fract A)
   2051  -- Runtime Function: long accum __satfractqqda (short fract A)
   2052  -- Runtime Function: long long accum __satfractqqta (short fract A)
   2053  -- Runtime Function: unsigned short fract __satfractqquqq (short fract
   2054           A)
   2055  -- Runtime Function: unsigned fract __satfractqquhq (short fract A)
   2056  -- Runtime Function: unsigned long fract __satfractqqusq (short fract
   2057           A)
   2058  -- Runtime Function: unsigned long long fract __satfractqqudq (short
   2059           fract A)
   2060  -- Runtime Function: unsigned short accum __satfractqquha (short fract
   2061           A)
   2062  -- Runtime Function: unsigned accum __satfractqqusa (short fract A)
   2063  -- Runtime Function: unsigned long accum __satfractqquda (short fract
   2064           A)
   2065  -- Runtime Function: unsigned long long accum __satfractqquta (short
   2066           fract A)
   2067  -- Runtime Function: short fract __satfracthqqq2 (fract A)
   2068  -- Runtime Function: long fract __satfracthqsq2 (fract A)
   2069  -- Runtime Function: long long fract __satfracthqdq2 (fract A)
   2070  -- Runtime Function: short accum __satfracthqha (fract A)
   2071  -- Runtime Function: accum __satfracthqsa (fract A)
   2072  -- Runtime Function: long accum __satfracthqda (fract A)
   2073  -- Runtime Function: long long accum __satfracthqta (fract A)
   2074  -- Runtime Function: unsigned short fract __satfracthquqq (fract A)
   2075  -- Runtime Function: unsigned fract __satfracthquhq (fract A)
   2076  -- Runtime Function: unsigned long fract __satfracthqusq (fract A)
   2077  -- Runtime Function: unsigned long long fract __satfracthqudq (fract A)
   2078  -- Runtime Function: unsigned short accum __satfracthquha (fract A)
   2079  -- Runtime Function: unsigned accum __satfracthqusa (fract A)
   2080  -- Runtime Function: unsigned long accum __satfracthquda (fract A)
   2081  -- Runtime Function: unsigned long long accum __satfracthquta (fract A)
   2082  -- Runtime Function: short fract __satfractsqqq2 (long fract A)
   2083  -- Runtime Function: fract __satfractsqhq2 (long fract A)
   2084  -- Runtime Function: long long fract __satfractsqdq2 (long fract A)
   2085  -- Runtime Function: short accum __satfractsqha (long fract A)
   2086  -- Runtime Function: accum __satfractsqsa (long fract A)
   2087  -- Runtime Function: long accum __satfractsqda (long fract A)
   2088  -- Runtime Function: long long accum __satfractsqta (long fract A)
   2089  -- Runtime Function: unsigned short fract __satfractsquqq (long fract
   2090           A)
   2091  -- Runtime Function: unsigned fract __satfractsquhq (long fract A)
   2092  -- Runtime Function: unsigned long fract __satfractsqusq (long fract A)
   2093  -- Runtime Function: unsigned long long fract __satfractsqudq (long
   2094           fract A)
   2095  -- Runtime Function: unsigned short accum __satfractsquha (long fract
   2096           A)
   2097  -- Runtime Function: unsigned accum __satfractsqusa (long fract A)
   2098  -- Runtime Function: unsigned long accum __satfractsquda (long fract A)
   2099  -- Runtime Function: unsigned long long accum __satfractsquta (long
   2100           fract A)
   2101  -- Runtime Function: short fract __satfractdqqq2 (long long fract A)
   2102  -- Runtime Function: fract __satfractdqhq2 (long long fract A)
   2103  -- Runtime Function: long fract __satfractdqsq2 (long long fract A)
   2104  -- Runtime Function: short accum __satfractdqha (long long fract A)
   2105  -- Runtime Function: accum __satfractdqsa (long long fract A)
   2106  -- Runtime Function: long accum __satfractdqda (long long fract A)
   2107  -- Runtime Function: long long accum __satfractdqta (long long fract A)
   2108  -- Runtime Function: unsigned short fract __satfractdquqq (long long
   2109           fract A)
   2110  -- Runtime Function: unsigned fract __satfractdquhq (long long fract A)
   2111  -- Runtime Function: unsigned long fract __satfractdqusq (long long
   2112           fract A)
   2113  -- Runtime Function: unsigned long long fract __satfractdqudq (long
   2114           long fract A)
   2115  -- Runtime Function: unsigned short accum __satfractdquha (long long
   2116           fract A)
   2117  -- Runtime Function: unsigned accum __satfractdqusa (long long fract A)
   2118  -- Runtime Function: unsigned long accum __satfractdquda (long long
   2119           fract A)
   2120  -- Runtime Function: unsigned long long accum __satfractdquta (long
   2121           long fract A)
   2122  -- Runtime Function: short fract __satfracthaqq (short accum A)
   2123  -- Runtime Function: fract __satfracthahq (short accum A)
   2124  -- Runtime Function: long fract __satfracthasq (short accum A)
   2125  -- Runtime Function: long long fract __satfracthadq (short accum A)
   2126  -- Runtime Function: accum __satfracthasa2 (short accum A)
   2127  -- Runtime Function: long accum __satfracthada2 (short accum A)
   2128  -- Runtime Function: long long accum __satfracthata2 (short accum A)
   2129  -- Runtime Function: unsigned short fract __satfracthauqq (short accum
   2130           A)
   2131  -- Runtime Function: unsigned fract __satfracthauhq (short accum A)
   2132  -- Runtime Function: unsigned long fract __satfracthausq (short accum
   2133           A)
   2134  -- Runtime Function: unsigned long long fract __satfracthaudq (short
   2135           accum A)
   2136  -- Runtime Function: unsigned short accum __satfracthauha (short accum
   2137           A)
   2138  -- Runtime Function: unsigned accum __satfracthausa (short accum A)
   2139  -- Runtime Function: unsigned long accum __satfracthauda (short accum
   2140           A)
   2141  -- Runtime Function: unsigned long long accum __satfracthauta (short
   2142           accum A)
   2143  -- Runtime Function: short fract __satfractsaqq (accum A)
   2144  -- Runtime Function: fract __satfractsahq (accum A)
   2145  -- Runtime Function: long fract __satfractsasq (accum A)
   2146  -- Runtime Function: long long fract __satfractsadq (accum A)
   2147  -- Runtime Function: short accum __satfractsaha2 (accum A)
   2148  -- Runtime Function: long accum __satfractsada2 (accum A)
   2149  -- Runtime Function: long long accum __satfractsata2 (accum A)
   2150  -- Runtime Function: unsigned short fract __satfractsauqq (accum A)
   2151  -- Runtime Function: unsigned fract __satfractsauhq (accum A)
   2152  -- Runtime Function: unsigned long fract __satfractsausq (accum A)
   2153  -- Runtime Function: unsigned long long fract __satfractsaudq (accum A)
   2154  -- Runtime Function: unsigned short accum __satfractsauha (accum A)
   2155  -- Runtime Function: unsigned accum __satfractsausa (accum A)
   2156  -- Runtime Function: unsigned long accum __satfractsauda (accum A)
   2157  -- Runtime Function: unsigned long long accum __satfractsauta (accum A)
   2158  -- Runtime Function: short fract __satfractdaqq (long accum A)
   2159  -- Runtime Function: fract __satfractdahq (long accum A)
   2160  -- Runtime Function: long fract __satfractdasq (long accum A)
   2161  -- Runtime Function: long long fract __satfractdadq (long accum A)
   2162  -- Runtime Function: short accum __satfractdaha2 (long accum A)
   2163  -- Runtime Function: accum __satfractdasa2 (long accum A)
   2164  -- Runtime Function: long long accum __satfractdata2 (long accum A)
   2165  -- Runtime Function: unsigned short fract __satfractdauqq (long accum
   2166           A)
   2167  -- Runtime Function: unsigned fract __satfractdauhq (long accum A)
   2168  -- Runtime Function: unsigned long fract __satfractdausq (long accum A)
   2169  -- Runtime Function: unsigned long long fract __satfractdaudq (long
   2170           accum A)
   2171  -- Runtime Function: unsigned short accum __satfractdauha (long accum
   2172           A)
   2173  -- Runtime Function: unsigned accum __satfractdausa (long accum A)
   2174  -- Runtime Function: unsigned long accum __satfractdauda (long accum A)
   2175  -- Runtime Function: unsigned long long accum __satfractdauta (long
   2176           accum A)
   2177  -- Runtime Function: short fract __satfracttaqq (long long accum A)
   2178  -- Runtime Function: fract __satfracttahq (long long accum A)
   2179  -- Runtime Function: long fract __satfracttasq (long long accum A)
   2180  -- Runtime Function: long long fract __satfracttadq (long long accum A)
   2181  -- Runtime Function: short accum __satfracttaha2 (long long accum A)
   2182  -- Runtime Function: accum __satfracttasa2 (long long accum A)
   2183  -- Runtime Function: long accum __satfracttada2 (long long accum A)
   2184  -- Runtime Function: unsigned short fract __satfracttauqq (long long
   2185           accum A)
   2186  -- Runtime Function: unsigned fract __satfracttauhq (long long accum A)
   2187  -- Runtime Function: unsigned long fract __satfracttausq (long long
   2188           accum A)
   2189  -- Runtime Function: unsigned long long fract __satfracttaudq (long
   2190           long accum A)
   2191  -- Runtime Function: unsigned short accum __satfracttauha (long long
   2192           accum A)
   2193  -- Runtime Function: unsigned accum __satfracttausa (long long accum A)
   2194  -- Runtime Function: unsigned long accum __satfracttauda (long long
   2195           accum A)
   2196  -- Runtime Function: unsigned long long accum __satfracttauta (long
   2197           long accum A)
   2198  -- Runtime Function: short fract __satfractuqqqq (unsigned short fract
   2199           A)
   2200  -- Runtime Function: fract __satfractuqqhq (unsigned short fract A)
   2201  -- Runtime Function: long fract __satfractuqqsq (unsigned short fract
   2202           A)
   2203  -- Runtime Function: long long fract __satfractuqqdq (unsigned short
   2204           fract A)
   2205  -- Runtime Function: short accum __satfractuqqha (unsigned short fract
   2206           A)
   2207  -- Runtime Function: accum __satfractuqqsa (unsigned short fract A)
   2208  -- Runtime Function: long accum __satfractuqqda (unsigned short fract
   2209           A)
   2210  -- Runtime Function: long long accum __satfractuqqta (unsigned short
   2211           fract A)
   2212  -- Runtime Function: unsigned fract __satfractuqquhq2 (unsigned short
   2213           fract A)
   2214  -- Runtime Function: unsigned long fract __satfractuqqusq2 (unsigned
   2215           short fract A)
   2216  -- Runtime Function: unsigned long long fract __satfractuqqudq2
   2217           (unsigned short fract A)
   2218  -- Runtime Function: unsigned short accum __satfractuqquha (unsigned
   2219           short fract A)
   2220  -- Runtime Function: unsigned accum __satfractuqqusa (unsigned short
   2221           fract A)
   2222  -- Runtime Function: unsigned long accum __satfractuqquda (unsigned
   2223           short fract A)
   2224  -- Runtime Function: unsigned long long accum __satfractuqquta
   2225           (unsigned short fract A)
   2226  -- Runtime Function: short fract __satfractuhqqq (unsigned fract A)
   2227  -- Runtime Function: fract __satfractuhqhq (unsigned fract A)
   2228  -- Runtime Function: long fract __satfractuhqsq (unsigned fract A)
   2229  -- Runtime Function: long long fract __satfractuhqdq (unsigned fract A)
   2230  -- Runtime Function: short accum __satfractuhqha (unsigned fract A)
   2231  -- Runtime Function: accum __satfractuhqsa (unsigned fract A)
   2232  -- Runtime Function: long accum __satfractuhqda (unsigned fract A)
   2233  -- Runtime Function: long long accum __satfractuhqta (unsigned fract A)
   2234  -- Runtime Function: unsigned short fract __satfractuhquqq2 (unsigned
   2235           fract A)
   2236  -- Runtime Function: unsigned long fract __satfractuhqusq2 (unsigned
   2237           fract A)
   2238  -- Runtime Function: unsigned long long fract __satfractuhqudq2
   2239           (unsigned fract A)
   2240  -- Runtime Function: unsigned short accum __satfractuhquha (unsigned
   2241           fract A)
   2242  -- Runtime Function: unsigned accum __satfractuhqusa (unsigned fract A)
   2243  -- Runtime Function: unsigned long accum __satfractuhquda (unsigned
   2244           fract A)
   2245  -- Runtime Function: unsigned long long accum __satfractuhquta
   2246           (unsigned fract A)
   2247  -- Runtime Function: short fract __satfractusqqq (unsigned long fract
   2248           A)
   2249  -- Runtime Function: fract __satfractusqhq (unsigned long fract A)
   2250  -- Runtime Function: long fract __satfractusqsq (unsigned long fract A)
   2251  -- Runtime Function: long long fract __satfractusqdq (unsigned long
   2252           fract A)
   2253  -- Runtime Function: short accum __satfractusqha (unsigned long fract
   2254           A)
   2255  -- Runtime Function: accum __satfractusqsa (unsigned long fract A)
   2256  -- Runtime Function: long accum __satfractusqda (unsigned long fract A)
   2257  -- Runtime Function: long long accum __satfractusqta (unsigned long
   2258           fract A)
   2259  -- Runtime Function: unsigned short fract __satfractusquqq2 (unsigned
   2260           long fract A)
   2261  -- Runtime Function: unsigned fract __satfractusquhq2 (unsigned long
   2262           fract A)
   2263  -- Runtime Function: unsigned long long fract __satfractusqudq2
   2264           (unsigned long fract A)
   2265  -- Runtime Function: unsigned short accum __satfractusquha (unsigned
   2266           long fract A)
   2267  -- Runtime Function: unsigned accum __satfractusqusa (unsigned long
   2268           fract A)
   2269  -- Runtime Function: unsigned long accum __satfractusquda (unsigned
   2270           long fract A)
   2271  -- Runtime Function: unsigned long long accum __satfractusquta
   2272           (unsigned long fract A)
   2273  -- Runtime Function: short fract __satfractudqqq (unsigned long long
   2274           fract A)
   2275  -- Runtime Function: fract __satfractudqhq (unsigned long long fract A)
   2276  -- Runtime Function: long fract __satfractudqsq (unsigned long long
   2277           fract A)
   2278  -- Runtime Function: long long fract __satfractudqdq (unsigned long
   2279           long fract A)
   2280  -- Runtime Function: short accum __satfractudqha (unsigned long long
   2281           fract A)
   2282  -- Runtime Function: accum __satfractudqsa (unsigned long long fract A)
   2283  -- Runtime Function: long accum __satfractudqda (unsigned long long
   2284           fract A)
   2285  -- Runtime Function: long long accum __satfractudqta (unsigned long
   2286           long fract A)
   2287  -- Runtime Function: unsigned short fract __satfractudquqq2 (unsigned
   2288           long long fract A)
   2289  -- Runtime Function: unsigned fract __satfractudquhq2 (unsigned long
   2290           long fract A)
   2291  -- Runtime Function: unsigned long fract __satfractudqusq2 (unsigned
   2292           long long fract A)
   2293  -- Runtime Function: unsigned short accum __satfractudquha (unsigned
   2294           long long fract A)
   2295  -- Runtime Function: unsigned accum __satfractudqusa (unsigned long
   2296           long fract A)
   2297  -- Runtime Function: unsigned long accum __satfractudquda (unsigned
   2298           long long fract A)
   2299  -- Runtime Function: unsigned long long accum __satfractudquta
   2300           (unsigned long long fract A)
   2301  -- Runtime Function: short fract __satfractuhaqq (unsigned short accum
   2302           A)
   2303  -- Runtime Function: fract __satfractuhahq (unsigned short accum A)
   2304  -- Runtime Function: long fract __satfractuhasq (unsigned short accum
   2305           A)
   2306  -- Runtime Function: long long fract __satfractuhadq (unsigned short
   2307           accum A)
   2308  -- Runtime Function: short accum __satfractuhaha (unsigned short accum
   2309           A)
   2310  -- Runtime Function: accum __satfractuhasa (unsigned short accum A)
   2311  -- Runtime Function: long accum __satfractuhada (unsigned short accum
   2312           A)
   2313  -- Runtime Function: long long accum __satfractuhata (unsigned short
   2314           accum A)
   2315  -- Runtime Function: unsigned short fract __satfractuhauqq (unsigned
   2316           short accum A)
   2317  -- Runtime Function: unsigned fract __satfractuhauhq (unsigned short
   2318           accum A)
   2319  -- Runtime Function: unsigned long fract __satfractuhausq (unsigned
   2320           short accum A)
   2321  -- Runtime Function: unsigned long long fract __satfractuhaudq
   2322           (unsigned short accum A)
   2323  -- Runtime Function: unsigned accum __satfractuhausa2 (unsigned short
   2324           accum A)
   2325  -- Runtime Function: unsigned long accum __satfractuhauda2 (unsigned
   2326           short accum A)
   2327  -- Runtime Function: unsigned long long accum __satfractuhauta2
   2328           (unsigned short accum A)
   2329  -- Runtime Function: short fract __satfractusaqq (unsigned accum A)
   2330  -- Runtime Function: fract __satfractusahq (unsigned accum A)
   2331  -- Runtime Function: long fract __satfractusasq (unsigned accum A)
   2332  -- Runtime Function: long long fract __satfractusadq (unsigned accum A)
   2333  -- Runtime Function: short accum __satfractusaha (unsigned accum A)
   2334  -- Runtime Function: accum __satfractusasa (unsigned accum A)
   2335  -- Runtime Function: long accum __satfractusada (unsigned accum A)
   2336  -- Runtime Function: long long accum __satfractusata (unsigned accum A)
   2337  -- Runtime Function: unsigned short fract __satfractusauqq (unsigned
   2338           accum A)
   2339  -- Runtime Function: unsigned fract __satfractusauhq (unsigned accum A)
   2340  -- Runtime Function: unsigned long fract __satfractusausq (unsigned
   2341           accum A)
   2342  -- Runtime Function: unsigned long long fract __satfractusaudq
   2343           (unsigned accum A)
   2344  -- Runtime Function: unsigned short accum __satfractusauha2 (unsigned
   2345           accum A)
   2346  -- Runtime Function: unsigned long accum __satfractusauda2 (unsigned
   2347           accum A)
   2348  -- Runtime Function: unsigned long long accum __satfractusauta2
   2349           (unsigned accum A)
   2350  -- Runtime Function: short fract __satfractudaqq (unsigned long accum
   2351           A)
   2352  -- Runtime Function: fract __satfractudahq (unsigned long accum A)
   2353  -- Runtime Function: long fract __satfractudasq (unsigned long accum A)
   2354  -- Runtime Function: long long fract __satfractudadq (unsigned long
   2355           accum A)
   2356  -- Runtime Function: short accum __satfractudaha (unsigned long accum
   2357           A)
   2358  -- Runtime Function: accum __satfractudasa (unsigned long accum A)
   2359  -- Runtime Function: long accum __satfractudada (unsigned long accum A)
   2360  -- Runtime Function: long long accum __satfractudata (unsigned long
   2361           accum A)
   2362  -- Runtime Function: unsigned short fract __satfractudauqq (unsigned
   2363           long accum A)
   2364  -- Runtime Function: unsigned fract __satfractudauhq (unsigned long
   2365           accum A)
   2366  -- Runtime Function: unsigned long fract __satfractudausq (unsigned
   2367           long accum A)
   2368  -- Runtime Function: unsigned long long fract __satfractudaudq
   2369           (unsigned long accum A)
   2370  -- Runtime Function: unsigned short accum __satfractudauha2 (unsigned
   2371           long accum A)
   2372  -- Runtime Function: unsigned accum __satfractudausa2 (unsigned long
   2373           accum A)
   2374  -- Runtime Function: unsigned long long accum __satfractudauta2
   2375           (unsigned long accum A)
   2376  -- Runtime Function: short fract __satfractutaqq (unsigned long long
   2377           accum A)
   2378  -- Runtime Function: fract __satfractutahq (unsigned long long accum A)
   2379  -- Runtime Function: long fract __satfractutasq (unsigned long long
   2380           accum A)
   2381  -- Runtime Function: long long fract __satfractutadq (unsigned long
   2382           long accum A)
   2383  -- Runtime Function: short accum __satfractutaha (unsigned long long
   2384           accum A)
   2385  -- Runtime Function: accum __satfractutasa (unsigned long long accum A)
   2386  -- Runtime Function: long accum __satfractutada (unsigned long long
   2387           accum A)
   2388  -- Runtime Function: long long accum __satfractutata (unsigned long
   2389           long accum A)
   2390  -- Runtime Function: unsigned short fract __satfractutauqq (unsigned
   2391           long long accum A)
   2392  -- Runtime Function: unsigned fract __satfractutauhq (unsigned long
   2393           long accum A)
   2394  -- Runtime Function: unsigned long fract __satfractutausq (unsigned
   2395           long long accum A)
   2396  -- Runtime Function: unsigned long long fract __satfractutaudq
   2397           (unsigned long long accum A)
   2398  -- Runtime Function: unsigned short accum __satfractutauha2 (unsigned
   2399           long long accum A)
   2400  -- Runtime Function: unsigned accum __satfractutausa2 (unsigned long
   2401           long accum A)
   2402  -- Runtime Function: unsigned long accum __satfractutauda2 (unsigned
   2403           long long accum A)
   2404  -- Runtime Function: short fract __satfractqiqq (signed char A)
   2405  -- Runtime Function: fract __satfractqihq (signed char A)
   2406  -- Runtime Function: long fract __satfractqisq (signed char A)
   2407  -- Runtime Function: long long fract __satfractqidq (signed char A)
   2408  -- Runtime Function: short accum __satfractqiha (signed char A)
   2409  -- Runtime Function: accum __satfractqisa (signed char A)
   2410  -- Runtime Function: long accum __satfractqida (signed char A)
   2411  -- Runtime Function: long long accum __satfractqita (signed char A)
   2412  -- Runtime Function: unsigned short fract __satfractqiuqq (signed char
   2413           A)
   2414  -- Runtime Function: unsigned fract __satfractqiuhq (signed char A)
   2415  -- Runtime Function: unsigned long fract __satfractqiusq (signed char
   2416           A)
   2417  -- Runtime Function: unsigned long long fract __satfractqiudq (signed
   2418           char A)
   2419  -- Runtime Function: unsigned short accum __satfractqiuha (signed char
   2420           A)
   2421  -- Runtime Function: unsigned accum __satfractqiusa (signed char A)
   2422  -- Runtime Function: unsigned long accum __satfractqiuda (signed char
   2423           A)
   2424  -- Runtime Function: unsigned long long accum __satfractqiuta (signed
   2425           char A)
   2426  -- Runtime Function: short fract __satfracthiqq (short A)
   2427  -- Runtime Function: fract __satfracthihq (short A)
   2428  -- Runtime Function: long fract __satfracthisq (short A)
   2429  -- Runtime Function: long long fract __satfracthidq (short A)
   2430  -- Runtime Function: short accum __satfracthiha (short A)
   2431  -- Runtime Function: accum __satfracthisa (short A)
   2432  -- Runtime Function: long accum __satfracthida (short A)
   2433  -- Runtime Function: long long accum __satfracthita (short A)
   2434  -- Runtime Function: unsigned short fract __satfracthiuqq (short A)
   2435  -- Runtime Function: unsigned fract __satfracthiuhq (short A)
   2436  -- Runtime Function: unsigned long fract __satfracthiusq (short A)
   2437  -- Runtime Function: unsigned long long fract __satfracthiudq (short A)
   2438  -- Runtime Function: unsigned short accum __satfracthiuha (short A)
   2439  -- Runtime Function: unsigned accum __satfracthiusa (short A)
   2440  -- Runtime Function: unsigned long accum __satfracthiuda (short A)
   2441  -- Runtime Function: unsigned long long accum __satfracthiuta (short A)
   2442  -- Runtime Function: short fract __satfractsiqq (int A)
   2443  -- Runtime Function: fract __satfractsihq (int A)
   2444  -- Runtime Function: long fract __satfractsisq (int A)
   2445  -- Runtime Function: long long fract __satfractsidq (int A)
   2446  -- Runtime Function: short accum __satfractsiha (int A)
   2447  -- Runtime Function: accum __satfractsisa (int A)
   2448  -- Runtime Function: long accum __satfractsida (int A)
   2449  -- Runtime Function: long long accum __satfractsita (int A)
   2450  -- Runtime Function: unsigned short fract __satfractsiuqq (int A)
   2451  -- Runtime Function: unsigned fract __satfractsiuhq (int A)
   2452  -- Runtime Function: unsigned long fract __satfractsiusq (int A)
   2453  -- Runtime Function: unsigned long long fract __satfractsiudq (int A)
   2454  -- Runtime Function: unsigned short accum __satfractsiuha (int A)
   2455  -- Runtime Function: unsigned accum __satfractsiusa (int A)
   2456  -- Runtime Function: unsigned long accum __satfractsiuda (int A)
   2457  -- Runtime Function: unsigned long long accum __satfractsiuta (int A)
   2458  -- Runtime Function: short fract __satfractdiqq (long A)
   2459  -- Runtime Function: fract __satfractdihq (long A)
   2460  -- Runtime Function: long fract __satfractdisq (long A)
   2461  -- Runtime Function: long long fract __satfractdidq (long A)
   2462  -- Runtime Function: short accum __satfractdiha (long A)
   2463  -- Runtime Function: accum __satfractdisa (long A)
   2464  -- Runtime Function: long accum __satfractdida (long A)
   2465  -- Runtime Function: long long accum __satfractdita (long A)
   2466  -- Runtime Function: unsigned short fract __satfractdiuqq (long A)
   2467  -- Runtime Function: unsigned fract __satfractdiuhq (long A)
   2468  -- Runtime Function: unsigned long fract __satfractdiusq (long A)
   2469  -- Runtime Function: unsigned long long fract __satfractdiudq (long A)
   2470  -- Runtime Function: unsigned short accum __satfractdiuha (long A)
   2471  -- Runtime Function: unsigned accum __satfractdiusa (long A)
   2472  -- Runtime Function: unsigned long accum __satfractdiuda (long A)
   2473  -- Runtime Function: unsigned long long accum __satfractdiuta (long A)
   2474  -- Runtime Function: short fract __satfracttiqq (long long A)
   2475  -- Runtime Function: fract __satfracttihq (long long A)
   2476  -- Runtime Function: long fract __satfracttisq (long long A)
   2477  -- Runtime Function: long long fract __satfracttidq (long long A)
   2478  -- Runtime Function: short accum __satfracttiha (long long A)
   2479  -- Runtime Function: accum __satfracttisa (long long A)
   2480  -- Runtime Function: long accum __satfracttida (long long A)
   2481  -- Runtime Function: long long accum __satfracttita (long long A)
   2482  -- Runtime Function: unsigned short fract __satfracttiuqq (long long A)
   2483  -- Runtime Function: unsigned fract __satfracttiuhq (long long A)
   2484  -- Runtime Function: unsigned long fract __satfracttiusq (long long A)
   2485  -- Runtime Function: unsigned long long fract __satfracttiudq (long
   2486           long A)
   2487  -- Runtime Function: unsigned short accum __satfracttiuha (long long A)
   2488  -- Runtime Function: unsigned accum __satfracttiusa (long long A)
   2489  -- Runtime Function: unsigned long accum __satfracttiuda (long long A)
   2490  -- Runtime Function: unsigned long long accum __satfracttiuta (long
   2491           long A)
   2492  -- Runtime Function: short fract __satfractsfqq (float A)
   2493  -- Runtime Function: fract __satfractsfhq (float A)
   2494  -- Runtime Function: long fract __satfractsfsq (float A)
   2495  -- Runtime Function: long long fract __satfractsfdq (float A)
   2496  -- Runtime Function: short accum __satfractsfha (float A)
   2497  -- Runtime Function: accum __satfractsfsa (float A)
   2498  -- Runtime Function: long accum __satfractsfda (float A)
   2499  -- Runtime Function: long long accum __satfractsfta (float A)
   2500  -- Runtime Function: unsigned short fract __satfractsfuqq (float A)
   2501  -- Runtime Function: unsigned fract __satfractsfuhq (float A)
   2502  -- Runtime Function: unsigned long fract __satfractsfusq (float A)
   2503  -- Runtime Function: unsigned long long fract __satfractsfudq (float A)
   2504  -- Runtime Function: unsigned short accum __satfractsfuha (float A)
   2505  -- Runtime Function: unsigned accum __satfractsfusa (float A)
   2506  -- Runtime Function: unsigned long accum __satfractsfuda (float A)
   2507  -- Runtime Function: unsigned long long accum __satfractsfuta (float A)
   2508  -- Runtime Function: short fract __satfractdfqq (double A)
   2509  -- Runtime Function: fract __satfractdfhq (double A)
   2510  -- Runtime Function: long fract __satfractdfsq (double A)
   2511  -- Runtime Function: long long fract __satfractdfdq (double A)
   2512  -- Runtime Function: short accum __satfractdfha (double A)
   2513  -- Runtime Function: accum __satfractdfsa (double A)
   2514  -- Runtime Function: long accum __satfractdfda (double A)
   2515  -- Runtime Function: long long accum __satfractdfta (double A)
   2516  -- Runtime Function: unsigned short fract __satfractdfuqq (double A)
   2517  -- Runtime Function: unsigned fract __satfractdfuhq (double A)
   2518  -- Runtime Function: unsigned long fract __satfractdfusq (double A)
   2519  -- Runtime Function: unsigned long long fract __satfractdfudq (double
   2520           A)
   2521  -- Runtime Function: unsigned short accum __satfractdfuha (double A)
   2522  -- Runtime Function: unsigned accum __satfractdfusa (double A)
   2523  -- Runtime Function: unsigned long accum __satfractdfuda (double A)
   2524  -- Runtime Function: unsigned long long accum __satfractdfuta (double
   2525           A)
   2526      The functions convert from fractional and signed non-fractionals to
   2527      fractionals, with saturation.
   2528 
   2529  -- Runtime Function: unsigned char __fractunsqqqi (short fract A)
   2530  -- Runtime Function: unsigned short __fractunsqqhi (short fract A)
   2531  -- Runtime Function: unsigned int __fractunsqqsi (short fract A)
   2532  -- Runtime Function: unsigned long __fractunsqqdi (short fract A)
   2533  -- Runtime Function: unsigned long long __fractunsqqti (short fract A)
   2534  -- Runtime Function: unsigned char __fractunshqqi (fract A)
   2535  -- Runtime Function: unsigned short __fractunshqhi (fract A)
   2536  -- Runtime Function: unsigned int __fractunshqsi (fract A)
   2537  -- Runtime Function: unsigned long __fractunshqdi (fract A)
   2538  -- Runtime Function: unsigned long long __fractunshqti (fract A)
   2539  -- Runtime Function: unsigned char __fractunssqqi (long fract A)
   2540  -- Runtime Function: unsigned short __fractunssqhi (long fract A)
   2541  -- Runtime Function: unsigned int __fractunssqsi (long fract A)
   2542  -- Runtime Function: unsigned long __fractunssqdi (long fract A)
   2543  -- Runtime Function: unsigned long long __fractunssqti (long fract A)
   2544  -- Runtime Function: unsigned char __fractunsdqqi (long long fract A)
   2545  -- Runtime Function: unsigned short __fractunsdqhi (long long fract A)
   2546  -- Runtime Function: unsigned int __fractunsdqsi (long long fract A)
   2547  -- Runtime Function: unsigned long __fractunsdqdi (long long fract A)
   2548  -- Runtime Function: unsigned long long __fractunsdqti (long long
   2549           fract A)
   2550  -- Runtime Function: unsigned char __fractunshaqi (short accum A)
   2551  -- Runtime Function: unsigned short __fractunshahi (short accum A)
   2552  -- Runtime Function: unsigned int __fractunshasi (short accum A)
   2553  -- Runtime Function: unsigned long __fractunshadi (short accum A)
   2554  -- Runtime Function: unsigned long long __fractunshati (short accum A)
   2555  -- Runtime Function: unsigned char __fractunssaqi (accum A)
   2556  -- Runtime Function: unsigned short __fractunssahi (accum A)
   2557  -- Runtime Function: unsigned int __fractunssasi (accum A)
   2558  -- Runtime Function: unsigned long __fractunssadi (accum A)
   2559  -- Runtime Function: unsigned long long __fractunssati (accum A)
   2560  -- Runtime Function: unsigned char __fractunsdaqi (long accum A)
   2561  -- Runtime Function: unsigned short __fractunsdahi (long accum A)
   2562  -- Runtime Function: unsigned int __fractunsdasi (long accum A)
   2563  -- Runtime Function: unsigned long __fractunsdadi (long accum A)
   2564  -- Runtime Function: unsigned long long __fractunsdati (long accum A)
   2565  -- Runtime Function: unsigned char __fractunstaqi (long long accum A)
   2566  -- Runtime Function: unsigned short __fractunstahi (long long accum A)
   2567  -- Runtime Function: unsigned int __fractunstasi (long long accum A)
   2568  -- Runtime Function: unsigned long __fractunstadi (long long accum A)
   2569  -- Runtime Function: unsigned long long __fractunstati (long long
   2570           accum A)
   2571  -- Runtime Function: unsigned char __fractunsuqqqi (unsigned short
   2572           fract A)
   2573  -- Runtime Function: unsigned short __fractunsuqqhi (unsigned short
   2574           fract A)
   2575  -- Runtime Function: unsigned int __fractunsuqqsi (unsigned short
   2576           fract A)
   2577  -- Runtime Function: unsigned long __fractunsuqqdi (unsigned short
   2578           fract A)
   2579  -- Runtime Function: unsigned long long __fractunsuqqti (unsigned
   2580           short fract A)
   2581  -- Runtime Function: unsigned char __fractunsuhqqi (unsigned fract A)
   2582  -- Runtime Function: unsigned short __fractunsuhqhi (unsigned fract A)
   2583  -- Runtime Function: unsigned int __fractunsuhqsi (unsigned fract A)
   2584  -- Runtime Function: unsigned long __fractunsuhqdi (unsigned fract A)
   2585  -- Runtime Function: unsigned long long __fractunsuhqti (unsigned
   2586           fract A)
   2587  -- Runtime Function: unsigned char __fractunsusqqi (unsigned long
   2588           fract A)
   2589  -- Runtime Function: unsigned short __fractunsusqhi (unsigned long
   2590           fract A)
   2591  -- Runtime Function: unsigned int __fractunsusqsi (unsigned long fract
   2592           A)
   2593  -- Runtime Function: unsigned long __fractunsusqdi (unsigned long
   2594           fract A)
   2595  -- Runtime Function: unsigned long long __fractunsusqti (unsigned long
   2596           fract A)
   2597  -- Runtime Function: unsigned char __fractunsudqqi (unsigned long long
   2598           fract A)
   2599  -- Runtime Function: unsigned short __fractunsudqhi (unsigned long
   2600           long fract A)
   2601  -- Runtime Function: unsigned int __fractunsudqsi (unsigned long long
   2602           fract A)
   2603  -- Runtime Function: unsigned long __fractunsudqdi (unsigned long long
   2604           fract A)
   2605  -- Runtime Function: unsigned long long __fractunsudqti (unsigned long
   2606           long fract A)
   2607  -- Runtime Function: unsigned char __fractunsuhaqi (unsigned short
   2608           accum A)
   2609  -- Runtime Function: unsigned short __fractunsuhahi (unsigned short
   2610           accum A)
   2611  -- Runtime Function: unsigned int __fractunsuhasi (unsigned short
   2612           accum A)
   2613  -- Runtime Function: unsigned long __fractunsuhadi (unsigned short
   2614           accum A)
   2615  -- Runtime Function: unsigned long long __fractunsuhati (unsigned
   2616           short accum A)
   2617  -- Runtime Function: unsigned char __fractunsusaqi (unsigned accum A)
   2618  -- Runtime Function: unsigned short __fractunsusahi (unsigned accum A)
   2619  -- Runtime Function: unsigned int __fractunsusasi (unsigned accum A)
   2620  -- Runtime Function: unsigned long __fractunsusadi (unsigned accum A)
   2621  -- Runtime Function: unsigned long long __fractunsusati (unsigned
   2622           accum A)
   2623  -- Runtime Function: unsigned char __fractunsudaqi (unsigned long
   2624           accum A)
   2625  -- Runtime Function: unsigned short __fractunsudahi (unsigned long
   2626           accum A)
   2627  -- Runtime Function: unsigned int __fractunsudasi (unsigned long accum
   2628           A)
   2629  -- Runtime Function: unsigned long __fractunsudadi (unsigned long
   2630           accum A)
   2631  -- Runtime Function: unsigned long long __fractunsudati (unsigned long
   2632           accum A)
   2633  -- Runtime Function: unsigned char __fractunsutaqi (unsigned long long
   2634           accum A)
   2635  -- Runtime Function: unsigned short __fractunsutahi (unsigned long
   2636           long accum A)
   2637  -- Runtime Function: unsigned int __fractunsutasi (unsigned long long
   2638           accum A)
   2639  -- Runtime Function: unsigned long __fractunsutadi (unsigned long long
   2640           accum A)
   2641  -- Runtime Function: unsigned long long __fractunsutati (unsigned long
   2642           long accum A)
   2643  -- Runtime Function: short fract __fractunsqiqq (unsigned char A)
   2644  -- Runtime Function: fract __fractunsqihq (unsigned char A)
   2645  -- Runtime Function: long fract __fractunsqisq (unsigned char A)
   2646  -- Runtime Function: long long fract __fractunsqidq (unsigned char A)
   2647  -- Runtime Function: short accum __fractunsqiha (unsigned char A)
   2648  -- Runtime Function: accum __fractunsqisa (unsigned char A)
   2649  -- Runtime Function: long accum __fractunsqida (unsigned char A)
   2650  -- Runtime Function: long long accum __fractunsqita (unsigned char A)
   2651  -- Runtime Function: unsigned short fract __fractunsqiuqq (unsigned
   2652           char A)
   2653  -- Runtime Function: unsigned fract __fractunsqiuhq (unsigned char A)
   2654  -- Runtime Function: unsigned long fract __fractunsqiusq (unsigned
   2655           char A)
   2656  -- Runtime Function: unsigned long long fract __fractunsqiudq
   2657           (unsigned char A)
   2658  -- Runtime Function: unsigned short accum __fractunsqiuha (unsigned
   2659           char A)
   2660  -- Runtime Function: unsigned accum __fractunsqiusa (unsigned char A)
   2661  -- Runtime Function: unsigned long accum __fractunsqiuda (unsigned
   2662           char A)
   2663  -- Runtime Function: unsigned long long accum __fractunsqiuta
   2664           (unsigned char A)
   2665  -- Runtime Function: short fract __fractunshiqq (unsigned short A)
   2666  -- Runtime Function: fract __fractunshihq (unsigned short A)
   2667  -- Runtime Function: long fract __fractunshisq (unsigned short A)
   2668  -- Runtime Function: long long fract __fractunshidq (unsigned short A)
   2669  -- Runtime Function: short accum __fractunshiha (unsigned short A)
   2670  -- Runtime Function: accum __fractunshisa (unsigned short A)
   2671  -- Runtime Function: long accum __fractunshida (unsigned short A)
   2672  -- Runtime Function: long long accum __fractunshita (unsigned short A)
   2673  -- Runtime Function: unsigned short fract __fractunshiuqq (unsigned
   2674           short A)
   2675  -- Runtime Function: unsigned fract __fractunshiuhq (unsigned short A)
   2676  -- Runtime Function: unsigned long fract __fractunshiusq (unsigned
   2677           short A)
   2678  -- Runtime Function: unsigned long long fract __fractunshiudq
   2679           (unsigned short A)
   2680  -- Runtime Function: unsigned short accum __fractunshiuha (unsigned
   2681           short A)
   2682  -- Runtime Function: unsigned accum __fractunshiusa (unsigned short A)
   2683  -- Runtime Function: unsigned long accum __fractunshiuda (unsigned
   2684           short A)
   2685  -- Runtime Function: unsigned long long accum __fractunshiuta
   2686           (unsigned short A)
   2687  -- Runtime Function: short fract __fractunssiqq (unsigned int A)
   2688  -- Runtime Function: fract __fractunssihq (unsigned int A)
   2689  -- Runtime Function: long fract __fractunssisq (unsigned int A)
   2690  -- Runtime Function: long long fract __fractunssidq (unsigned int A)
   2691  -- Runtime Function: short accum __fractunssiha (unsigned int A)
   2692  -- Runtime Function: accum __fractunssisa (unsigned int A)
   2693  -- Runtime Function: long accum __fractunssida (unsigned int A)
   2694  -- Runtime Function: long long accum __fractunssita (unsigned int A)
   2695  -- Runtime Function: unsigned short fract __fractunssiuqq (unsigned
   2696           int A)
   2697  -- Runtime Function: unsigned fract __fractunssiuhq (unsigned int A)
   2698  -- Runtime Function: unsigned long fract __fractunssiusq (unsigned int
   2699           A)
   2700  -- Runtime Function: unsigned long long fract __fractunssiudq
   2701           (unsigned int A)
   2702  -- Runtime Function: unsigned short accum __fractunssiuha (unsigned
   2703           int A)
   2704  -- Runtime Function: unsigned accum __fractunssiusa (unsigned int A)
   2705  -- Runtime Function: unsigned long accum __fractunssiuda (unsigned int
   2706           A)
   2707  -- Runtime Function: unsigned long long accum __fractunssiuta
   2708           (unsigned int A)
   2709  -- Runtime Function: short fract __fractunsdiqq (unsigned long A)
   2710  -- Runtime Function: fract __fractunsdihq (unsigned long A)
   2711  -- Runtime Function: long fract __fractunsdisq (unsigned long A)
   2712  -- Runtime Function: long long fract __fractunsdidq (unsigned long A)
   2713  -- Runtime Function: short accum __fractunsdiha (unsigned long A)
   2714  -- Runtime Function: accum __fractunsdisa (unsigned long A)
   2715  -- Runtime Function: long accum __fractunsdida (unsigned long A)
   2716  -- Runtime Function: long long accum __fractunsdita (unsigned long A)
   2717  -- Runtime Function: unsigned short fract __fractunsdiuqq (unsigned
   2718           long A)
   2719  -- Runtime Function: unsigned fract __fractunsdiuhq (unsigned long A)
   2720  -- Runtime Function: unsigned long fract __fractunsdiusq (unsigned
   2721           long A)
   2722  -- Runtime Function: unsigned long long fract __fractunsdiudq
   2723           (unsigned long A)
   2724  -- Runtime Function: unsigned short accum __fractunsdiuha (unsigned
   2725           long A)
   2726  -- Runtime Function: unsigned accum __fractunsdiusa (unsigned long A)
   2727  -- Runtime Function: unsigned long accum __fractunsdiuda (unsigned
   2728           long A)
   2729  -- Runtime Function: unsigned long long accum __fractunsdiuta
   2730           (unsigned long A)
   2731  -- Runtime Function: short fract __fractunstiqq (unsigned long long A)
   2732  -- Runtime Function: fract __fractunstihq (unsigned long long A)
   2733  -- Runtime Function: long fract __fractunstisq (unsigned long long A)
   2734  -- Runtime Function: long long fract __fractunstidq (unsigned long
   2735           long A)
   2736  -- Runtime Function: short accum __fractunstiha (unsigned long long A)
   2737  -- Runtime Function: accum __fractunstisa (unsigned long long A)
   2738  -- Runtime Function: long accum __fractunstida (unsigned long long A)
   2739  -- Runtime Function: long long accum __fractunstita (unsigned long
   2740           long A)
   2741  -- Runtime Function: unsigned short fract __fractunstiuqq (unsigned
   2742           long long A)
   2743  -- Runtime Function: unsigned fract __fractunstiuhq (unsigned long
   2744           long A)
   2745  -- Runtime Function: unsigned long fract __fractunstiusq (unsigned
   2746           long long A)
   2747  -- Runtime Function: unsigned long long fract __fractunstiudq
   2748           (unsigned long long A)
   2749  -- Runtime Function: unsigned short accum __fractunstiuha (unsigned
   2750           long long A)
   2751  -- Runtime Function: unsigned accum __fractunstiusa (unsigned long
   2752           long A)
   2753  -- Runtime Function: unsigned long accum __fractunstiuda (unsigned
   2754           long long A)
   2755  -- Runtime Function: unsigned long long accum __fractunstiuta
   2756           (unsigned long long A)
   2757      These functions convert from fractionals to unsigned
   2758      non-fractionals; and from unsigned non-fractionals to fractionals,
   2759      without saturation.
   2760 
   2761  -- Runtime Function: short fract __satfractunsqiqq (unsigned char A)
   2762  -- Runtime Function: fract __satfractunsqihq (unsigned char A)
   2763  -- Runtime Function: long fract __satfractunsqisq (unsigned char A)
   2764  -- Runtime Function: long long fract __satfractunsqidq (unsigned char
   2765           A)
   2766  -- Runtime Function: short accum __satfractunsqiha (unsigned char A)
   2767  -- Runtime Function: accum __satfractunsqisa (unsigned char A)
   2768  -- Runtime Function: long accum __satfractunsqida (unsigned char A)
   2769  -- Runtime Function: long long accum __satfractunsqita (unsigned char
   2770           A)
   2771  -- Runtime Function: unsigned short fract __satfractunsqiuqq (unsigned
   2772           char A)
   2773  -- Runtime Function: unsigned fract __satfractunsqiuhq (unsigned char
   2774           A)
   2775  -- Runtime Function: unsigned long fract __satfractunsqiusq (unsigned
   2776           char A)
   2777  -- Runtime Function: unsigned long long fract __satfractunsqiudq
   2778           (unsigned char A)
   2779  -- Runtime Function: unsigned short accum __satfractunsqiuha (unsigned
   2780           char A)
   2781  -- Runtime Function: unsigned accum __satfractunsqiusa (unsigned char
   2782           A)
   2783  -- Runtime Function: unsigned long accum __satfractunsqiuda (unsigned
   2784           char A)
   2785  -- Runtime Function: unsigned long long accum __satfractunsqiuta
   2786           (unsigned char A)
   2787  -- Runtime Function: short fract __satfractunshiqq (unsigned short A)
   2788  -- Runtime Function: fract __satfractunshihq (unsigned short A)
   2789  -- Runtime Function: long fract __satfractunshisq (unsigned short A)
   2790  -- Runtime Function: long long fract __satfractunshidq (unsigned short
   2791           A)
   2792  -- Runtime Function: short accum __satfractunshiha (unsigned short A)
   2793  -- Runtime Function: accum __satfractunshisa (unsigned short A)
   2794  -- Runtime Function: long accum __satfractunshida (unsigned short A)
   2795  -- Runtime Function: long long accum __satfractunshita (unsigned short
   2796           A)
   2797  -- Runtime Function: unsigned short fract __satfractunshiuqq (unsigned
   2798           short A)
   2799  -- Runtime Function: unsigned fract __satfractunshiuhq (unsigned short
   2800           A)
   2801  -- Runtime Function: unsigned long fract __satfractunshiusq (unsigned
   2802           short A)
   2803  -- Runtime Function: unsigned long long fract __satfractunshiudq
   2804           (unsigned short A)
   2805  -- Runtime Function: unsigned short accum __satfractunshiuha (unsigned
   2806           short A)
   2807  -- Runtime Function: unsigned accum __satfractunshiusa (unsigned short
   2808           A)
   2809  -- Runtime Function: unsigned long accum __satfractunshiuda (unsigned
   2810           short A)
   2811  -- Runtime Function: unsigned long long accum __satfractunshiuta
   2812           (unsigned short A)
   2813  -- Runtime Function: short fract __satfractunssiqq (unsigned int A)
   2814  -- Runtime Function: fract __satfractunssihq (unsigned int A)
   2815  -- Runtime Function: long fract __satfractunssisq (unsigned int A)
   2816  -- Runtime Function: long long fract __satfractunssidq (unsigned int A)
   2817  -- Runtime Function: short accum __satfractunssiha (unsigned int A)
   2818  -- Runtime Function: accum __satfractunssisa (unsigned int A)
   2819  -- Runtime Function: long accum __satfractunssida (unsigned int A)
   2820  -- Runtime Function: long long accum __satfractunssita (unsigned int A)
   2821  -- Runtime Function: unsigned short fract __satfractunssiuqq (unsigned
   2822           int A)
   2823  -- Runtime Function: unsigned fract __satfractunssiuhq (unsigned int A)
   2824  -- Runtime Function: unsigned long fract __satfractunssiusq (unsigned
   2825           int A)
   2826  -- Runtime Function: unsigned long long fract __satfractunssiudq
   2827           (unsigned int A)
   2828  -- Runtime Function: unsigned short accum __satfractunssiuha (unsigned
   2829           int A)
   2830  -- Runtime Function: unsigned accum __satfractunssiusa (unsigned int A)
   2831  -- Runtime Function: unsigned long accum __satfractunssiuda (unsigned
   2832           int A)
   2833  -- Runtime Function: unsigned long long accum __satfractunssiuta
   2834           (unsigned int A)
   2835  -- Runtime Function: short fract __satfractunsdiqq (unsigned long A)
   2836  -- Runtime Function: fract __satfractunsdihq (unsigned long A)
   2837  -- Runtime Function: long fract __satfractunsdisq (unsigned long A)
   2838  -- Runtime Function: long long fract __satfractunsdidq (unsigned long
   2839           A)
   2840  -- Runtime Function: short accum __satfractunsdiha (unsigned long A)
   2841  -- Runtime Function: accum __satfractunsdisa (unsigned long A)
   2842  -- Runtime Function: long accum __satfractunsdida (unsigned long A)
   2843  -- Runtime Function: long long accum __satfractunsdita (unsigned long
   2844           A)
   2845  -- Runtime Function: unsigned short fract __satfractunsdiuqq (unsigned
   2846           long A)
   2847  -- Runtime Function: unsigned fract __satfractunsdiuhq (unsigned long
   2848           A)
   2849  -- Runtime Function: unsigned long fract __satfractunsdiusq (unsigned
   2850           long A)
   2851  -- Runtime Function: unsigned long long fract __satfractunsdiudq
   2852           (unsigned long A)
   2853  -- Runtime Function: unsigned short accum __satfractunsdiuha (unsigned
   2854           long A)
   2855  -- Runtime Function: unsigned accum __satfractunsdiusa (unsigned long
   2856           A)
   2857  -- Runtime Function: unsigned long accum __satfractunsdiuda (unsigned
   2858           long A)
   2859  -- Runtime Function: unsigned long long accum __satfractunsdiuta
   2860           (unsigned long A)
   2861  -- Runtime Function: short fract __satfractunstiqq (unsigned long long
   2862           A)
   2863  -- Runtime Function: fract __satfractunstihq (unsigned long long A)
   2864  -- Runtime Function: long fract __satfractunstisq (unsigned long long
   2865           A)
   2866  -- Runtime Function: long long fract __satfractunstidq (unsigned long
   2867           long A)
   2868  -- Runtime Function: short accum __satfractunstiha (unsigned long long
   2869           A)
   2870  -- Runtime Function: accum __satfractunstisa (unsigned long long A)
   2871  -- Runtime Function: long accum __satfractunstida (unsigned long long
   2872           A)
   2873  -- Runtime Function: long long accum __satfractunstita (unsigned long
   2874           long A)
   2875  -- Runtime Function: unsigned short fract __satfractunstiuqq (unsigned
   2876           long long A)
   2877  -- Runtime Function: unsigned fract __satfractunstiuhq (unsigned long
   2878           long A)
   2879  -- Runtime Function: unsigned long fract __satfractunstiusq (unsigned
   2880           long long A)
   2881  -- Runtime Function: unsigned long long fract __satfractunstiudq
   2882           (unsigned long long A)
   2883  -- Runtime Function: unsigned short accum __satfractunstiuha (unsigned
   2884           long long A)
   2885  -- Runtime Function: unsigned accum __satfractunstiusa (unsigned long
   2886           long A)
   2887  -- Runtime Function: unsigned long accum __satfractunstiuda (unsigned
   2888           long long A)
   2889  -- Runtime Function: unsigned long long accum __satfractunstiuta
   2890           (unsigned long long A)
   2891      These functions convert from unsigned non-fractionals to
   2892      fractionals, with saturation.
   2893 
   2894 
   2895 File: gccint.info,  Node: Exception handling routines,  Next: Miscellaneous routines,  Prev: Fixed-point fractional library routines,  Up: Libgcc
   2896 
   2897 4.5 Language-independent routines for exception handling
   2898 ========================================================
   2899 
   2900 document me!
   2901 
   2902        _Unwind_DeleteException
   2903        _Unwind_Find_FDE
   2904        _Unwind_ForcedUnwind
   2905        _Unwind_GetGR
   2906        _Unwind_GetIP
   2907        _Unwind_GetLanguageSpecificData
   2908        _Unwind_GetRegionStart
   2909        _Unwind_GetTextRelBase
   2910        _Unwind_GetDataRelBase
   2911        _Unwind_RaiseException
   2912        _Unwind_Resume
   2913        _Unwind_SetGR
   2914        _Unwind_SetIP
   2915        _Unwind_FindEnclosingFunction
   2916        _Unwind_SjLj_Register
   2917        _Unwind_SjLj_Unregister
   2918        _Unwind_SjLj_RaiseException
   2919        _Unwind_SjLj_ForcedUnwind
   2920        _Unwind_SjLj_Resume
   2921        __deregister_frame
   2922        __deregister_frame_info
   2923        __deregister_frame_info_bases
   2924        __register_frame
   2925        __register_frame_info
   2926        __register_frame_info_bases
   2927        __register_frame_info_table
   2928        __register_frame_info_table_bases
   2929        __register_frame_table
   2930 
   2931 
   2932 File: gccint.info,  Node: Miscellaneous routines,  Prev: Exception handling routines,  Up: Libgcc
   2933 
   2934 4.6 Miscellaneous runtime library routines
   2935 ==========================================
   2936 
   2937 4.6.1 Cache control functions
   2938 -----------------------------
   2939 
   2940  -- Runtime Function: void __clear_cache (char *BEG, char *END)
   2941      This function clears the instruction cache between BEG and END.
   2942 
   2943 4.6.2 Split stack functions and variables
   2944 -----------------------------------------
   2945 
   2946  -- Runtime Function: void * __splitstack_find (void *SEGMENT_ARG, void
   2947           *SP, size_t LEN, void **NEXT_SEGMENT, void **NEXT_SP, void
   2948           **INITIAL_SP)
   2949      When using `-fsplit-stack', this call may be used to iterate over
   2950      the stack segments.  It may be called like this:
   2951             void *next_segment = NULL;
   2952             void *next_sp = NULL;
   2953             void *initial_sp = NULL;
   2954             void *stack;
   2955             size_t stack_size;
   2956             while ((stack = __splitstack_find (next_segment, next_sp,
   2957                                                &stack_size, &next_segment,
   2958                                                &next_sp, &initial_sp))
   2959                    != NULL)
   2960               {
   2961                 /* Stack segment starts at stack and is
   2962                    stack_size bytes long.  */
   2963               }
   2964 
   2965      There is no way to iterate over the stack segments of a different
   2966      thread.  However, what is permitted is for one thread to call this
   2967      with the SEGMENT_ARG and SP arguments NULL, to pass NEXT_SEGMENT,
   2968      NEXT_SP, and INITIAL_SP to a different thread, and then to suspend
   2969      one way or another.  A different thread may run the subsequent
   2970      `__splitstack_find' iterations.  Of course, this will only work if
   2971      the first thread is suspended while the second thread is calling
   2972      `__splitstack_find'.  If not, the second thread could be looking
   2973      at the stack while it is changing, and anything could happen.
   2974 
   2975  -- Variable: __morestack_segments
   2976  -- Variable: __morestack_current_segment
   2977  -- Variable: __morestack_initial_sp
   2978      Internal variables used by the `-fsplit-stack' implementation.
   2979 
   2980 
   2981 File: gccint.info,  Node: Languages,  Next: Source Tree,  Prev: Libgcc,  Up: Top
   2982 
   2983 5 Language Front Ends in GCC
   2984 ****************************
   2985 
   2986 The interface to front ends for languages in GCC, and in particular the
   2987 `tree' structure (*note GENERIC::), was initially designed for C, and
   2988 many aspects of it are still somewhat biased towards C and C-like
   2989 languages.  It is, however, reasonably well suited to other procedural
   2990 languages, and front ends for many such languages have been written for
   2991 GCC.
   2992 
   2993  Writing a compiler as a front end for GCC, rather than compiling
   2994 directly to assembler or generating C code which is then compiled by
   2995 GCC, has several advantages:
   2996 
   2997    * GCC front ends benefit from the support for many different target
   2998      machines already present in GCC.
   2999 
   3000    * GCC front ends benefit from all the optimizations in GCC.  Some of
   3001      these, such as alias analysis, may work better when GCC is
   3002      compiling directly from source code then when it is compiling from
   3003      generated C code.
   3004 
   3005    * Better debugging information is generated when compiling directly
   3006      from source code than when going via intermediate generated C code.
   3007 
   3008  Because of the advantages of writing a compiler as a GCC front end,
   3009 GCC front ends have also been created for languages very different from
   3010 those for which GCC was designed, such as the declarative
   3011 logic/functional language Mercury.  For these reasons, it may also be
   3012 useful to implement compilers created for specialized purposes (for
   3013 example, as part of a research project) as GCC front ends.
   3014 
   3015 
   3016 File: gccint.info,  Node: Source Tree,  Next: Testsuites,  Prev: Languages,  Up: Top
   3017 
   3018 6 Source Tree Structure and Build System
   3019 ****************************************
   3020 
   3021 This chapter describes the structure of the GCC source tree, and how
   3022 GCC is built.  The user documentation for building and installing GCC
   3023 is in a separate manual (`http://gcc.gnu.org/install/'), with which it
   3024 is presumed that you are familiar.
   3025 
   3026 * Menu:
   3027 
   3028 * Configure Terms:: Configuration terminology and history.
   3029 * Top Level::       The top level source directory.
   3030 * gcc Directory::   The `gcc' subdirectory.
   3031 
   3032 
   3033 File: gccint.info,  Node: Configure Terms,  Next: Top Level,  Up: Source Tree
   3034 
   3035 6.1 Configure Terms and History
   3036 ===============================
   3037 
   3038 The configure and build process has a long and colorful history, and can
   3039 be confusing to anyone who doesn't know why things are the way they are.
   3040 While there are other documents which describe the configuration process
   3041 in detail, here are a few things that everyone working on GCC should
   3042 know.
   3043 
   3044  There are three system names that the build knows about: the machine
   3045 you are building on ("build"), the machine that you are building for
   3046 ("host"), and the machine that GCC will produce code for ("target").
   3047 When you configure GCC, you specify these with `--build=', `--host=',
   3048 and `--target='.
   3049 
   3050  Specifying the host without specifying the build should be avoided, as
   3051 `configure' may (and once did) assume that the host you specify is also
   3052 the build, which may not be true.
   3053 
   3054  If build, host, and target are all the same, this is called a
   3055 "native".  If build and host are the same but target is different, this
   3056 is called a "cross".  If build, host, and target are all different this
   3057 is called a "canadian" (for obscure reasons dealing with Canada's
   3058 political party and the background of the person working on the build
   3059 at that time).  If host and target are the same, but build is
   3060 different, you are using a cross-compiler to build a native for a
   3061 different system.  Some people call this a "host-x-host", "crossed
   3062 native", or "cross-built native".  If build and target are the same,
   3063 but host is different, you are using a cross compiler to build a cross
   3064 compiler that produces code for the machine you're building on.  This
   3065 is rare, so there is no common way of describing it.  There is a
   3066 proposal to call this a "crossback".
   3067 
   3068  If build and host are the same, the GCC you are building will also be
   3069 used to build the target libraries (like `libstdc++').  If build and
   3070 host are different, you must have already built and installed a cross
   3071 compiler that will be used to build the target libraries (if you
   3072 configured with `--target=foo-bar', this compiler will be called
   3073 `foo-bar-gcc').
   3074 
   3075  In the case of target libraries, the machine you're building for is the
   3076 machine you specified with `--target'.  So, build is the machine you're
   3077 building on (no change there), host is the machine you're building for
   3078 (the target libraries are built for the target, so host is the target
   3079 you specified), and target doesn't apply (because you're not building a
   3080 compiler, you're building libraries).  The configure/make process will
   3081 adjust these variables as needed.  It also sets `$with_cross_host' to
   3082 the original `--host' value in case you need it.
   3083 
   3084  The `libiberty' support library is built up to three times: once for
   3085 the host, once for the target (even if they are the same), and once for
   3086 the build if build and host are different.  This allows it to be used
   3087 by all programs which are generated in the course of the build process.
   3088 
   3089 
   3090 File: gccint.info,  Node: Top Level,  Next: gcc Directory,  Prev: Configure Terms,  Up: Source Tree
   3091 
   3092 6.2 Top Level Source Directory
   3093 ==============================
   3094 
   3095 The top level source directory in a GCC distribution contains several
   3096 files and directories that are shared with other software distributions
   3097 such as that of GNU Binutils.  It also contains several subdirectories
   3098 that contain parts of GCC and its runtime libraries:
   3099 
   3100 `boehm-gc'
   3101      The Boehm conservative garbage collector, used as part of the Java
   3102      runtime library.
   3103 
   3104 `config'
   3105      Autoconf macros and Makefile fragments used throughout the tree.
   3106 
   3107 `contrib'
   3108      Contributed scripts that may be found useful in conjunction with
   3109      GCC.  One of these, `contrib/texi2pod.pl', is used to generate man
   3110      pages from Texinfo manuals as part of the GCC build process.
   3111 
   3112 `fixincludes'
   3113      The support for fixing system headers to work with GCC.  See
   3114      `fixincludes/README' for more information.  The headers fixed by
   3115      this mechanism are installed in `LIBSUBDIR/include-fixed'.  Along
   3116      with those headers, `README-fixinc' is also installed, as
   3117      `LIBSUBDIR/include-fixed/README'.
   3118 
   3119 `gcc'
   3120      The main sources of GCC itself (except for runtime libraries),
   3121      including optimizers, support for different target architectures,
   3122      language front ends, and testsuites.  *Note The `gcc'
   3123      Subdirectory: gcc Directory, for details.
   3124 
   3125 `gnattools'
   3126      Support tools for GNAT.
   3127 
   3128 `include'
   3129      Headers for the `libiberty' library.
   3130 
   3131 `intl'
   3132      GNU `libintl', from GNU `gettext', for systems which do not
   3133      include it in `libc'.
   3134 
   3135 `libada'
   3136      The Ada runtime library.
   3137 
   3138 `libcpp'
   3139      The C preprocessor library.
   3140 
   3141 `libdecnumber'
   3142      The Decimal Float support library.
   3143 
   3144 `libffi'
   3145      The `libffi' library, used as part of the Java runtime library.
   3146 
   3147 `libgcc'
   3148      The GCC runtime library.
   3149 
   3150 `libgfortran'
   3151      The Fortran runtime library.
   3152 
   3153 `libgo'
   3154      The Go runtime library.  The bulk of this library is mirrored from
   3155      the master Go repository (http://code.google.com/p/go/).
   3156 
   3157 `libgomp'
   3158      The GNU OpenMP runtime library.
   3159 
   3160 `libiberty'
   3161      The `libiberty' library, used for portability and for some
   3162      generally useful data structures and algorithms.  *Note
   3163      Introduction: (libiberty)Top, for more information about this
   3164      library.
   3165 
   3166 `libjava'
   3167      The Java runtime library.
   3168 
   3169 `libmudflap'
   3170      The `libmudflap' library, used for instrumenting pointer and array
   3171      dereferencing operations.
   3172 
   3173 `libobjc'
   3174      The Objective-C and Objective-C++ runtime library.
   3175 
   3176 `libssp'
   3177      The Stack protector runtime library.
   3178 
   3179 `libstdc++-v3'
   3180      The C++ runtime library.
   3181 
   3182 `lto-plugin'
   3183      Plugin used by `gold' if link-time optimizations are enabled.
   3184 
   3185 `maintainer-scripts'
   3186      Scripts used by the `gccadmin' account on `gcc.gnu.org'.
   3187 
   3188 `zlib'
   3189      The `zlib' compression library, used by the Java front end, as
   3190      part of the Java runtime library, and for compressing and
   3191      uncompressing GCC's intermediate language in LTO object files.
   3192 
   3193  The build system in the top level directory, including how recursion
   3194 into subdirectories works and how building runtime libraries for
   3195 multilibs is handled, is documented in a separate manual, included with
   3196 GNU Binutils.  *Note GNU configure and build system: (configure)Top,
   3197 for details.
   3198 
   3199 
   3200 File: gccint.info,  Node: gcc Directory,  Prev: Top Level,  Up: Source Tree
   3201 
   3202 6.3 The `gcc' Subdirectory
   3203 ==========================
   3204 
   3205 The `gcc' directory contains many files that are part of the C sources
   3206 of GCC, other files used as part of the configuration and build
   3207 process, and subdirectories including documentation and a testsuite.
   3208 The files that are sources of GCC are documented in a separate chapter.
   3209 *Note Passes and Files of the Compiler: Passes.
   3210 
   3211 * Menu:
   3212 
   3213 * Subdirectories:: Subdirectories of `gcc'.
   3214 * Configuration::  The configuration process, and the files it uses.
   3215 * Build::          The build system in the `gcc' directory.
   3216 * Makefile::       Targets in `gcc/Makefile'.
   3217 * Library Files::  Library source files and headers under `gcc/'.
   3218 * Headers::        Headers installed by GCC.
   3219 * Documentation::  Building documentation in GCC.
   3220 * Front End::      Anatomy of a language front end.
   3221 * Back End::       Anatomy of a target back end.
   3222 
   3223 
   3224 File: gccint.info,  Node: Subdirectories,  Next: Configuration,  Up: gcc Directory
   3225 
   3226 6.3.1 Subdirectories of `gcc'
   3227 -----------------------------
   3228 
   3229 The `gcc' directory contains the following subdirectories:
   3230 
   3231 `LANGUAGE'
   3232      Subdirectories for various languages.  Directories containing a
   3233      file `config-lang.in' are language subdirectories.  The contents of
   3234      the subdirectories `cp' (for C++), `lto' (for LTO), `objc' (for
   3235      Objective-C) and `objcp' (for Objective-C++) are documented in
   3236      this manual (*note Passes and Files of the Compiler: Passes.);
   3237      those for other languages are not.  *Note Anatomy of a Language
   3238      Front End: Front End, for details of the files in these
   3239      directories.
   3240 
   3241 `config'
   3242      Configuration files for supported architectures and operating
   3243      systems.  *Note Anatomy of a Target Back End: Back End, for
   3244      details of the files in this directory.
   3245 
   3246 `doc'
   3247      Texinfo documentation for GCC, together with automatically
   3248      generated man pages and support for converting the installation
   3249      manual to HTML.  *Note Documentation::.
   3250 
   3251 `ginclude'
   3252      System headers installed by GCC, mainly those required by the C
   3253      standard of freestanding implementations.  *Note Headers Installed
   3254      by GCC: Headers, for details of when these and other headers are
   3255      installed.
   3256 
   3257 `po'
   3258      Message catalogs with translations of messages produced by GCC into
   3259      various languages, `LANGUAGE.po'.  This directory also contains
   3260      `gcc.pot', the template for these message catalogues, `exgettext',
   3261      a wrapper around `gettext' to extract the messages from the GCC
   3262      sources and create `gcc.pot', which is run by `make gcc.pot', and
   3263      `EXCLUDES', a list of files from which messages should not be
   3264      extracted.
   3265 
   3266 `testsuite'
   3267      The GCC testsuites (except for those for runtime libraries).
   3268      *Note Testsuites::.
   3269 
   3270 
   3271 File: gccint.info,  Node: Configuration,  Next: Build,  Prev: Subdirectories,  Up: gcc Directory
   3272 
   3273 6.3.2 Configuration in the `gcc' Directory
   3274 ------------------------------------------
   3275 
   3276 The `gcc' directory is configured with an Autoconf-generated script
   3277 `configure'.  The `configure' script is generated from `configure.ac'
   3278 and `aclocal.m4'.  From the files `configure.ac' and `acconfig.h',
   3279 Autoheader generates the file `config.in'.  The file `cstamp-h.in' is
   3280 used as a timestamp.
   3281 
   3282 * Menu:
   3283 
   3284 * Config Fragments::     Scripts used by `configure'.
   3285 * System Config::        The `config.build', `config.host', and
   3286                          `config.gcc' files.
   3287 * Configuration Files::  Files created by running `configure'.
   3288 
   3289 
   3290 File: gccint.info,  Node: Config Fragments,  Next: System Config,  Up: Configuration
   3291 
   3292 6.3.2.1 Scripts Used by `configure'
   3293 ...................................
   3294 
   3295 `configure' uses some other scripts to help in its work:
   3296 
   3297    * The standard GNU `config.sub' and `config.guess' files, kept in
   3298      the top level directory, are used.
   3299 
   3300    * The file `config.gcc' is used to handle configuration specific to
   3301      the particular target machine.  The file `config.build' is used to
   3302      handle configuration specific to the particular build machine.
   3303      The file `config.host' is used to handle configuration specific to
   3304      the particular host machine.  (In general, these should only be
   3305      used for features that cannot reasonably be tested in Autoconf
   3306      feature tests.)  *Note The `config.build'; `config.host'; and
   3307      `config.gcc' Files: System Config, for details of the contents of
   3308      these files.
   3309 
   3310    * Each language subdirectory has a file `LANGUAGE/config-lang.in'
   3311      that is used for front-end-specific configuration.  *Note The
   3312      Front End `config-lang.in' File: Front End Config, for details of
   3313      this file.
   3314 
   3315    * A helper script `configure.frag' is used as part of creating the
   3316      output of `configure'.
   3317 
   3318 
   3319 File: gccint.info,  Node: System Config,  Next: Configuration Files,  Prev: Config Fragments,  Up: Configuration
   3320 
   3321 6.3.2.2 The `config.build'; `config.host'; and `config.gcc' Files
   3322 .................................................................
   3323 
   3324 The `config.build' file contains specific rules for particular systems
   3325 which GCC is built on.  This should be used as rarely as possible, as
   3326 the behavior of the build system can always be detected by autoconf.
   3327 
   3328  The `config.host' file contains specific rules for particular systems
   3329 which GCC will run on.  This is rarely needed.
   3330 
   3331  The `config.gcc' file contains specific rules for particular systems
   3332 which GCC will generate code for.  This is usually needed.
   3333 
   3334  Each file has a list of the shell variables it sets, with
   3335 descriptions, at the top of the file.
   3336 
   3337  FIXME: document the contents of these files, and what variables should
   3338 be set to control build, host and target configuration.
   3339 
   3340 
   3341 File: gccint.info,  Node: Configuration Files,  Prev: System Config,  Up: Configuration
   3342 
   3343 6.3.2.3 Files Created by `configure'
   3344 ....................................
   3345 
   3346 Here we spell out what files will be set up by `configure' in the `gcc'
   3347 directory.  Some other files are created as temporary files in the
   3348 configuration process, and are not used in the subsequent build; these
   3349 are not documented.
   3350 
   3351    * `Makefile' is constructed from `Makefile.in', together with the
   3352      host and target fragments (*note Makefile Fragments: Fragments.)
   3353      `t-TARGET' and `x-HOST' from `config', if any, and language
   3354      Makefile fragments `LANGUAGE/Make-lang.in'.
   3355 
   3356    * `auto-host.h' contains information about the host machine
   3357      determined by `configure'.  If the host machine is different from
   3358      the build machine, then `auto-build.h' is also created, containing
   3359      such information about the build machine.
   3360 
   3361    * `config.status' is a script that may be run to recreate the
   3362      current configuration.
   3363 
   3364    * `configargs.h' is a header containing details of the arguments
   3365      passed to `configure' to configure GCC, and of the thread model
   3366      used.
   3367 
   3368    * `cstamp-h' is used as a timestamp.
   3369 
   3370    * If a language `config-lang.in' file (*note The Front End
   3371      `config-lang.in' File: Front End Config.) sets `outputs', then the
   3372      files listed in `outputs' there are also generated.
   3373 
   3374  The following configuration headers are created from the Makefile,
   3375 using `mkconfig.sh', rather than directly by `configure'.  `config.h',
   3376 `bconfig.h' and `tconfig.h' all contain the `xm-MACHINE.h' header, if
   3377 any, appropriate to the host, build and target machines respectively,
   3378 the configuration headers for the target, and some definitions; for the
   3379 host and build machines, these include the autoconfigured headers
   3380 generated by `configure'.  The other configuration headers are
   3381 determined by `config.gcc'.  They also contain the typedefs for `rtx',
   3382 `rtvec' and `tree'.
   3383 
   3384    * `config.h', for use in programs that run on the host machine.
   3385 
   3386    * `bconfig.h', for use in programs that run on the build machine.
   3387 
   3388    * `tconfig.h', for use in programs and libraries for the target
   3389      machine.
   3390 
   3391    * `tm_p.h', which includes the header `MACHINE-protos.h' that
   3392      contains prototypes for functions in the target `.c' file.  FIXME:
   3393      why is such a separate header necessary?
   3394 
   3395 
   3396 File: gccint.info,  Node: Build,  Next: Makefile,  Prev: Configuration,  Up: gcc Directory
   3397 
   3398 6.3.3 Build System in the `gcc' Directory
   3399 -----------------------------------------
   3400 
   3401 FIXME: describe the build system, including what is built in what
   3402 stages.  Also list the various source files that are used in the build
   3403 process but aren't source files of GCC itself and so aren't documented
   3404 below (*note Passes::).
   3405 
   3406 
   3407 File: gccint.info,  Node: Makefile,  Next: Library Files,  Prev: Build,  Up: gcc Directory
   3408 
   3409 6.3.4 Makefile Targets
   3410 ----------------------
   3411 
   3412 These targets are available from the `gcc' directory:
   3413 
   3414 `all'
   3415      This is the default target.  Depending on what your
   3416      build/host/target configuration is, it coordinates all the things
   3417      that need to be built.
   3418 
   3419 `doc'
   3420      Produce info-formatted documentation and man pages.  Essentially it
   3421      calls `make man' and `make info'.
   3422 
   3423 `dvi'
   3424      Produce DVI-formatted documentation.
   3425 
   3426 `pdf'
   3427      Produce PDF-formatted documentation.
   3428 
   3429 `html'
   3430      Produce HTML-formatted documentation.
   3431 
   3432 `man'
   3433      Generate man pages.
   3434 
   3435 `info'
   3436      Generate info-formatted pages.
   3437 
   3438 `mostlyclean'
   3439      Delete the files made while building the compiler.
   3440 
   3441 `clean'
   3442      That, and all the other files built by `make all'.
   3443 
   3444 `distclean'
   3445      That, and all the files created by `configure'.
   3446 
   3447 `maintainer-clean'
   3448      Distclean plus any file that can be generated from other files.
   3449      Note that additional tools may be required beyond what is normally
   3450      needed to build GCC.
   3451 
   3452 `srcextra'
   3453      Generates files in the source directory that are not
   3454      version-controlled but should go into a release tarball.
   3455 
   3456 `srcinfo'
   3457 `srcman'
   3458      Copies the info-formatted and manpage documentation into the source
   3459      directory usually for the purpose of generating a release tarball.
   3460 
   3461 `install'
   3462      Installs GCC.
   3463 
   3464 `uninstall'
   3465      Deletes installed files, though this is not supported.
   3466 
   3467 `check'
   3468      Run the testsuite.  This creates a `testsuite' subdirectory that
   3469      has various `.sum' and `.log' files containing the results of the
   3470      testing.  You can run subsets with, for example, `make check-gcc'.
   3471      You can specify specific tests by setting `RUNTESTFLAGS' to be the
   3472      name of the `.exp' file, optionally followed by (for some tests)
   3473      an equals and a file wildcard, like:
   3474 
   3475           make check-gcc RUNTESTFLAGS="execute.exp=19980413-*"
   3476 
   3477      Note that running the testsuite may require additional tools be
   3478      installed, such as Tcl or DejaGnu.
   3479 
   3480  The toplevel tree from which you start GCC compilation is not the GCC
   3481 directory, but rather a complex Makefile that coordinates the various
   3482 steps of the build, including bootstrapping the compiler and using the
   3483 new compiler to build target libraries.
   3484 
   3485  When GCC is configured for a native configuration, the default action
   3486 for `make' is to do a full three-stage bootstrap.  This means that GCC
   3487 is built three times--once with the native compiler, once with the
   3488 native-built compiler it just built, and once with the compiler it
   3489 built the second time.  In theory, the last two should produce the same
   3490 results, which `make compare' can check.  Each stage is configured
   3491 separately and compiled into a separate directory, to minimize problems
   3492 due to ABI incompatibilities between the native compiler and GCC.
   3493 
   3494  If you do a change, rebuilding will also start from the first stage
   3495 and "bubble" up the change through the three stages.  Each stage is
   3496 taken from its build directory (if it had been built previously),
   3497 rebuilt, and copied to its subdirectory.  This will allow you to, for
   3498 example, continue a bootstrap after fixing a bug which causes the
   3499 stage2 build to crash.  It does not provide as good coverage of the
   3500 compiler as bootstrapping from scratch, but it ensures that the new
   3501 code is syntactically correct (e.g., that you did not use GCC extensions
   3502 by mistake), and avoids spurious bootstrap comparison failures(1).
   3503 
   3504  Other targets available from the top level include:
   3505 
   3506 `bootstrap-lean'
   3507      Like `bootstrap', except that the various stages are removed once
   3508      they're no longer needed.  This saves disk space.
   3509 
   3510 `bootstrap2'
   3511 `bootstrap2-lean'
   3512      Performs only the first two stages of bootstrap.  Unlike a
   3513      three-stage bootstrap, this does not perform a comparison to test
   3514      that the compiler is running properly.  Note that the disk space
   3515      required by a "lean" bootstrap is approximately independent of the
   3516      number of stages.
   3517 
   3518 `stageN-bubble (N = 1...4, profile, feedback)'
   3519      Rebuild all the stages up to N, with the appropriate flags,
   3520      "bubbling" the changes as described above.
   3521 
   3522 `all-stageN (N = 1...4, profile, feedback)'
   3523      Assuming that stage N has already been built, rebuild it with the
   3524      appropriate flags.  This is rarely needed.
   3525 
   3526 `cleanstrap'
   3527      Remove everything (`make clean') and rebuilds (`make bootstrap').
   3528 
   3529 `compare'
   3530      Compares the results of stages 2 and 3.  This ensures that the
   3531      compiler is running properly, since it should produce the same
   3532      object files regardless of how it itself was compiled.
   3533 
   3534 `profiledbootstrap'
   3535      Builds a compiler with profiling feedback information.  In this
   3536      case, the second and third stages are named `profile' and
   3537      `feedback', respectively.  For more information, see *note
   3538      Building with profile feedback: (gccinstall)Building.
   3539 
   3540 `restrap'
   3541      Restart a bootstrap, so that everything that was not built with
   3542      the system compiler is rebuilt.
   3543 
   3544 `stageN-start (N = 1...4, profile, feedback)'
   3545      For each package that is bootstrapped, rename directories so that,
   3546      for example, `gcc' points to the stageN GCC, compiled with the
   3547      stageN-1 GCC(2).
   3548 
   3549      You will invoke this target if you need to test or debug the
   3550      stageN GCC.  If you only need to execute GCC (but you need not run
   3551      `make' either to rebuild it or to run test suites), you should be
   3552      able to work directly in the `stageN-gcc' directory.  This makes
   3553      it easier to debug multiple stages in parallel.
   3554 
   3555 `stage'
   3556      For each package that is bootstrapped, relocate its build directory
   3557      to indicate its stage.  For example, if the `gcc' directory points
   3558      to the stage2 GCC, after invoking this target it will be renamed
   3559      to `stage2-gcc'.
   3560 
   3561 
   3562  If you wish to use non-default GCC flags when compiling the stage2 and
   3563 stage3 compilers, set `BOOT_CFLAGS' on the command line when doing
   3564 `make'.
   3565 
   3566  Usually, the first stage only builds the languages that the compiler
   3567 is written in: typically, C and maybe Ada.  If you are debugging a
   3568 miscompilation of a different stage2 front-end (for example, of the
   3569 Fortran front-end), you may want to have front-ends for other languages
   3570 in the first stage as well.  To do so, set `STAGE1_LANGUAGES' on the
   3571 command line when doing `make'.
   3572 
   3573  For example, in the aforementioned scenario of debugging a Fortran
   3574 front-end miscompilation caused by the stage1 compiler, you may need a
   3575 command like
   3576 
   3577      make stage2-bubble STAGE1_LANGUAGES=c,fortran
   3578 
   3579  Alternatively, you can use per-language targets to build and test
   3580 languages that are not enabled by default in stage1.  For example,
   3581 `make f951' will build a Fortran compiler even in the stage1 build
   3582 directory.
   3583 
   3584  ---------- Footnotes ----------
   3585 
   3586  (1) Except if the compiler was buggy and miscompiled some of the files
   3587 that were not modified.  In this case, it's best to use `make restrap'.
   3588 
   3589  (2) Customarily, the system compiler is also termed the `stage0' GCC.
   3590 
   3591 
   3592 File: gccint.info,  Node: Library Files,  Next: Headers,  Prev: Makefile,  Up: gcc Directory
   3593 
   3594 6.3.5 Library Source Files and Headers under the `gcc' Directory
   3595 ----------------------------------------------------------------
   3596 
   3597 FIXME: list here, with explanation, all the C source files and headers
   3598 under the `gcc' directory that aren't built into the GCC executable but
   3599 rather are part of runtime libraries and object files, such as
   3600 `crtstuff.c' and `unwind-dw2.c'.  *Note Headers Installed by GCC:
   3601 Headers, for more information about the `ginclude' directory.
   3602 
   3603 
   3604 File: gccint.info,  Node: Headers,  Next: Documentation,  Prev: Library Files,  Up: gcc Directory
   3605 
   3606 6.3.6 Headers Installed by GCC
   3607 ------------------------------
   3608 
   3609 In general, GCC expects the system C library to provide most of the
   3610 headers to be used with it.  However, GCC will fix those headers if
   3611 necessary to make them work with GCC, and will install some headers
   3612 required of freestanding implementations.  These headers are installed
   3613 in `LIBSUBDIR/include'.  Headers for non-C runtime libraries are also
   3614 installed by GCC; these are not documented here.  (FIXME: document them
   3615 somewhere.)
   3616 
   3617  Several of the headers GCC installs are in the `ginclude' directory.
   3618 These headers, `iso646.h', `stdarg.h', `stdbool.h', and `stddef.h', are
   3619 installed in `LIBSUBDIR/include', unless the target Makefile fragment
   3620 (*note Target Fragment::) overrides this by setting `USER_H'.
   3621 
   3622  In addition to these headers and those generated by fixing system
   3623 headers to work with GCC, some other headers may also be installed in
   3624 `LIBSUBDIR/include'.  `config.gcc' may set `extra_headers'; this
   3625 specifies additional headers under `config' to be installed on some
   3626 systems.
   3627 
   3628  GCC installs its own version of `<float.h>', from `ginclude/float.h'.
   3629 This is done to cope with command-line options that change the
   3630 representation of floating point numbers.
   3631 
   3632  GCC also installs its own version of `<limits.h>'; this is generated
   3633 from `glimits.h', together with `limitx.h' and `limity.h' if the system
   3634 also has its own version of `<limits.h>'.  (GCC provides its own header
   3635 because it is required of ISO C freestanding implementations, but needs
   3636 to include the system header from its own header as well because other
   3637 standards such as POSIX specify additional values to be defined in
   3638 `<limits.h>'.)  The system's `<limits.h>' header is used via
   3639 `LIBSUBDIR/include/syslimits.h', which is copied from `gsyslimits.h' if
   3640 it does not need fixing to work with GCC; if it needs fixing,
   3641 `syslimits.h' is the fixed copy.
   3642 
   3643  GCC can also install `<tgmath.h>'.  It will do this when `config.gcc'
   3644 sets `use_gcc_tgmath' to `yes'.
   3645 
   3646 
   3647 File: gccint.info,  Node: Documentation,  Next: Front End,  Prev: Headers,  Up: gcc Directory
   3648 
   3649 6.3.7 Building Documentation
   3650 ----------------------------
   3651 
   3652 The main GCC documentation is in the form of manuals in Texinfo format.
   3653 These are installed in Info format; DVI versions may be generated by
   3654 `make dvi', PDF versions by `make pdf', and HTML versions by `make
   3655 html'.  In addition, some man pages are generated from the Texinfo
   3656 manuals, there are some other text files with miscellaneous
   3657 documentation, and runtime libraries have their own documentation
   3658 outside the `gcc' directory.  FIXME: document the documentation for
   3659 runtime libraries somewhere.
   3660 
   3661 * Menu:
   3662 
   3663 * Texinfo Manuals::      GCC manuals in Texinfo format.
   3664 * Man Page Generation::  Generating man pages from Texinfo manuals.
   3665 * Miscellaneous Docs::   Miscellaneous text files with documentation.
   3666 
   3667 
   3668 File: gccint.info,  Node: Texinfo Manuals,  Next: Man Page Generation,  Up: Documentation
   3669 
   3670 6.3.7.1 Texinfo Manuals
   3671 .......................
   3672 
   3673 The manuals for GCC as a whole, and the C and C++ front ends, are in
   3674 files `doc/*.texi'.  Other front ends have their own manuals in files
   3675 `LANGUAGE/*.texi'.  Common files `doc/include/*.texi' are provided
   3676 which may be included in multiple manuals; the following files are in
   3677 `doc/include':
   3678 
   3679 `fdl.texi'
   3680      The GNU Free Documentation License.
   3681 
   3682 `funding.texi'
   3683      The section "Funding Free Software".
   3684 
   3685 `gcc-common.texi'
   3686      Common definitions for manuals.
   3687 
   3688 `gpl.texi'
   3689 `gpl_v3.texi'
   3690      The GNU General Public License.
   3691 
   3692 `texinfo.tex'
   3693      A copy of `texinfo.tex' known to work with the GCC manuals.
   3694 
   3695  DVI-formatted manuals are generated by `make dvi', which uses
   3696 `texi2dvi' (via the Makefile macro `$(TEXI2DVI)').  PDF-formatted
   3697 manuals are generated by `make pdf', which uses `texi2pdf' (via the
   3698 Makefile macro `$(TEXI2PDF)').  HTML formatted manuals are generated by
   3699 `make html'.  Info manuals are generated by `make info' (which is run
   3700 as part of a bootstrap); this generates the manuals in the source
   3701 directory, using `makeinfo' via the Makefile macro `$(MAKEINFO)', and
   3702 they are included in release distributions.
   3703 
   3704  Manuals are also provided on the GCC web site, in both HTML and
   3705 PostScript forms.  This is done via the script
   3706 `maintainer-scripts/update_web_docs_svn'.  Each manual to be provided
   3707 online must be listed in the definition of `MANUALS' in that file; a
   3708 file `NAME.texi' must only appear once in the source tree, and the
   3709 output manual must have the same name as the source file.  (However,
   3710 other Texinfo files, included in manuals but not themselves the root
   3711 files of manuals, may have names that appear more than once in the
   3712 source tree.)  The manual file `NAME.texi' should only include other
   3713 files in its own directory or in `doc/include'.  HTML manuals will be
   3714 generated by `makeinfo --html', PostScript manuals by `texi2dvi' and
   3715 `dvips', and PDF manuals by `texi2pdf'.  All Texinfo files that are
   3716 parts of manuals must be version-controlled, even if they are generated
   3717 files, for the generation of online manuals to work.
   3718 
   3719  The installation manual, `doc/install.texi', is also provided on the
   3720 GCC web site.  The HTML version is generated by the script
   3721 `doc/install.texi2html'.
   3722 
   3723 
   3724 File: gccint.info,  Node: Man Page Generation,  Next: Miscellaneous Docs,  Prev: Texinfo Manuals,  Up: Documentation
   3725 
   3726 6.3.7.2 Man Page Generation
   3727 ...........................
   3728 
   3729 Because of user demand, in addition to full Texinfo manuals, man pages
   3730 are provided which contain extracts from those manuals.  These man
   3731 pages are generated from the Texinfo manuals using
   3732 `contrib/texi2pod.pl' and `pod2man'.  (The man page for `g++',
   3733 `cp/g++.1', just contains a `.so' reference to `gcc.1', but all the
   3734 other man pages are generated from Texinfo manuals.)
   3735 
   3736  Because many systems may not have the necessary tools installed to
   3737 generate the man pages, they are only generated if the `configure'
   3738 script detects that recent enough tools are installed, and the
   3739 Makefiles allow generating man pages to fail without aborting the
   3740 build.  Man pages are also included in release distributions.  They are
   3741 generated in the source directory.
   3742 
   3743  Magic comments in Texinfo files starting `@c man' control what parts
   3744 of a Texinfo file go into a man page.  Only a subset of Texinfo is
   3745 supported by `texi2pod.pl', and it may be necessary to add support for
   3746 more Texinfo features to this script when generating new man pages.  To
   3747 improve the man page output, some special Texinfo macros are provided
   3748 in `doc/include/gcc-common.texi' which `texi2pod.pl' understands:
   3749 
   3750 `@gcctabopt'
   3751      Use in the form `@table @gcctabopt' for tables of options, where
   3752      for printed output the effect of `@code' is better than that of
   3753      `@option' but for man page output a different effect is wanted.
   3754 
   3755 `@gccoptlist'
   3756      Use for summary lists of options in manuals.
   3757 
   3758 `@gol'
   3759      Use at the end of each line inside `@gccoptlist'.  This is
   3760      necessary to avoid problems with differences in how the
   3761      `@gccoptlist' macro is handled by different Texinfo formatters.
   3762 
   3763  FIXME: describe the `texi2pod.pl' input language and magic comments in
   3764 more detail.
   3765 
   3766 
   3767 File: gccint.info,  Node: Miscellaneous Docs,  Prev: Man Page Generation,  Up: Documentation
   3768 
   3769 6.3.7.3 Miscellaneous Documentation
   3770 ...................................
   3771 
   3772 In addition to the formal documentation that is installed by GCC, there
   3773 are several other text files in the `gcc' subdirectory with
   3774 miscellaneous documentation:
   3775 
   3776 `ABOUT-GCC-NLS'
   3777      Notes on GCC's Native Language Support.  FIXME: this should be
   3778      part of this manual rather than a separate file.
   3779 
   3780 `ABOUT-NLS'
   3781      Notes on the Free Translation Project.
   3782 
   3783 `COPYING'
   3784 `COPYING3'
   3785      The GNU General Public License, Versions 2 and 3.
   3786 
   3787 `COPYING.LIB'
   3788 `COPYING3.LIB'
   3789      The GNU Lesser General Public License, Versions 2.1 and 3.
   3790 
   3791 `*ChangeLog*'
   3792 `*/ChangeLog*'
   3793      Change log files for various parts of GCC.
   3794 
   3795 `LANGUAGES'
   3796      Details of a few changes to the GCC front-end interface.  FIXME:
   3797      the information in this file should be part of general
   3798      documentation of the front-end interface in this manual.
   3799 
   3800 `ONEWS'
   3801      Information about new features in old versions of GCC.  (For recent
   3802      versions, the information is on the GCC web site.)
   3803 
   3804 `README.Portability'
   3805      Information about portability issues when writing code in GCC.
   3806      FIXME: why isn't this part of this manual or of the GCC Coding
   3807      Conventions?
   3808 
   3809  FIXME: document such files in subdirectories, at least `config', `cp',
   3810 `objc', `testsuite'.
   3811 
   3812 
   3813 File: gccint.info,  Node: Front End,  Next: Back End,  Prev: Documentation,  Up: gcc Directory
   3814 
   3815 6.3.8 Anatomy of a Language Front End
   3816 -------------------------------------
   3817 
   3818 A front end for a language in GCC has the following parts:
   3819 
   3820    * A directory `LANGUAGE' under `gcc' containing source files for
   3821      that front end.  *Note The Front End `LANGUAGE' Directory: Front
   3822      End Directory, for details.
   3823 
   3824    * A mention of the language in the list of supported languages in
   3825      `gcc/doc/install.texi'.
   3826 
   3827    * A mention of the name under which the language's runtime library is
   3828      recognized by `--enable-shared=PACKAGE' in the documentation of
   3829      that option in `gcc/doc/install.texi'.
   3830 
   3831    * A mention of any special prerequisites for building the front end
   3832      in the documentation of prerequisites in `gcc/doc/install.texi'.
   3833 
   3834    * Details of contributors to that front end in
   3835      `gcc/doc/contrib.texi'.  If the details are in that front end's
   3836      own manual then there should be a link to that manual's list in
   3837      `contrib.texi'.
   3838 
   3839    * Information about support for that language in
   3840      `gcc/doc/frontends.texi'.
   3841 
   3842    * Information about standards for that language, and the front end's
   3843      support for them, in `gcc/doc/standards.texi'.  This may be a link
   3844      to such information in the front end's own manual.
   3845 
   3846    * Details of source file suffixes for that language and `-x LANG'
   3847      options supported, in `gcc/doc/invoke.texi'.
   3848 
   3849    * Entries in `default_compilers' in `gcc.c' for source file suffixes
   3850      for that language.
   3851 
   3852    * Preferably testsuites, which may be under `gcc/testsuite' or
   3853      runtime library directories.  FIXME: document somewhere how to
   3854      write testsuite harnesses.
   3855 
   3856    * Probably a runtime library for the language, outside the `gcc'
   3857      directory.  FIXME: document this further.
   3858 
   3859    * Details of the directories of any runtime libraries in
   3860      `gcc/doc/sourcebuild.texi'.
   3861 
   3862    * Check targets in `Makefile.def' for the top-level `Makefile' to
   3863      check just the compiler or the compiler and runtime library for the
   3864      language.
   3865 
   3866  If the front end is added to the official GCC source repository, the
   3867 following are also necessary:
   3868 
   3869    * At least one Bugzilla component for bugs in that front end and
   3870      runtime libraries.  This category needs to be added to the
   3871      Bugzilla database.
   3872 
   3873    * Normally, one or more maintainers of that front end listed in
   3874      `MAINTAINERS'.
   3875 
   3876    * Mentions on the GCC web site in `index.html' and `frontends.html',
   3877      with any relevant links on `readings.html'.  (Front ends that are
   3878      not an official part of GCC may also be listed on
   3879      `frontends.html', with relevant links.)
   3880 
   3881    * A news item on `index.html', and possibly an announcement on the
   3882      <gcc-announce (a] gcc.gnu.org> mailing list.
   3883 
   3884    * The front end's manuals should be mentioned in
   3885      `maintainer-scripts/update_web_docs_svn' (*note Texinfo Manuals::)
   3886      and the online manuals should be linked to from
   3887      `onlinedocs/index.html'.
   3888 
   3889    * Any old releases or CVS repositories of the front end, before its
   3890      inclusion in GCC, should be made available on the GCC FTP site
   3891      `ftp://gcc.gnu.org/pub/gcc/old-releases/'.
   3892 
   3893    * The release and snapshot script `maintainer-scripts/gcc_release'
   3894      should be updated to generate appropriate tarballs for this front
   3895      end.
   3896 
   3897    * If this front end includes its own version files that include the
   3898      current date, `maintainer-scripts/update_version' should be
   3899      updated accordingly.
   3900 
   3901 * Menu:
   3902 
   3903 * Front End Directory::  The front end `LANGUAGE' directory.
   3904 * Front End Config::     The front end `config-lang.in' file.
   3905 * Front End Makefile::   The front end `Make-lang.in' file.
   3906 
   3907 
   3908 File: gccint.info,  Node: Front End Directory,  Next: Front End Config,  Up: Front End
   3909 
   3910 6.3.8.1 The Front End `LANGUAGE' Directory
   3911 ..........................................
   3912 
   3913 A front end `LANGUAGE' directory contains the source files of that
   3914 front end (but not of any runtime libraries, which should be outside
   3915 the `gcc' directory).  This includes documentation, and possibly some
   3916 subsidiary programs built alongside the front end.  Certain files are
   3917 special and other parts of the compiler depend on their names:
   3918 
   3919 `config-lang.in'
   3920      This file is required in all language subdirectories.  *Note The
   3921      Front End `config-lang.in' File: Front End Config, for details of
   3922      its contents
   3923 
   3924 `Make-lang.in'
   3925      This file is required in all language subdirectories.  *Note The
   3926      Front End `Make-lang.in' File: Front End Makefile, for details of
   3927      its contents.
   3928 
   3929 `lang.opt'
   3930      This file registers the set of switches that the front end accepts
   3931      on the command line, and their `--help' text.  *Note Options::.
   3932 
   3933 `lang-specs.h'
   3934      This file provides entries for `default_compilers' in `gcc.c'
   3935      which override the default of giving an error that a compiler for
   3936      that language is not installed.
   3937 
   3938 `LANGUAGE-tree.def'
   3939      This file, which need not exist, defines any language-specific tree
   3940      codes.
   3941 
   3942 
   3943 File: gccint.info,  Node: Front End Config,  Next: Front End Makefile,  Prev: Front End Directory,  Up: Front End
   3944 
   3945 6.3.8.2 The Front End `config-lang.in' File
   3946 ...........................................
   3947 
   3948 Each language subdirectory contains a `config-lang.in' file.  In
   3949 addition the main directory contains `c-config-lang.in', which contains
   3950 limited information for the C language.  This file is a shell script
   3951 that may define some variables describing the language:
   3952 
   3953 `language'
   3954      This definition must be present, and gives the name of the language
   3955      for some purposes such as arguments to `--enable-languages'.
   3956 
   3957 `lang_requires'
   3958      If defined, this variable lists (space-separated) language front
   3959      ends other than C that this front end requires to be enabled (with
   3960      the names given being their `language' settings).  For example, the
   3961      Java front end depends on the C++ front end, so sets
   3962      `lang_requires=c++'.
   3963 
   3964 `subdir_requires'
   3965      If defined, this variable lists (space-separated) front end
   3966      directories other than C that this front end requires to be
   3967      present.  For example, the Objective-C++ front end uses source
   3968      files from the C++ and Objective-C front ends, so sets
   3969      `subdir_requires="cp objc"'.
   3970 
   3971 `target_libs'
   3972      If defined, this variable lists (space-separated) targets in the
   3973      top level `Makefile' to build the runtime libraries for this
   3974      language, such as `target-libobjc'.
   3975 
   3976 `lang_dirs'
   3977      If defined, this variable lists (space-separated) top level
   3978      directories (parallel to `gcc'), apart from the runtime libraries,
   3979      that should not be configured if this front end is not built.
   3980 
   3981 `build_by_default'
   3982      If defined to `no', this language front end is not built unless
   3983      enabled in a `--enable-languages' argument.  Otherwise, front ends
   3984      are built by default, subject to any special logic in
   3985      `configure.ac' (as is present to disable the Ada front end if the
   3986      Ada compiler is not already installed).
   3987 
   3988 `boot_language'
   3989      If defined to `yes', this front end is built in stage1 of the
   3990      bootstrap.  This is only relevant to front ends written in their
   3991      own languages.
   3992 
   3993 `compilers'
   3994      If defined, a space-separated list of compiler executables that
   3995      will be run by the driver.  The names here will each end with
   3996      `\$(exeext)'.
   3997 
   3998 `outputs'
   3999      If defined, a space-separated list of files that should be
   4000      generated by `configure' substituting values in them.  This
   4001      mechanism can be used to create a file `LANGUAGE/Makefile' from
   4002      `LANGUAGE/Makefile.in', but this is deprecated, building
   4003      everything from the single `gcc/Makefile' is preferred.
   4004 
   4005 `gtfiles'
   4006      If defined, a space-separated list of files that should be scanned
   4007      by `gengtype.c' to generate the garbage collection tables and
   4008      routines for this language.  This excludes the files that are
   4009      common to all front ends.  *Note Type Information::.
   4010 
   4011 
   4012 
   4013 File: gccint.info,  Node: Front End Makefile,  Prev: Front End Config,  Up: Front End
   4014 
   4015 6.3.8.3 The Front End `Make-lang.in' File
   4016 .........................................
   4017 
   4018 Each language subdirectory contains a `Make-lang.in' file.  It contains
   4019 targets `LANG.HOOK' (where `LANG' is the setting of `language' in
   4020 `config-lang.in') for the following values of `HOOK', and any other
   4021 Makefile rules required to build those targets (which may if necessary
   4022 use other Makefiles specified in `outputs' in `config-lang.in',
   4023 although this is deprecated).  It also adds any testsuite targets that
   4024 can use the standard rule in `gcc/Makefile.in' to the variable
   4025 `lang_checks'.
   4026 
   4027 `all.cross'
   4028 `start.encap'
   4029 `rest.encap'
   4030      FIXME: exactly what goes in each of these targets?
   4031 
   4032 `tags'
   4033      Build an `etags' `TAGS' file in the language subdirectory in the
   4034      source tree.
   4035 
   4036 `info'
   4037      Build info documentation for the front end, in the build directory.
   4038      This target is only called by `make bootstrap' if a suitable
   4039      version of `makeinfo' is available, so does not need to check for
   4040      this, and should fail if an error occurs.
   4041 
   4042 `dvi'
   4043      Build DVI documentation for the front end, in the build directory.
   4044      This should be done using `$(TEXI2DVI)', with appropriate `-I'
   4045      arguments pointing to directories of included files.
   4046 
   4047 `pdf'
   4048      Build PDF documentation for the front end, in the build directory.
   4049      This should be done using `$(TEXI2PDF)', with appropriate `-I'
   4050      arguments pointing to directories of included files.
   4051 
   4052 `html'
   4053      Build HTML documentation for the front end, in the build directory.
   4054 
   4055 `man'
   4056      Build generated man pages for the front end from Texinfo manuals
   4057      (*note Man Page Generation::), in the build directory.  This target
   4058      is only called if the necessary tools are available, but should
   4059      ignore errors so as not to stop the build if errors occur; man
   4060      pages are optional and the tools involved may be installed in a
   4061      broken way.
   4062 
   4063 `install-common'
   4064      Install everything that is part of the front end, apart from the
   4065      compiler executables listed in `compilers' in `config-lang.in'.
   4066 
   4067 `install-info'
   4068      Install info documentation for the front end, if it is present in
   4069      the source directory.  This target should have dependencies on
   4070      info files that should be installed.
   4071 
   4072 `install-man'
   4073      Install man pages for the front end.  This target should ignore
   4074      errors.
   4075 
   4076 `install-plugin'
   4077      Install headers needed for plugins.
   4078 
   4079 `srcextra'
   4080      Copies its dependencies into the source directory.  This generally
   4081      should be used for generated files such as Bison output files
   4082      which are not version-controlled, but should be included in any
   4083      release tarballs.  This target will be executed during a bootstrap
   4084      if `--enable-generated-files-in-srcdir' was specified as a
   4085      `configure' option.
   4086 
   4087 `srcinfo'
   4088 `srcman'
   4089      Copies its dependencies into the source directory.  These targets
   4090      will be executed during a bootstrap if
   4091      `--enable-generated-files-in-srcdir' was specified as a
   4092      `configure' option.
   4093 
   4094 `uninstall'
   4095      Uninstall files installed by installing the compiler.  This is
   4096      currently documented not to be supported, so the hook need not do
   4097      anything.
   4098 
   4099 `mostlyclean'
   4100 `clean'
   4101 `distclean'
   4102 `maintainer-clean'
   4103      The language parts of the standard GNU `*clean' targets.  *Note
   4104      Standard Targets for Users: (standards)Standard Targets, for
   4105      details of the standard targets.  For GCC, `maintainer-clean'
   4106      should delete all generated files in the source directory that are
   4107      not version-controlled, but should not delete anything that is.
   4108 
   4109  `Make-lang.in' must also define a variable `LANG_OBJS' to a list of
   4110 host object files that are used by that language.
   4111 
   4112 
   4113 File: gccint.info,  Node: Back End,  Prev: Front End,  Up: gcc Directory
   4114 
   4115 6.3.9 Anatomy of a Target Back End
   4116 ----------------------------------
   4117 
   4118 A back end for a target architecture in GCC has the following parts:
   4119 
   4120    * A directory `MACHINE' under `gcc/config', containing a machine
   4121      description `MACHINE.md' file (*note Machine Descriptions: Machine
   4122      Desc.), header files `MACHINE.h' and `MACHINE-protos.h' and a
   4123      source file `MACHINE.c' (*note Target Description Macros and
   4124      Functions: Target Macros.), possibly a target Makefile fragment
   4125      `t-MACHINE' (*note The Target Makefile Fragment: Target
   4126      Fragment.), and maybe some other files.  The names of these files
   4127      may be changed from the defaults given by explicit specifications
   4128      in `config.gcc'.
   4129 
   4130    * If necessary, a file `MACHINE-modes.def' in the `MACHINE'
   4131      directory, containing additional machine modes to represent
   4132      condition codes.  *Note Condition Code::, for further details.
   4133 
   4134    * An optional `MACHINE.opt' file in the `MACHINE' directory,
   4135      containing a list of target-specific options.  You can also add
   4136      other option files using the `extra_options' variable in
   4137      `config.gcc'.  *Note Options::.
   4138 
   4139    * Entries in `config.gcc' (*note The `config.gcc' File: System
   4140      Config.) for the systems with this target architecture.
   4141 
   4142    * Documentation in `gcc/doc/invoke.texi' for any command-line
   4143      options supported by this target (*note Run-time Target
   4144      Specification: Run-time Target.).  This means both entries in the
   4145      summary table of options and details of the individual options.
   4146 
   4147    * Documentation in `gcc/doc/extend.texi' for any target-specific
   4148      attributes supported (*note Defining target-specific uses of
   4149      `__attribute__': Target Attributes.), including where the same
   4150      attribute is already supported on some targets, which are
   4151      enumerated in the manual.
   4152 
   4153    * Documentation in `gcc/doc/extend.texi' for any target-specific
   4154      pragmas supported.
   4155 
   4156    * Documentation in `gcc/doc/extend.texi' of any target-specific
   4157      built-in functions supported.
   4158 
   4159    * Documentation in `gcc/doc/extend.texi' of any target-specific
   4160      format checking styles supported.
   4161 
   4162    * Documentation in `gcc/doc/md.texi' of any target-specific
   4163      constraint letters (*note Constraints for Particular Machines:
   4164      Machine Constraints.).
   4165 
   4166    * A note in `gcc/doc/contrib.texi' under the person or people who
   4167      contributed the target support.
   4168 
   4169    * Entries in `gcc/doc/install.texi' for all target triplets
   4170      supported with this target architecture, giving details of any
   4171      special notes about installation for this target, or saying that
   4172      there are no special notes if there are none.
   4173 
   4174    * Possibly other support outside the `gcc' directory for runtime
   4175      libraries.  FIXME: reference docs for this.  The `libstdc++'
   4176      porting manual needs to be installed as info for this to work, or
   4177      to be a chapter of this manual.
   4178 
   4179  If the back end is added to the official GCC source repository, the
   4180 following are also necessary:
   4181 
   4182    * An entry for the target architecture in `readings.html' on the GCC
   4183      web site, with any relevant links.
   4184 
   4185    * Details of the properties of the back end and target architecture
   4186      in `backends.html' on the GCC web site.
   4187 
   4188    * A news item about the contribution of support for that target
   4189      architecture, in `index.html' on the GCC web site.
   4190 
   4191    * Normally, one or more maintainers of that target listed in
   4192      `MAINTAINERS'.  Some existing architectures may be unmaintained,
   4193      but it would be unusual to add support for a target that does not
   4194      have a maintainer when support is added.
   4195 
   4196 
   4197 File: gccint.info,  Node: Testsuites,  Next: Options,  Prev: Source Tree,  Up: Top
   4198 
   4199 7 Testsuites
   4200 ************
   4201 
   4202 GCC contains several testsuites to help maintain compiler quality.
   4203 Most of the runtime libraries and language front ends in GCC have
   4204 testsuites.  Currently only the C language testsuites are documented
   4205 here; FIXME: document the others.
   4206 
   4207 * Menu:
   4208 
   4209 * Test Idioms::     Idioms used in testsuite code.
   4210 * Test Directives:: Directives used within DejaGnu tests.
   4211 * Ada Tests::       The Ada language testsuites.
   4212 * C Tests::         The C language testsuites.
   4213 * libgcj Tests::    The Java library testsuites.
   4214 * LTO Testing::     Support for testing link-time optimizations.
   4215 * gcov Testing::    Support for testing gcov.
   4216 * profopt Testing:: Support for testing profile-directed optimizations.
   4217 * compat Testing::  Support for testing binary compatibility.
   4218 * Torture Tests::   Support for torture testing using multiple options.
   4219 
   4220 
   4221 File: gccint.info,  Node: Test Idioms,  Next: Test Directives,  Up: Testsuites
   4222 
   4223 7.1 Idioms Used in Testsuite Code
   4224 =================================
   4225 
   4226 In general, C testcases have a trailing `-N.c', starting with `-1.c',
   4227 in case other testcases with similar names are added later.  If the
   4228 test is a test of some well-defined feature, it should have a name
   4229 referring to that feature such as `FEATURE-1.c'.  If it does not test a
   4230 well-defined feature but just happens to exercise a bug somewhere in
   4231 the compiler, and a bug report has been filed for this bug in the GCC
   4232 bug database, `prBUG-NUMBER-1.c' is the appropriate form of name.
   4233 Otherwise (for miscellaneous bugs not filed in the GCC bug database),
   4234 and previously more generally, test cases are named after the date on
   4235 which they were added.  This allows people to tell at a glance whether
   4236 a test failure is because of a recently found bug that has not yet been
   4237 fixed, or whether it may be a regression, but does not give any other
   4238 information about the bug or where discussion of it may be found.  Some
   4239 other language testsuites follow similar conventions.
   4240 
   4241  In the `gcc.dg' testsuite, it is often necessary to test that an error
   4242 is indeed a hard error and not just a warning--for example, where it is
   4243 a constraint violation in the C standard, which must become an error
   4244 with `-pedantic-errors'.  The following idiom, where the first line
   4245 shown is line LINE of the file and the line that generates the error,
   4246 is used for this:
   4247 
   4248      /* { dg-bogus "warning" "warning in place of error" } */
   4249      /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */
   4250 
   4251  It may be necessary to check that an expression is an integer constant
   4252 expression and has a certain value.  To check that `E' has value `V',
   4253 an idiom similar to the following is used:
   4254 
   4255      char x[((E) == (V) ? 1 : -1)];
   4256 
   4257  In `gcc.dg' tests, `__typeof__' is sometimes used to make assertions
   4258 about the types of expressions.  See, for example,
   4259 `gcc.dg/c99-condexpr-1.c'.  The more subtle uses depend on the exact
   4260 rules for the types of conditional expressions in the C standard; see,
   4261 for example, `gcc.dg/c99-intconst-1.c'.
   4262 
   4263  It is useful to be able to test that optimizations are being made
   4264 properly.  This cannot be done in all cases, but it can be done where
   4265 the optimization will lead to code being optimized away (for example,
   4266 where flow analysis or alias analysis should show that certain code
   4267 cannot be called) or to functions not being called because they have
   4268 been expanded as built-in functions.  Such tests go in
   4269 `gcc.c-torture/execute'.  Where code should be optimized away, a call
   4270 to a nonexistent function such as `link_failure ()' may be inserted; a
   4271 definition
   4272 
   4273      #ifndef __OPTIMIZE__
   4274      void
   4275      link_failure (void)
   4276      {
   4277        abort ();
   4278      }
   4279      #endif
   4280 
   4281 will also be needed so that linking still succeeds when the test is run
   4282 without optimization.  When all calls to a built-in function should
   4283 have been optimized and no calls to the non-built-in version of the
   4284 function should remain, that function may be defined as `static' to
   4285 call `abort ()' (although redeclaring a function as static may not work
   4286 on all targets).
   4287 
   4288  All testcases must be portable.  Target-specific testcases must have
   4289 appropriate code to avoid causing failures on unsupported systems;
   4290 unfortunately, the mechanisms for this differ by directory.
   4291 
   4292  FIXME: discuss non-C testsuites here.
   4293 
   4294 
   4295 File: gccint.info,  Node: Test Directives,  Next: Ada Tests,  Prev: Test Idioms,  Up: Testsuites
   4296 
   4297 7.2 Directives used within DejaGnu tests
   4298 ========================================
   4299 
   4300 * Menu:
   4301 
   4302 * Directives::  Syntax and descriptions of test directives.
   4303 * Selectors:: Selecting targets to which a test applies.
   4304 * Effective-Target Keywords:: Keywords describing target attributes.
   4305 * Add Options:: Features for `dg-add-options'
   4306 * Require Support:: Variants of `dg-require-SUPPORT'
   4307 * Final Actions:: Commands for use in `dg-final'
   4308 
   4309 
   4310 File: gccint.info,  Node: Directives,  Next: Selectors,  Up: Test Directives
   4311 
   4312 7.2.1 Syntax and Descriptions of test directives
   4313 ------------------------------------------------
   4314 
   4315 Test directives appear within comments in a test source file and begin
   4316 with `dg-'.  Some of these are defined within DejaGnu and others are
   4317 local to the GCC testsuite.
   4318 
   4319  The order in which test directives appear in a test can be important:
   4320 directives local to GCC sometimes override information used by the
   4321 DejaGnu directives, which know nothing about the GCC directives, so the
   4322 DejaGnu directives must precede GCC directives.
   4323 
   4324  Several test directives include selectors (*note Selectors::) which
   4325 are usually preceded by the keyword `target' or `xfail'.
   4326 
   4327 7.2.1.1 Specify how to build the test
   4328 .....................................
   4329 
   4330 `{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }'
   4331      DO-WHAT-KEYWORD specifies how the test is compiled and whether it
   4332      is executed.  It is one of:
   4333 
   4334     `preprocess'
   4335           Compile with `-E' to run only the preprocessor.
   4336 
   4337     `compile'
   4338           Compile with `-S' to produce an assembly code file.
   4339 
   4340     `assemble'
   4341           Compile with `-c' to produce a relocatable object file.
   4342 
   4343     `link'
   4344           Compile, assemble, and link to produce an executable file.
   4345 
   4346     `run'
   4347           Produce and run an executable file, which is expected to
   4348           return an exit code of 0.
   4349 
   4350      The default is `compile'.  That can be overridden for a set of
   4351      tests by redefining `dg-do-what-default' within the `.exp' file
   4352      for those tests.
   4353 
   4354      If the directive includes the optional `{ target SELECTOR }' then
   4355      the test is skipped unless the target system matches the SELECTOR.
   4356 
   4357      If DO-WHAT-KEYWORD is `run' and the directive includes the
   4358      optional `{ xfail SELECTOR }' and the selector is met then the
   4359      test is expected to fail.  The `xfail' clause is ignored for other
   4360      values of DO-WHAT-KEYWORD; those tests can use directive
   4361      `dg-xfail-if'.
   4362 
   4363 7.2.1.2 Specify additional compiler options
   4364 ...........................................
   4365 
   4366 `{ dg-options OPTIONS [{ target SELECTOR }] }'
   4367      This DejaGnu directive provides a list of compiler options, to be
   4368      used if the target system matches SELECTOR, that replace the
   4369      default options used for this set of tests.
   4370 
   4371 `{ dg-add-options FEATURE ... }'
   4372      Add any compiler options that are needed to access certain
   4373      features.  This directive does nothing on targets that enable the
   4374      features by default, or that don't provide them at all.  It must
   4375      come after all `dg-options' directives.  For supported values of
   4376      FEATURE see *note Add Options::.
   4377 
   4378 7.2.1.3 Modify the test timeout value
   4379 .....................................
   4380 
   4381 The normal timeout limit, in seconds, is found by searching the
   4382 following in order:
   4383 
   4384    * the value defined by an earlier `dg-timeout' directive in the test
   4385 
   4386    * variable TOOL_TIMEOUT defined by the set of tests
   4387 
   4388    * GCC,TIMEOUT set in the target board
   4389 
   4390    * 300
   4391 
   4392 `{ dg-timeout N [{target SELECTOR }] }'
   4393      Set the time limit for the compilation and for the execution of
   4394      the test to the specified number of seconds.
   4395 
   4396 `{ dg-timeout-factor X [{ target SELECTOR }] }'
   4397      Multiply the normal time limit for compilation and execution of
   4398      the test by the specified floating-point factor.
   4399 
   4400 7.2.1.4 Skip a test for some targets
   4401 ....................................
   4402 
   4403 `{ dg-skip-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
   4404      Arguments INCLUDE-OPTS and EXCLUDE-OPTS are lists in which each
   4405      element is a string of zero or more GCC options.  Skip the test if
   4406      all of the following conditions are met:
   4407         * the test system is included in SELECTOR
   4408 
   4409         * for at least one of the option strings in INCLUDE-OPTS, every
   4410           option from that string is in the set of options with which
   4411           the test would be compiled; use `"*"' for an INCLUDE-OPTS list
   4412           that matches any options; that is the default if INCLUDE-OPTS
   4413           is not specified
   4414 
   4415         * for each of the option strings in EXCLUDE-OPTS, at least one
   4416           option from that string is not in the set of options with
   4417           which the test would be compiled; use `""' for an empty
   4418           EXCLUDE-OPTS list; that is the default if EXCLUDE-OPTS is not
   4419           specified
   4420 
   4421      For example, to skip a test if option `-Os' is present:
   4422 
   4423           /* { dg-skip-if "" { *-*-* }  { "-Os" } { "" } } */
   4424 
   4425      To skip a test if both options `-O2' and `-g' are present:
   4426 
   4427           /* { dg-skip-if "" { *-*-* }  { "-O2 -g" } { "" } } */
   4428 
   4429      To skip a test if either `-O2' or `-O3' is present:
   4430 
   4431           /* { dg-skip-if "" { *-*-* }  { "-O2" "-O3" } { "" } } */
   4432 
   4433      To skip a test unless option `-Os' is present:
   4434 
   4435           /* { dg-skip-if "" { *-*-* }  { "*" } { "-Os" } } */
   4436 
   4437      To skip a test if either `-O2' or `-O3' is used with `-g' but not
   4438      if `-fpic' is also present:
   4439 
   4440           /* { dg-skip-if "" { *-*-* }  { "-O2 -g" "-O3 -g" } { "-fpic" } } */
   4441 
   4442 `{ dg-require-effective-target KEYWORD [{ SELECTOR }] }'
   4443      Skip the test if the test target, including current multilib flags,
   4444      is not covered by the effective-target keyword.  If the directive
   4445      includes the optional `{ SELECTOR }' then the effective-target
   4446      test is only performed if the target system matches the SELECTOR.
   4447      This directive must appear after any `dg-do' directive in the test
   4448      and before any `dg-additional-sources' directive.  *Note
   4449      Effective-Target Keywords::.
   4450 
   4451 `{ dg-require-SUPPORT args }'
   4452      Skip the test if the target does not provide the required support.
   4453      These directives must appear after any `dg-do' directive in the
   4454      test and before any `dg-additional-sources' directive.  They
   4455      require at least one argument, which can be an empty string if the
   4456      specific procedure does not examine the argument.  *Note Require
   4457      Support::, for a complete list of these directives.
   4458 
   4459 7.2.1.5 Expect a test to fail for some targets
   4460 ..............................................
   4461 
   4462 `{ dg-xfail-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
   4463      Expect the test to fail if the conditions (which are the same as
   4464      for `dg-skip-if') are met.  This does not affect the execute step.
   4465 
   4466 `{ dg-xfail-run-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
   4467      Expect the execute step of a test to fail if the conditions (which
   4468      are the same as for `dg-skip-if') are met.
   4469 
   4470 7.2.1.6 Expect the test executable to fail
   4471 ..........................................
   4472 
   4473 `{ dg-shouldfail COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }'
   4474      Expect the test executable to return a nonzero exit status if the
   4475      conditions (which are the same as for `dg-skip-if') are met.
   4476 
   4477 7.2.1.7 Verify compiler messages
   4478 ................................
   4479 
   4480 `{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
   4481      This DejaGnu directive appears on a source line that is expected
   4482      to get an error message, or else specifies the source line
   4483      associated with the message.  If there is no message for that line
   4484      or if the text of that message is not matched by REGEXP then the
   4485      check fails and COMMENT is included in the `FAIL' message.  The
   4486      check does not look for the string `error' unless it is part of
   4487      REGEXP.
   4488 
   4489 `{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
   4490      This DejaGnu directive appears on a source line that is expected
   4491      to get a warning message, or else specifies the source line
   4492      associated with the message.  If there is no message for that line
   4493      or if the text of that message is not matched by REGEXP then the
   4494      check fails and COMMENT is included in the `FAIL' message.  The
   4495      check does not look for the string `warning' unless it is part of
   4496      REGEXP.
   4497 
   4498 `{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
   4499      The line is expected to get a message other than an error or
   4500      warning.  If there is no message for that line or if the text of
   4501      that message is not matched by REGEXP then the check fails and
   4502      COMMENT is included in the `FAIL' message.
   4503 
   4504 `{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
   4505      This DejaGnu directive appears on a source line that should not
   4506      get a message matching REGEXP, or else specifies the source line
   4507      associated with the bogus message.  It is usually used with `xfail'
   4508      to indicate that the message is a known problem for a particular
   4509      set of targets.
   4510 
   4511 `{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }'
   4512      This DejaGnu directive indicates that the test is expected to fail
   4513      due to compiler messages that are not handled by `dg-error',
   4514      `dg-warning' or `dg-bogus'.  For this directive `xfail' has the
   4515      same effect as `target'.
   4516 
   4517 `{ dg-prune-output REGEXP }'
   4518      Prune messages matching REGEXP from the test output.
   4519 
   4520 7.2.1.8 Verify output of the test executable
   4521 ............................................
   4522 
   4523 `{ dg-output REGEXP [{ target/xfail SELECTOR }] }'
   4524      This DejaGnu directive compares REGEXP to the combined output that
   4525      the test executable writes to `stdout' and `stderr'.
   4526 
   4527 7.2.1.9 Specify additional files for a test
   4528 ...........................................
   4529 
   4530 `{ dg-additional-files "FILELIST" }'
   4531      Specify additional files, other than source files, that must be
   4532      copied to the system where the compiler runs.
   4533 
   4534 `{ dg-additional-sources "FILELIST" }'
   4535      Specify additional source files to appear in the compile line
   4536      following the main test file.
   4537 
   4538 7.2.1.10 Add checks at the end of a test
   4539 ........................................
   4540 
   4541 `{ dg-final { LOCAL-DIRECTIVE } }'
   4542      This DejaGnu directive is placed within a comment anywhere in the
   4543      source file and is processed after the test has been compiled and
   4544      run.  Multiple `dg-final' commands are processed in the order in
   4545      which they appear in the source file.  *Note Final Actions::, for
   4546      a list of directives that can be used within `dg-final'.
   4547 
   4548 
   4549 File: gccint.info,  Node: Selectors,  Next: Effective-Target Keywords,  Prev: Directives,  Up: Test Directives
   4550 
   4551 7.2.2 Selecting targets to which a test applies
   4552 -----------------------------------------------
   4553 
   4554 Several test directives include SELECTORs to limit the targets for
   4555 which a test is run or to declare that a test is expected to fail on
   4556 particular targets.
   4557 
   4558  A selector is:
   4559    * one or more target triplets, possibly including wildcard characters
   4560 
   4561    * a single effective-target keyword (*note Effective-Target
   4562      Keywords::)
   4563 
   4564    * a logical expression
   4565 
   4566  Depending on the context, the selector specifies whether a test is
   4567 skipped and reported as unsupported or is expected to fail.  Use
   4568 `*-*-*' to match any target.
   4569 
   4570  A selector expression appears within curly braces and uses a single
   4571 logical operator: one of `!', `&&', or `||'.  An operand is another
   4572 selector expression, an effective-target keyword, a single target
   4573 triplet, or a list of target triplets within quotes or curly braces.
   4574 For example:
   4575 
   4576      { target { ! "hppa*-*-* ia64*-*-*" } }
   4577      { target { powerpc*-*-* && lp64 } }
   4578      { xfail { lp64 || vect_no_align } }
   4579 
   4580 
   4581 File: gccint.info,  Node: Effective-Target Keywords,  Next: Add Options,  Prev: Selectors,  Up: Test Directives
   4582 
   4583 7.2.3 Keywords describing target attributes
   4584 -------------------------------------------
   4585 
   4586 Effective-target keywords identify sets of targets that support
   4587 particular functionality.  They are used to limit tests to be run only
   4588 for particular targets, or to specify that particular sets of targets
   4589 are expected to fail some tests.
   4590 
   4591  Effective-target keywords are defined in `lib/target-supports.exp' in
   4592 the GCC testsuite, with the exception of those that are documented as
   4593 being local to a particular test directory.
   4594 
   4595  The `effective target' takes into account all of the compiler options
   4596 with which the test will be compiled, including the multilib options.
   4597 By convention, keywords ending in `_nocache' can also include options
   4598 specified for the particular test in an earlier `dg-options' or
   4599 `dg-add-options' directive.
   4600 
   4601 7.2.3.1 Data type sizes
   4602 .......................
   4603 
   4604 `ilp32'
   4605      Target has 32-bit `int', `long', and pointers.
   4606 
   4607 `lp64'
   4608      Target has 32-bit `int', 64-bit `long' and pointers.
   4609 
   4610 `llp64'
   4611      Target has 32-bit `int' and `long', 64-bit `long long' and
   4612      pointers.
   4613 
   4614 `double64'
   4615      Target has 64-bit `double'.
   4616 
   4617 `double64plus'
   4618      Target has `double' that is 64 bits or longer.
   4619 
   4620 `int32plus'
   4621      Target has `int' that is at 32 bits or longer.
   4622 
   4623 `int16'
   4624      Target has `int' that is 16 bits or shorter.
   4625 
   4626 `large_double'
   4627      Target supports `double' that is longer than `float'.
   4628 
   4629 `large_long_double'
   4630      Target supports `long double' that is longer than `double'.
   4631 
   4632 `ptr32plus'
   4633      Target has pointers that are 32 bits or longer.
   4634 
   4635 `size32plus'
   4636      Target supports array and structure sizes that are 32 bits or
   4637      longer.
   4638 
   4639 `4byte_wchar_t'
   4640      Target has `wchar_t' that is at least 4 bytes.
   4641 
   4642 7.2.3.2 Fortran-specific attributes
   4643 ...................................
   4644 
   4645 `fortran_integer_16'
   4646      Target supports Fortran `integer' that is 16 bytes or longer.
   4647 
   4648 `fortran_large_int'
   4649      Target supports Fortran `integer' kinds larger than `integer(8)'.
   4650 
   4651 `fortran_large_real'
   4652      Target supports Fortran `real' kinds larger than `real(8)'.
   4653 
   4654 7.2.3.3 Vector-specific attributes
   4655 ..................................
   4656 
   4657 `vect_condition'
   4658      Target supports vector conditional operations.
   4659 
   4660 `vect_double'
   4661      Target supports hardware vectors of `double'.
   4662 
   4663 `vect_float'
   4664      Target supports hardware vectors of `float'.
   4665 
   4666 `vect_int'
   4667      Target supports hardware vectors of `int'.
   4668 
   4669 `vect_long'
   4670      Target supports hardware vectors of `long'.
   4671 
   4672 `vect_long_long'
   4673      Target supports hardware vectors of `long long'.
   4674 
   4675 `vect_aligned_arrays'
   4676      Target aligns arrays to vector alignment boundary.
   4677 
   4678 `vect_hw_misalign'
   4679      Target supports a vector misalign access.
   4680 
   4681 `vect_no_align'
   4682      Target does not support a vector alignment mechanism.
   4683 
   4684 `vect_no_int_max'
   4685      Target does not support a vector max instruction on `int'.
   4686 
   4687 `vect_no_int_add'
   4688      Target does not support a vector add instruction on `int'.
   4689 
   4690 `vect_no_bitwise'
   4691      Target does not support vector bitwise instructions.
   4692 
   4693 `vect_char_mult'
   4694      Target supports `vector char' multiplication.
   4695 
   4696 `vect_short_mult'
   4697      Target supports `vector short' multiplication.
   4698 
   4699 `vect_int_mult'
   4700      Target supports `vector int' multiplication.
   4701 
   4702 `vect_extract_even_odd'
   4703      Target supports vector even/odd element extraction.
   4704 
   4705 `vect_extract_even_odd_wide'
   4706      Target supports vector even/odd element extraction of vectors with
   4707      elements `SImode' or larger.
   4708 
   4709 `vect_interleave'
   4710      Target supports vector interleaving.
   4711 
   4712 `vect_strided'
   4713      Target supports vector interleaving and extract even/odd.
   4714 
   4715 `vect_strided_wide'
   4716      Target supports vector interleaving and extract even/odd for wide
   4717      element types.
   4718 
   4719 `vect_perm'
   4720      Target supports vector permutation.
   4721 
   4722 `vect_shift'
   4723      Target supports a hardware vector shift operation.
   4724 
   4725 `vect_widen_sum_hi_to_si'
   4726      Target supports a vector widening summation of `short' operands
   4727      into `int' results, or can promote (unpack) from `short' to `int'.
   4728 
   4729 `vect_widen_sum_qi_to_hi'
   4730      Target supports a vector widening summation of `char' operands
   4731      into `short' results, or can promote (unpack) from `char' to
   4732      `short'.
   4733 
   4734 `vect_widen_sum_qi_to_si'
   4735      Target supports a vector widening summation of `char' operands
   4736      into `int' results.
   4737 
   4738 `vect_widen_mult_qi_to_hi'
   4739      Target supports a vector widening multiplication of `char' operands
   4740      into `short' results, or can promote (unpack) from `char' to
   4741      `short' and perform non-widening multiplication of `short'.
   4742 
   4743 `vect_widen_mult_hi_to_si'
   4744      Target supports a vector widening multiplication of `short'
   4745      operands into `int' results, or can promote (unpack) from `short'
   4746      to `int' and perform non-widening multiplication of `int'.
   4747 
   4748 `vect_sdot_qi'
   4749      Target supports a vector dot-product of `signed char'.
   4750 
   4751 `vect_udot_qi'
   4752      Target supports a vector dot-product of `unsigned char'.
   4753 
   4754 `vect_sdot_hi'
   4755      Target supports a vector dot-product of `signed short'.
   4756 
   4757 `vect_udot_hi'
   4758      Target supports a vector dot-product of `unsigned short'.
   4759 
   4760 `vect_pack_trunc'
   4761      Target supports a vector demotion (packing) of `short' to `char'
   4762      and from `int' to `short' using modulo arithmetic.
   4763 
   4764 `vect_unpack'
   4765      Target supports a vector promotion (unpacking) of `char' to `short'
   4766      and from `char' to `int'.
   4767 
   4768 `vect_intfloat_cvt'
   4769      Target supports conversion from `signed int' to `float'.
   4770 
   4771 `vect_uintfloat_cvt'
   4772      Target supports conversion from `unsigned int' to `float'.
   4773 
   4774 `vect_floatint_cvt'
   4775      Target supports conversion from `float' to `signed int'.
   4776 
   4777 `vect_floatuint_cvt'
   4778      Target supports conversion from `float' to `unsigned int'.
   4779 
   4780 7.2.3.4 Thread Local Storage attributes
   4781 .......................................
   4782 
   4783 `tls'
   4784      Target supports thread-local storage.
   4785 
   4786 `tls_native'
   4787      Target supports native (rather than emulated) thread-local storage.
   4788 
   4789 `tls_runtime'
   4790      Test system supports executing TLS executables.
   4791 
   4792 7.2.3.5 Decimal floating point attributes
   4793 .........................................
   4794 
   4795 `dfp'
   4796      Targets supports compiling decimal floating point extension to C.
   4797 
   4798 `dfp_nocache'
   4799      Including the options used to compile this particular test, the
   4800      target supports compiling decimal floating point extension to C.
   4801 
   4802 `dfprt'
   4803      Test system can execute decimal floating point tests.
   4804 
   4805 `dfprt_nocache'
   4806      Including the options used to compile this particular test, the
   4807      test system can execute decimal floating point tests.
   4808 
   4809 `hard_dfp'
   4810      Target generates decimal floating point instructions with current
   4811      options.
   4812 
   4813 7.2.3.6 ARM-specific attributes
   4814 ...............................
   4815 
   4816 `arm32'
   4817      ARM target generates 32-bit code.
   4818 
   4819 `arm_eabi'
   4820      ARM target adheres to the ABI for the ARM Architecture.
   4821 
   4822 `arm_hard_vfp_ok'
   4823      ARM target supports `-mfpu=vfp -mfloat-abi=hard'.  Some multilibs
   4824      may be incompatible with these options.
   4825 
   4826 `arm_iwmmxt_ok'
   4827      ARM target supports `-mcpu=iwmmxt'.  Some multilibs may be
   4828      incompatible with this option.
   4829 
   4830 `arm_neon'
   4831      ARM target supports generating NEON instructions.
   4832 
   4833 `arm_neon_hw'
   4834      Test system supports executing NEON instructions.
   4835 
   4836 `arm_neon_ok'
   4837      ARM Target supports `-mfpu=neon -mfloat-abi=softfp' or compatible
   4838      options.  Some multilibs may be incompatible with these options.
   4839 
   4840 `arm_neon_fp16_ok'
   4841      ARM Target supports `-mfpu=neon-fp16 -mfloat-abi=softfp' or
   4842      compatible options.  Some multilibs may be incompatible with these
   4843      options.
   4844 
   4845 `arm_thumb1_ok'
   4846      ARM target generates Thumb-1 code for `-mthumb'.
   4847 
   4848 `arm_thumb2_ok'
   4849      ARM target generates Thumb-2 code for `-mthumb'.
   4850 
   4851 `arm_vfp_ok'
   4852      ARM target supports `-mfpu=vfp -mfloat-abi=softfp'.  Some
   4853      multilibs may be incompatible with these options.
   4854 
   4855 7.2.3.7 MIPS-specific attributes
   4856 ................................
   4857 
   4858 `mips64'
   4859      MIPS target supports 64-bit instructions.
   4860 
   4861 `nomips16'
   4862      MIPS target does not produce MIPS16 code.
   4863 
   4864 `mips16_attribute'
   4865      MIPS target can generate MIPS16 code.
   4866 
   4867 `mips_loongson'
   4868      MIPS target is a Loongson-2E or -2F target using an ABI that
   4869      supports the Loongson vector modes.
   4870 
   4871 `mips_newabi_large_long_double'
   4872      MIPS target supports `long double' larger than `double' when using
   4873      the new ABI.
   4874 
   4875 `mpaired_single'
   4876      MIPS target supports `-mpaired-single'.
   4877 
   4878 7.2.3.8 PowerPC-specific attributes
   4879 ...................................
   4880 
   4881 `powerpc64'
   4882      Test system supports executing 64-bit instructions.
   4883 
   4884 `powerpc_altivec'
   4885      PowerPC target supports AltiVec.
   4886 
   4887 `powerpc_altivec_ok'
   4888      PowerPC target supports `-maltivec'.
   4889 
   4890 `powerpc_fprs'
   4891      PowerPC target supports floating-point registers.
   4892 
   4893 `powerpc_hard_double'
   4894      PowerPC target supports hardware double-precision floating-point.
   4895 
   4896 `powerpc_ppu_ok'
   4897      PowerPC target supports `-mcpu=cell'.
   4898 
   4899 `powerpc_spe'
   4900      PowerPC target supports PowerPC SPE.
   4901 
   4902 `powerpc_spe_nocache'
   4903      Including the options used to compile this particular test, the
   4904      PowerPC target supports PowerPC SPE.
   4905 
   4906 `powerpc_spu'
   4907      PowerPC target supports PowerPC SPU.
   4908 
   4909 `spu_auto_overlay'
   4910      SPU target has toolchain that supports automatic overlay
   4911      generation.
   4912 
   4913 `powerpc_vsx_ok'
   4914      PowerPC target supports `-mvsx'.
   4915 
   4916 `powerpc_405_nocache'
   4917      Including the options used to compile this particular test, the
   4918      PowerPC target supports PowerPC 405.
   4919 
   4920 `vmx_hw'
   4921      PowerPC target supports executing AltiVec instructions.
   4922 
   4923 7.2.3.9 Other hardware attributes
   4924 .................................
   4925 
   4926 `avx'
   4927      Target supports compiling `avx' instructions.
   4928 
   4929 `avx_runtime'
   4930      Target supports the execution of `avx' instructions.
   4931 
   4932 `cell_hw'
   4933      Test system can execute AltiVec and Cell PPU instructions.
   4934 
   4935 `coldfire_fpu'
   4936      Target uses a ColdFire FPU.
   4937 
   4938 `hard_float'
   4939      Target supports FPU instructions.
   4940 
   4941 `sse'
   4942      Target supports compiling `sse' instructions.
   4943 
   4944 `sse_runtime'
   4945      Target supports the execution of `sse' instructions.
   4946 
   4947 `sse2'
   4948      Target supports compiling `sse2' instructions.
   4949 
   4950 `sse2_runtime'
   4951      Target supports the execution of `sse2' instructions.
   4952 
   4953 `sync_char_short'
   4954      Target supports atomic operations on `char' and `short'.
   4955 
   4956 `sync_int_long'
   4957      Target supports atomic operations on `int' and `long'.
   4958 
   4959 `ultrasparc_hw'
   4960      Test environment appears to run executables on a simulator that
   4961      accepts only `EM_SPARC' executables and chokes on `EM_SPARC32PLUS'
   4962      or `EM_SPARCV9' executables.
   4963 
   4964 `vect_cmdline_needed'
   4965      Target requires a command line argument to enable a SIMD
   4966      instruction set.
   4967 
   4968 7.2.3.10 Environment attributes
   4969 ...............................
   4970 
   4971 `c'
   4972      The language for the compiler under test is C.
   4973 
   4974 `c++'
   4975      The language for the compiler under test is C++.
   4976 
   4977 `c99_runtime'
   4978      Target provides a full C99 runtime.
   4979 
   4980 `correct_iso_cpp_string_wchar_protos'
   4981      Target `string.h' and `wchar.h' headers provide C++ required
   4982      overloads for `strchr' etc. functions.
   4983 
   4984 `dummy_wcsftime'
   4985      Target uses a dummy `wcsftime' function that always returns zero.
   4986 
   4987 `fd_truncate'
   4988      Target can truncate a file from a file descriptor, as used by
   4989      `libgfortran/io/unix.c:fd_truncate'; i.e. `ftruncate' or `chsize'.
   4990 
   4991 `freestanding'
   4992      Target is `freestanding' as defined in section 4 of the C99
   4993      standard.  Effectively, it is a target which supports no extra
   4994      headers or libraries other than what is considered essential.
   4995 
   4996 `init_priority'
   4997      Target supports constructors with initialization priority
   4998      arguments.
   4999 
   5000 `inttypes_types'
   5001      Target has the basic signed and unsigned types in `inttypes.h'.
   5002      This is for tests that GCC's notions of these types agree with
   5003      those in the header, as some systems have only `inttypes.h'.
   5004 
   5005 `lax_strtofp'
   5006      Target might have errors of a few ULP in string to floating-point
   5007      conversion functions and overflow is not always detected correctly
   5008      by those functions.
   5009 
   5010 `newlib'
   5011      Target supports Newlib.
   5012 
   5013 `pow10'
   5014      Target provides `pow10' function.
   5015 
   5016 `pthread'
   5017      Target can compile using `pthread.h' with no errors or warnings.
   5018 
   5019 `pthread_h'
   5020      Target has `pthread.h'.
   5021 
   5022 `run_expensive_tests'
   5023      Expensive testcases (usually those that consume excessive amounts
   5024      of CPU time) should be run on this target.  This can be enabled by
   5025      setting the `GCC_TEST_RUN_EXPENSIVE' environment variable to a
   5026      non-empty string.
   5027 
   5028 `simulator'
   5029      Test system runs executables on a simulator (i.e. slowly) rather
   5030      than hardware (i.e. fast).
   5031 
   5032 `stdint_types'
   5033      Target has the basic signed and unsigned C types in `stdint.h'.
   5034      This will be obsolete when GCC ensures a working `stdint.h' for
   5035      all targets.
   5036 
   5037 `trampolines'
   5038      Target supports trampolines.
   5039 
   5040 `uclibc'
   5041      Target supports uClibc.
   5042 
   5043 `unwrapped'
   5044      Target does not use a status wrapper.
   5045 
   5046 `vxworks_kernel'
   5047      Target is a VxWorks kernel.
   5048 
   5049 `vxworks_rtp'
   5050      Target is a VxWorks RTP.
   5051 
   5052 `wchar'
   5053      Target supports wide characters.
   5054 
   5055 7.2.3.11 Other attributes
   5056 .........................
   5057 
   5058 `automatic_stack_alignment'
   5059      Target supports automatic stack alignment.
   5060 
   5061 `cxa_atexit'
   5062      Target uses `__cxa_atexit'.
   5063 
   5064 `default_packed'
   5065      Target has packed layout of structure members by default.
   5066 
   5067 `fgraphite'
   5068      Target supports Graphite optimizations.
   5069 
   5070 `fixed_point'
   5071      Target supports fixed-point extension to C.
   5072 
   5073 `fopenmp'
   5074      Target supports OpenMP via `-fopenmp'.
   5075 
   5076 `fpic'
   5077      Target supports `-fpic' and `-fPIC'.
   5078 
   5079 `freorder'
   5080      Target supports `-freorder-blocks-and-partition'.
   5081 
   5082 `fstack_protector'
   5083      Target supports `-fstack-protector'.
   5084 
   5085 `gas'
   5086      Target uses GNU `as'.
   5087 
   5088 `gc_sections'
   5089      Target supports `--gc-sections'.
   5090 
   5091 `keeps_null_pointer_checks'
   5092      Target keeps null pointer checks, either due to the use of
   5093      `-fno-delete-null-pointer-checks' or hardwired into the target.
   5094 
   5095 `lto'
   5096      Compiler has been configured to support link-time optimization
   5097      (LTO).
   5098 
   5099 `named_sections'
   5100      Target supports named sections.
   5101 
   5102 `natural_alignment_32'
   5103      Target uses natural alignment (aligned to type size) for types of
   5104      32 bits or less.
   5105 
   5106 `target_natural_alignment_64'
   5107      Target uses natural alignment (aligned to type size) for types of
   5108      64 bits or less.
   5109 
   5110 `nonpic'
   5111      Target does not generate PIC by default.
   5112 
   5113 `pcc_bitfield_type_matters'
   5114      Target defines `PCC_BITFIELD_TYPE_MATTERS'.
   5115 
   5116 `pe_aligned_commons'
   5117      Target supports `-mpe-aligned-commons'.
   5118 
   5119 `section_anchors'
   5120      Target supports section anchors.
   5121 
   5122 `short_enums'
   5123      Target defaults to short enums.
   5124 
   5125 `static'
   5126      Target supports `-static'.
   5127 
   5128 `static_libgfortran'
   5129      Target supports statically linking `libgfortran'.
   5130 
   5131 `string_merging'
   5132      Target supports merging string constants at link time.
   5133 
   5134 `ucn'
   5135      Target supports compiling and assembling UCN.
   5136 
   5137 `ucn_nocache'
   5138      Including the options used to compile this particular test, the
   5139      target supports compiling and assembling UCN.
   5140 
   5141 `unaligned_stack'
   5142      Target does not guarantee that its `STACK_BOUNDARY' is greater than
   5143      or equal to the required vector alignment.
   5144 
   5145 `vector_alignment_reachable'
   5146      Vector alignment is reachable for types of 32 bits or less.
   5147 
   5148 `vector_alignment_reachable_for_64bit'
   5149      Vector alignment is reachable for types of 64 bits or less.
   5150 
   5151 `wchar_t_char16_t_compatible'
   5152      Target supports `wchar_t' that is compatible with `char16_t'.
   5153 
   5154 `wchar_t_char32_t_compatible'
   5155      Target supports `wchar_t' that is compatible with `char32_t'.
   5156 
   5157 7.2.3.12 Local to tests in `gcc.target/i386'
   5158 ............................................
   5159 
   5160 `3dnow'
   5161      Target supports compiling `3dnow' instructions.
   5162 
   5163 `aes'
   5164      Target supports compiling `aes' instructions.
   5165 
   5166 `fma4'
   5167      Target supports compiling `fma4' instructions.
   5168 
   5169 `ms_hook_prologue'
   5170      Target supports attribute `ms_hook_prologue'.
   5171 
   5172 `pclmul'
   5173      Target supports compiling `pclmul' instructions.
   5174 
   5175 `sse3'
   5176      Target supports compiling `sse3' instructions.
   5177 
   5178 `sse4'
   5179      Target supports compiling `sse4' instructions.
   5180 
   5181 `sse4a'
   5182      Target supports compiling `sse4a' instructions.
   5183 
   5184 `ssse3'
   5185      Target supports compiling `ssse3' instructions.
   5186 
   5187 `vaes'
   5188      Target supports compiling `vaes' instructions.
   5189 
   5190 `vpclmul'
   5191      Target supports compiling `vpclmul' instructions.
   5192 
   5193 `xop'
   5194      Target supports compiling `xop' instructions.
   5195 
   5196 7.2.3.13 Local to tests in `gcc.target/spu/ea'
   5197 ..............................................
   5198 
   5199 `ealib'
   5200      Target `__ea' library functions are available.
   5201 
   5202 7.2.3.14 Local to tests in `gcc.test-framework'
   5203 ...............................................
   5204 
   5205 `no'
   5206      Always returns 0.
   5207 
   5208 `yes'
   5209      Always returns 1.
   5210 
   5211 
   5212 File: gccint.info,  Node: Add Options,  Next: Require Support,  Prev: Effective-Target Keywords,  Up: Test Directives
   5213 
   5214 7.2.4 Features for `dg-add-options'
   5215 -----------------------------------
   5216 
   5217 The supported values of FEATURE for directive `dg-add-options' are:
   5218 
   5219 `arm_neon'
   5220      NEON support.  Only ARM targets support this feature, and only then
   5221      in certain modes; see the *note arm_neon_ok effective target
   5222      keyword: arm_neon_ok.
   5223 
   5224 `arm_neon_fp16'
   5225      NEON and half-precision floating point support.  Only ARM targets
   5226      support this feature, and only then in certain modes; see the
   5227      *note arm_neon_fp16_ok effective target keyword: arm_neon_ok.
   5228 
   5229 `bind_pic_locally'
   5230      Add the target-specific flags needed to enable functions to bind
   5231      locally when using pic/PIC passes in the testsuite.
   5232 
   5233 `c99_runtime'
   5234      Add the target-specific flags needed to access the C99 runtime.
   5235 
   5236 `ieee'
   5237      Add the target-specific flags needed to enable full IEEE
   5238      compliance mode.
   5239 
   5240 `mips16_attribute'
   5241      `mips16' function attributes.  Only MIPS targets support this
   5242      feature, and only then in certain modes.
   5243 
   5244 `tls'
   5245      Add the target-specific flags needed to use thread-local storage.
   5246 
   5247 
   5248 File: gccint.info,  Node: Require Support,  Next: Final Actions,  Prev: Add Options,  Up: Test Directives
   5249 
   5250 7.2.5 Variants of `dg-require-SUPPORT'
   5251 --------------------------------------
   5252 
   5253 A few of the `dg-require' directives take arguments.
   5254 
   5255 `dg-require-iconv CODESET'
   5256      Skip the test if the target does not support iconv.  CODESET is
   5257      the codeset to convert to.
   5258 
   5259 `dg-require-profiling PROFOPT'
   5260      Skip the test if the target does not support profiling with option
   5261      PROFOPT.
   5262 
   5263 `dg-require-visibility VIS'
   5264      Skip the test if the target does not support the `visibility'
   5265      attribute.  If VIS is `""', support for `visibility("hidden")' is
   5266      checked, for `visibility("VIS")' otherwise.
   5267 
   5268  The original `dg-require' directives were defined before there was
   5269 support for effective-target keywords.  The directives that do not take
   5270 arguments could be replaced with effective-target keywords.
   5271 
   5272 `dg-require-alias ""'
   5273      Skip the test if the target does not support the `alias' attribute.
   5274 
   5275 `dg-require-ascii-locale ""'
   5276      Skip the test if the host does not support an ASCII locale.
   5277 
   5278 `dg-require-compat-dfp ""'
   5279      Skip this test unless both compilers in a `compat' testsuite
   5280      support decimal floating point.
   5281 
   5282 `dg-require-cxa-atexit ""'
   5283      Skip the test if the target does not support `__cxa_atexit'.  This
   5284      is equivalent to `dg-require-effective-target cxa_atexit'.
   5285 
   5286 `dg-require-dll ""'
   5287      Skip the test if the target does not support DLL attributes.
   5288 
   5289 `dg-require-fork ""'
   5290      Skip the test if the target does not support `fork'.
   5291 
   5292 `dg-require-gc-sections ""'
   5293      Skip the test if the target's linker does not support the
   5294      `--gc-sections' flags.  This is equivalent to
   5295      `dg-require-effective-target gc-sections'.
   5296 
   5297 `dg-require-host-local ""'
   5298      Skip the test if the host is remote, rather than the same as the
   5299      build system.  Some tests are incompatible with DejaGnu's handling
   5300      of remote hosts, which involves copying the source file to the
   5301      host and compiling it with a relative path and "`-o a.out'".
   5302 
   5303 `dg-require-mkfifo ""'
   5304      Skip the test if the target does not support `mkfifo'.
   5305 
   5306 `dg-require-named-sections ""'
   5307      Skip the test is the target does not support named sections.  This
   5308      is equivalent to `dg-require-effective-target named_sections'.
   5309 
   5310 `dg-require-weak ""'
   5311      Skip the test if the target does not support weak symbols.
   5312 
   5313 `dg-require-weak-override ""'
   5314      Skip the test if the target does not support overriding weak
   5315      symbols.
   5316 
   5317 
   5318 File: gccint.info,  Node: Final Actions,  Prev: Require Support,  Up: Test Directives
   5319 
   5320 7.2.6 Commands for use in `dg-final'
   5321 ------------------------------------
   5322 
   5323 The GCC testsuite defines the following directives to be used within
   5324 `dg-final'.
   5325 
   5326 7.2.6.1 Scan a particular file
   5327 ..............................
   5328 
   5329 `scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]'
   5330      Passes if REGEXP matches text in FILENAME.
   5331 
   5332 `scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]'
   5333      Passes if REGEXP does not match text in FILENAME.
   5334 
   5335 `scan-module MODULE REGEXP [{ target/xfail SELECTOR }]'
   5336      Passes if REGEXP matches in Fortran module MODULE.
   5337 
   5338 7.2.6.2 Scan the assembly output
   5339 ................................
   5340 
   5341 `scan-assembler REGEX [{ target/xfail SELECTOR }]'
   5342      Passes if REGEX matches text in the test's assembler output.
   5343 
   5344 `scan-assembler-not REGEX [{ target/xfail SELECTOR }]'
   5345      Passes if REGEX does not match text in the test's assembler output.
   5346 
   5347 `scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]'
   5348      Passes if REGEX is matched exactly NUM times in the test's
   5349      assembler output.
   5350 
   5351 `scan-assembler-dem REGEX [{ target/xfail SELECTOR }]'
   5352      Passes if REGEX matches text in the test's demangled assembler
   5353      output.
   5354 
   5355 `scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]'
   5356      Passes if REGEX does not match text in the test's demangled
   5357      assembler output.
   5358 
   5359 `scan-hidden SYMBOL [{ target/xfail SELECTOR }]'
   5360      Passes if SYMBOL is defined as a hidden symbol in the test's
   5361      assembly output.
   5362 
   5363 `scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]'
   5364      Passes if SYMBOL is not defined as a hidden symbol in the test's
   5365      assembly output.
   5366 
   5367 7.2.6.3 Scan optimization dump files
   5368 ....................................
   5369 
   5370 These commands are available for KIND of `tree', `rtl', and `ipa'.
   5371 
   5372 `scan-KIND-dump REGEX SUFFIX [{ target/xfail SELECTOR }]'
   5373      Passes if REGEX matches text in the dump file with suffix SUFFIX.
   5374 
   5375 `scan-KIND-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
   5376      Passes if REGEX does not match text in the dump file with suffix
   5377      SUFFIX.
   5378 
   5379 `scan-KIND-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]'
   5380      Passes if REGEX is found exactly NUM times in the dump file with
   5381      suffix SUFFIX.
   5382 
   5383 `scan-KIND-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]'
   5384      Passes if REGEX matches demangled text in the dump file with
   5385      suffix SUFFIX.
   5386 
   5387 `scan-KIND-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
   5388      Passes if REGEX does not match demangled text in the dump file with
   5389      suffix SUFFIX.
   5390 
   5391 7.2.6.4 Verify that an output files exists or not
   5392 .................................................
   5393 
   5394 `output-exists [{ target/xfail SELECTOR }]'
   5395      Passes if compiler output file exists.
   5396 
   5397 `output-exists-not [{ target/xfail SELECTOR }]'
   5398      Passes if compiler output file does not exist.
   5399 
   5400 7.2.6.5 Check for LTO tests
   5401 ...........................
   5402 
   5403 `scan-symbol REGEXP [{ target/xfail SELECTOR }]'
   5404      Passes if the pattern is present in the final executable.
   5405 
   5406 7.2.6.6 Checks for `gcov' tests
   5407 ...............................
   5408 
   5409 `run-gcov SOURCEFILE'
   5410      Check line counts in `gcov' tests.
   5411 
   5412 `run-gcov [branches] [calls] { OPTS SOURCEFILE }'
   5413      Check branch and/or call counts, in addition to line counts, in
   5414      `gcov' tests.
   5415 
   5416 7.2.6.7 Clean up generated test files
   5417 .....................................
   5418 
   5419 `cleanup-coverage-files'
   5420      Removes coverage data files generated for this test.
   5421 
   5422 `cleanup-ipa-dump SUFFIX'
   5423      Removes IPA dump files generated for this test.
   5424 
   5425 `cleanup-modules'
   5426      Removes Fortran module files generated for this test.
   5427 
   5428 `cleanup-profile-file'
   5429      Removes profiling files generated for this test.
   5430 
   5431 `cleanup-repo-files'
   5432      Removes files generated for this test for `-frepo'.
   5433 
   5434 `cleanup-rtl-dump SUFFIX'
   5435      Removes RTL dump files generated for this test.
   5436 
   5437 `cleanup-saved-temps'
   5438      Removes files for the current test which were kept for
   5439      `-save-temps'.
   5440 
   5441 `cleanup-tree-dump SUFFIX'
   5442      Removes tree dump files matching SUFFIX which were generated for
   5443      this test.
   5444 
   5445 
   5446 File: gccint.info,  Node: Ada Tests,  Next: C Tests,  Prev: Test Directives,  Up: Testsuites
   5447 
   5448 7.3 Ada Language Testsuites
   5449 ===========================
   5450 
   5451 The Ada testsuite includes executable tests from the ACATS 2.5
   5452 testsuite, publicly available at
   5453 `http://www.adaic.org/compilers/acats/2.5'.
   5454 
   5455  These tests are integrated in the GCC testsuite in the `ada/acats'
   5456 directory, and enabled automatically when running `make check', assuming
   5457 the Ada language has been enabled when configuring GCC.
   5458 
   5459  You can also run the Ada testsuite independently, using `make
   5460 check-ada', or run a subset of the tests by specifying which chapter to
   5461 run, e.g.:
   5462 
   5463      $ make check-ada CHAPTERS="c3 c9"
   5464 
   5465  The tests are organized by directory, each directory corresponding to
   5466 a chapter of the Ada Reference Manual.  So for example, `c9' corresponds
   5467 to chapter 9, which deals with tasking features of the language.
   5468 
   5469  There is also an extra chapter called `gcc' containing a template for
   5470 creating new executable tests, although this is deprecated in favor of
   5471 the `gnat.dg' testsuite.
   5472 
   5473  The tests are run using two `sh' scripts: `run_acats' and
   5474 `run_all.sh'.  To run the tests using a simulator or a cross target,
   5475 see the small customization section at the top of `run_all.sh'.
   5476 
   5477  These tests are run using the build tree: they can be run without doing
   5478 a `make install'.
   5479 
   5480 
   5481 File: gccint.info,  Node: C Tests,  Next: libgcj Tests,  Prev: Ada Tests,  Up: Testsuites
   5482 
   5483 7.4 C Language Testsuites
   5484 =========================
   5485 
   5486 GCC contains the following C language testsuites, in the
   5487 `gcc/testsuite' directory:
   5488 
   5489 `gcc.dg'
   5490      This contains tests of particular features of the C compiler,
   5491      using the more modern `dg' harness.  Correctness tests for various
   5492      compiler features should go here if possible.
   5493 
   5494      Magic comments determine whether the file is preprocessed,
   5495      compiled, linked or run.  In these tests, error and warning
   5496      message texts are compared against expected texts or regular
   5497      expressions given in comments.  These tests are run with the
   5498      options `-ansi -pedantic' unless other options are given in the
   5499      test.  Except as noted below they are not run with multiple
   5500      optimization options.
   5501 
   5502 `gcc.dg/compat'
   5503      This subdirectory contains tests for binary compatibility using
   5504      `lib/compat.exp', which in turn uses the language-independent
   5505      support (*note Support for testing binary compatibility: compat
   5506      Testing.).
   5507 
   5508 `gcc.dg/cpp'
   5509      This subdirectory contains tests of the preprocessor.
   5510 
   5511 `gcc.dg/debug'
   5512      This subdirectory contains tests for debug formats.  Tests in this
   5513      subdirectory are run for each debug format that the compiler
   5514      supports.
   5515 
   5516 `gcc.dg/format'
   5517      This subdirectory contains tests of the `-Wformat' format
   5518      checking.  Tests in this directory are run with and without
   5519      `-DWIDE'.
   5520 
   5521 `gcc.dg/noncompile'
   5522      This subdirectory contains tests of code that should not compile
   5523      and does not need any special compilation options.  They are run
   5524      with multiple optimization options, since sometimes invalid code
   5525      crashes the compiler with optimization.
   5526 
   5527 `gcc.dg/special'
   5528      FIXME: describe this.
   5529 
   5530 `gcc.c-torture'
   5531      This contains particular code fragments which have historically
   5532      broken easily.  These tests are run with multiple optimization
   5533      options, so tests for features which only break at some
   5534      optimization levels belong here.  This also contains tests to
   5535      check that certain optimizations occur.  It might be worthwhile to
   5536      separate the correctness tests cleanly from the code quality
   5537      tests, but it hasn't been done yet.
   5538 
   5539 `gcc.c-torture/compat'
   5540      FIXME: describe this.
   5541 
   5542      This directory should probably not be used for new tests.
   5543 
   5544 `gcc.c-torture/compile'
   5545      This testsuite contains test cases that should compile, but do not
   5546      need to link or run.  These test cases are compiled with several
   5547      different combinations of optimization options.  All warnings are
   5548      disabled for these test cases, so this directory is not suitable if
   5549      you wish to test for the presence or absence of compiler warnings.
   5550      While special options can be set, and tests disabled on specific
   5551      platforms, by the use of `.x' files, mostly these test cases
   5552      should not contain platform dependencies.  FIXME: discuss how
   5553      defines such as `NO_LABEL_VALUES' and `STACK_SIZE' are used.
   5554 
   5555 `gcc.c-torture/execute'
   5556      This testsuite contains test cases that should compile, link and
   5557      run; otherwise the same comments as for `gcc.c-torture/compile'
   5558      apply.
   5559 
   5560 `gcc.c-torture/execute/ieee'
   5561      This contains tests which are specific to IEEE floating point.
   5562 
   5563 `gcc.c-torture/unsorted'
   5564      FIXME: describe this.
   5565 
   5566      This directory should probably not be used for new tests.
   5567 
   5568 `gcc.misc-tests'
   5569      This directory contains C tests that require special handling.
   5570      Some of these tests have individual expect files, and others share
   5571      special-purpose expect files:
   5572 
   5573     ``bprob*.c''
   5574           Test `-fbranch-probabilities' using
   5575           `gcc.misc-tests/bprob.exp', which in turn uses the generic,
   5576           language-independent framework (*note Support for testing
   5577           profile-directed optimizations: profopt Testing.).
   5578 
   5579     ``gcov*.c''
   5580           Test `gcov' output using `gcov.exp', which in turn uses the
   5581           language-independent support (*note Support for testing gcov:
   5582           gcov Testing.).
   5583 
   5584     ``i386-pf-*.c''
   5585           Test i386-specific support for data prefetch using
   5586           `i386-prefetch.exp'.
   5587 
   5588 `gcc.test-framework'
   5589 
   5590     ``dg-*.c''
   5591           Test the testsuite itself using
   5592           `gcc.test-framework/test-framework.exp'.
   5593 
   5594 
   5595  FIXME: merge in `testsuite/README.gcc' and discuss the format of test
   5596 cases and magic comments more.
   5597 
   5598 
   5599 File: gccint.info,  Node: libgcj Tests,  Next: LTO Testing,  Prev: C Tests,  Up: Testsuites
   5600 
   5601 7.5 The Java library testsuites.
   5602 ================================
   5603 
   5604 Runtime tests are executed via `make check' in the
   5605 `TARGET/libjava/testsuite' directory in the build tree.  Additional
   5606 runtime tests can be checked into this testsuite.
   5607 
   5608  Regression testing of the core packages in libgcj is also covered by
   5609 the Mauve testsuite.  The Mauve Project develops tests for the Java
   5610 Class Libraries.  These tests are run as part of libgcj testing by
   5611 placing the Mauve tree within the libjava testsuite sources at
   5612 `libjava/testsuite/libjava.mauve/mauve', or by specifying the location
   5613 of that tree when invoking `make', as in `make MAUVEDIR=~/mauve check'.
   5614 
   5615  To detect regressions, a mechanism in `mauve.exp' compares the
   5616 failures for a test run against the list of expected failures in
   5617 `libjava/testsuite/libjava.mauve/xfails' from the source hierarchy.
   5618 Update this file when adding new failing tests to Mauve, or when fixing
   5619 bugs in libgcj that had caused Mauve test failures.
   5620 
   5621  We encourage developers to contribute test cases to Mauve.
   5622 
   5623 
   5624 File: gccint.info,  Node: LTO Testing,  Next: gcov Testing,  Prev: libgcj Tests,  Up: Testsuites
   5625 
   5626 7.6 Support for testing link-time optimizations
   5627 ===============================================
   5628 
   5629 Tests for link-time optimizations usually require multiple source files
   5630 that are compiled separately, perhaps with different sets of options.
   5631 There are several special-purpose test directives used for these tests.
   5632 
   5633 `{ dg-lto-do DO-WHAT-KEYWORD }'
   5634      DO-WHAT-KEYWORD specifies how the test is compiled and whether it
   5635      is executed.  It is one of:
   5636 
   5637     `assemble'
   5638           Compile with `-c' to produce a relocatable object file.
   5639 
   5640     `link'
   5641           Compile, assemble, and link to produce an executable file.
   5642 
   5643     `run'
   5644           Produce and run an executable file, which is expected to
   5645           return an exit code of 0.
   5646 
   5647      The default is `assemble'.  That can be overridden for a set of
   5648      tests by redefining `dg-do-what-default' within the `.exp' file
   5649      for those tests.
   5650 
   5651      Unlike `dg-do', `dg-lto-do' does not support an optional `target'
   5652      or `xfail' list.  Use `dg-skip-if', `dg-xfail-if', or
   5653      `dg-xfail-run-if'.
   5654 
   5655 `{ dg-lto-options { { OPTIONS } [{ OPTIONS }] } [{ target SELECTOR }]}'
   5656      This directive provides a list of one or more sets of compiler
   5657      options to override LTO_OPTIONS.  Each test will be compiled and
   5658      run with each of these sets of options.
   5659 
   5660 `{ dg-extra-ld-options OPTIONS [{ target SELECTOR }]}'
   5661      This directive adds OPTIONS to the linker options used.
   5662 
   5663 `{ dg-suppress-ld-options OPTIONS [{ target SELECTOR }]}'
   5664      This directive removes OPTIONS from the set of linker options used.
   5665 
   5666 
   5667 File: gccint.info,  Node: gcov Testing,  Next: profopt Testing,  Prev: LTO Testing,  Up: Testsuites
   5668 
   5669 7.7 Support for testing `gcov'
   5670 ==============================
   5671 
   5672 Language-independent support for testing `gcov', and for checking that
   5673 branch profiling produces expected values, is provided by the expect
   5674 file `lib/gcov.exp'.  `gcov' tests also rely on procedures in
   5675 `lib/gcc-dg.exp' to compile and run the test program.  A typical `gcov'
   5676 test contains the following DejaGnu commands within comments:
   5677 
   5678      { dg-options "-fprofile-arcs -ftest-coverage" }
   5679      { dg-do run { target native } }
   5680      { dg-final { run-gcov sourcefile } }
   5681 
   5682  Checks of `gcov' output can include line counts, branch percentages,
   5683 and call return percentages.  All of these checks are requested via
   5684 commands that appear in comments in the test's source file.  Commands
   5685 to check line counts are processed by default.  Commands to check
   5686 branch percentages and call return percentages are processed if the
   5687 `run-gcov' command has arguments `branches' or `calls', respectively.
   5688 For example, the following specifies checking both, as well as passing
   5689 `-b' to `gcov':
   5690 
   5691      { dg-final { run-gcov branches calls { -b sourcefile } } }
   5692 
   5693  A line count command appears within a comment on the source line that
   5694 is expected to get the specified count and has the form `count(CNT)'.
   5695 A test should only check line counts for lines that will get the same
   5696 count for any architecture.
   5697 
   5698  Commands to check branch percentages (`branch') and call return
   5699 percentages (`returns') are very similar to each other.  A beginning
   5700 command appears on or before the first of a range of lines that will
   5701 report the percentage, and the ending command follows that range of
   5702 lines.  The beginning command can include a list of percentages, all of
   5703 which are expected to be found within the range.  A range is terminated
   5704 by the next command of the same kind.  A command `branch(end)' or
   5705 `returns(end)' marks the end of a range without starting a new one.
   5706 For example:
   5707 
   5708      if (i > 10 && j > i && j < 20)  /* branch(27 50 75) */
   5709                                      /* branch(end) */
   5710        foo (i, j);
   5711 
   5712  For a call return percentage, the value specified is the percentage of
   5713 calls reported to return.  For a branch percentage, the value is either
   5714 the expected percentage or 100 minus that value, since the direction of
   5715 a branch can differ depending on the target or the optimization level.
   5716 
   5717  Not all branches and calls need to be checked.  A test should not
   5718 check for branches that might be optimized away or replaced with
   5719 predicated instructions.  Don't check for calls inserted by the
   5720 compiler or ones that might be inlined or optimized away.
   5721 
   5722  A single test can check for combinations of line counts, branch
   5723 percentages, and call return percentages.  The command to check a line
   5724 count must appear on the line that will report that count, but commands
   5725 to check branch percentages and call return percentages can bracket the
   5726 lines that report them.
   5727 
   5728 
   5729 File: gccint.info,  Node: profopt Testing,  Next: compat Testing,  Prev: gcov Testing,  Up: Testsuites
   5730 
   5731 7.8 Support for testing profile-directed optimizations
   5732 ======================================================
   5733 
   5734 The file `profopt.exp' provides language-independent support for
   5735 checking correct execution of a test built with profile-directed
   5736 optimization.  This testing requires that a test program be built and
   5737 executed twice.  The first time it is compiled to generate profile
   5738 data, and the second time it is compiled to use the data that was
   5739 generated during the first execution.  The second execution is to
   5740 verify that the test produces the expected results.
   5741 
   5742  To check that the optimization actually generated better code, a test
   5743 can be built and run a third time with normal optimizations to verify
   5744 that the performance is better with the profile-directed optimizations.
   5745 `profopt.exp' has the beginnings of this kind of support.
   5746 
   5747  `profopt.exp' provides generic support for profile-directed
   5748 optimizations.  Each set of tests that uses it provides information
   5749 about a specific optimization:
   5750 
   5751 `tool'
   5752      tool being tested, e.g., `gcc'
   5753 
   5754 `profile_option'
   5755      options used to generate profile data
   5756 
   5757 `feedback_option'
   5758      options used to optimize using that profile data
   5759 
   5760 `prof_ext'
   5761      suffix of profile data files
   5762 
   5763 `PROFOPT_OPTIONS'
   5764      list of options with which to run each test, similar to the lists
   5765      for torture tests
   5766 
   5767 `{ dg-final-generate { LOCAL-DIRECTIVE } }'
   5768      This directive is similar to `dg-final', but the LOCAL-DIRECTIVE
   5769      is run after the generation of profile data.
   5770 
   5771 `{ dg-final-use { LOCAL-DIRECTIVE } }'
   5772      The LOCAL-DIRECTIVE is run after the profile data have been used.
   5773 
   5774 
   5775 File: gccint.info,  Node: compat Testing,  Next: Torture Tests,  Prev: profopt Testing,  Up: Testsuites
   5776 
   5777 7.9 Support for testing binary compatibility
   5778 ============================================
   5779 
   5780 The file `compat.exp' provides language-independent support for binary
   5781 compatibility testing.  It supports testing interoperability of two
   5782 compilers that follow the same ABI, or of multiple sets of compiler
   5783 options that should not affect binary compatibility.  It is intended to
   5784 be used for testsuites that complement ABI testsuites.
   5785 
   5786  A test supported by this framework has three parts, each in a separate
   5787 source file: a main program and two pieces that interact with each
   5788 other to split up the functionality being tested.
   5789 
   5790 `TESTNAME_main.SUFFIX'
   5791      Contains the main program, which calls a function in file
   5792      `TESTNAME_x.SUFFIX'.
   5793 
   5794 `TESTNAME_x.SUFFIX'
   5795      Contains at least one call to a function in `TESTNAME_y.SUFFIX'.
   5796 
   5797 `TESTNAME_y.SUFFIX'
   5798      Shares data with, or gets arguments from, `TESTNAME_x.SUFFIX'.
   5799 
   5800  Within each test, the main program and one functional piece are
   5801 compiled by the GCC under test.  The other piece can be compiled by an
   5802 alternate compiler.  If no alternate compiler is specified, then all
   5803 three source files are all compiled by the GCC under test.  You can
   5804 specify pairs of sets of compiler options.  The first element of such a
   5805 pair specifies options used with the GCC under test, and the second
   5806 element of the pair specifies options used with the alternate compiler.
   5807 Each test is compiled with each pair of options.
   5808 
   5809  `compat.exp' defines default pairs of compiler options.  These can be
   5810 overridden by defining the environment variable `COMPAT_OPTIONS' as:
   5811 
   5812      COMPAT_OPTIONS="[list [list {TST1} {ALT1}]
   5813        ...[list {TSTN} {ALTN}]]"
   5814 
   5815  where TSTI and ALTI are lists of options, with TSTI used by the
   5816 compiler under test and ALTI used by the alternate compiler.  For
   5817 example, with `[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]',
   5818 the test is first built with `-g -O0' by the compiler under test and
   5819 with `-O3' by the alternate compiler.  The test is built a second time
   5820 using `-fpic' by the compiler under test and `-fPIC -O2' by the
   5821 alternate compiler.
   5822 
   5823  An alternate compiler is specified by defining an environment variable
   5824 to be the full pathname of an installed compiler; for C define
   5825 `ALT_CC_UNDER_TEST', and for C++ define `ALT_CXX_UNDER_TEST'.  These
   5826 will be written to the `site.exp' file used by DejaGnu.  The default is
   5827 to build each test with the compiler under test using the first of each
   5828 pair of compiler options from `COMPAT_OPTIONS'.  When
   5829 `ALT_CC_UNDER_TEST' or `ALT_CXX_UNDER_TEST' is `same', each test is
   5830 built using the compiler under test but with combinations of the
   5831 options from `COMPAT_OPTIONS'.
   5832 
   5833  To run only the C++ compatibility suite using the compiler under test
   5834 and another version of GCC using specific compiler options, do the
   5835 following from `OBJDIR/gcc':
   5836 
   5837      rm site.exp
   5838      make -k \
   5839        ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \
   5840        COMPAT_OPTIONS="LISTS AS SHOWN ABOVE" \
   5841        check-c++ \
   5842        RUNTESTFLAGS="compat.exp"
   5843 
   5844  A test that fails when the source files are compiled with different
   5845 compilers, but passes when the files are compiled with the same
   5846 compiler, demonstrates incompatibility of the generated code or runtime
   5847 support.  A test that fails for the alternate compiler but passes for
   5848 the compiler under test probably tests for a bug that was fixed in the
   5849 compiler under test but is present in the alternate compiler.
   5850 
   5851  The binary compatibility tests support a small number of test framework
   5852 commands that appear within comments in a test file.
   5853 
   5854 `dg-require-*'
   5855      These commands can be used in `TESTNAME_main.SUFFIX' to skip the
   5856      test if specific support is not available on the target.
   5857 
   5858 `dg-options'
   5859      The specified options are used for compiling this particular source
   5860      file, appended to the options from `COMPAT_OPTIONS'.  When this
   5861      command appears in `TESTNAME_main.SUFFIX' the options are also
   5862      used to link the test program.
   5863 
   5864 `dg-xfail-if'
   5865      This command can be used in a secondary source file to specify that
   5866      compilation is expected to fail for particular options on
   5867      particular targets.
   5868 
   5869 
   5870 File: gccint.info,  Node: Torture Tests,  Prev: compat Testing,  Up: Testsuites
   5871 
   5872 7.10 Support for torture testing using multiple options
   5873 =======================================================
   5874 
   5875 Throughout the compiler testsuite there are several directories whose
   5876 tests are run multiple times, each with a different set of options.
   5877 These are known as torture tests.  `lib/torture-options.exp' defines
   5878 procedures to set up these lists:
   5879 
   5880 `torture-init'
   5881      Initialize use of torture lists.
   5882 
   5883 `set-torture-options'
   5884      Set lists of torture options to use for tests with and without
   5885      loops.  Optionally combine a set of torture options with a set of
   5886      other options, as is done with Objective-C runtime options.
   5887 
   5888 `torture-finish'
   5889      Finalize use of torture lists.
   5890 
   5891  The `.exp' file for a set of tests that use torture options must
   5892 include calls to these three procedures if:
   5893 
   5894    * It calls `gcc-dg-runtest' and overrides DG_TORTURE_OPTIONS.
   5895 
   5896    * It calls ${TOOL}`-torture' or ${TOOL}`-torture-execute', where
   5897      TOOL is `c', `fortran', or `objc'.
   5898 
   5899    * It calls `dg-pch'.
   5900 
   5901  It is not necessary for a `.exp' file that calls `gcc-dg-runtest' to
   5902 call the torture procedures if the tests should use the list in
   5903 DG_TORTURE_OPTIONS defined in `gcc-dg.exp'.
   5904 
   5905  Most uses of torture options can override the default lists by defining
   5906 TORTURE_OPTIONS or add to the default list by defining
   5907 ADDITIONAL_TORTURE_OPTIONS.  Define these in a `.dejagnurc' file or add
   5908 them to the `site.exp' file; for example
   5909 
   5910      set ADDITIONAL_TORTURE_OPTIONS  [list \
   5911        { -O2 -ftree-loop-linear } \
   5912        { -O2 -fpeel-loops } ]
   5913 
   5914 
   5915 File: gccint.info,  Node: Options,  Next: Passes,  Prev: Testsuites,  Up: Top
   5916 
   5917 8 Option specification files
   5918 ****************************
   5919 
   5920 Most GCC command-line options are described by special option
   5921 definition files, the names of which conventionally end in `.opt'.
   5922 This chapter describes the format of these files.
   5923 
   5924 * Menu:
   5925 
   5926 * Option file format::   The general layout of the files
   5927 * Option properties::    Supported option properties
   5928 
   5929 
   5930 File: gccint.info,  Node: Option file format,  Next: Option properties,  Up: Options
   5931 
   5932 8.1 Option file format
   5933 ======================
   5934 
   5935 Option files are a simple list of records in which each field occupies
   5936 its own line and in which the records themselves are separated by blank
   5937 lines.  Comments may appear on their own line anywhere within the file
   5938 and are preceded by semicolons.  Whitespace is allowed before the
   5939 semicolon.
   5940 
   5941  The files can contain the following types of record:
   5942 
   5943    * A language definition record.  These records have two fields: the
   5944      string `Language' and the name of the language.  Once a language
   5945      has been declared in this way, it can be used as an option
   5946      property.  *Note Option properties::.
   5947 
   5948    * A target specific save record to save additional information. These
   5949      records have two fields: the string `TargetSave', and a
   5950      declaration type to go in the `cl_target_option' structure.
   5951 
   5952    * A variable record to define a variable used to store option
   5953      information.  These records have two fields: the string
   5954      `Variable', and a declaration of the type and name of the
   5955      variable, optionally with an initializer (but without any trailing
   5956      `;').  These records may be used for variables used for many
   5957      options where declaring the initializer in a single option
   5958      definition record, or duplicating it in many records, would be
   5959      inappropriate, or for variables set in option handlers rather than
   5960      referenced by `Var' properties.
   5961 
   5962    * A variable record to define a variable used to store option
   5963      information.  These records have two fields: the string
   5964      `TargetVariable', and a declaration of the type and name of the
   5965      variable, optionally with an initializer (but without any trailing
   5966      `;').  `TargetVariable' is a combination of `Variable' and
   5967      `TargetSave' records in that the variable is defined in the
   5968      `gcc_options' structure, but these variables are also stored in
   5969      the `cl_target_option' structure.  The variables are saved in the
   5970      target save code and restored in the target restore code.
   5971 
   5972    * A variable record to record any additional files that the
   5973      `options.h' file should include.  This is useful to provide
   5974      enumeration or structure definitions needed for target variables.
   5975      These records have two fields: the string `HeaderInclude' and the
   5976      name of the include file.
   5977 
   5978    * A variable record to record any additional files that the
   5979      `options.c' file should include.  This is useful to provide inline
   5980      functions needed for target variables and/or `#ifdef' sequences to
   5981      properly set up the initialization.  These records have two
   5982      fields: the string `SourceInclude' and the name of the include
   5983      file.
   5984 
   5985    * An enumeration record to define a set of strings that may be used
   5986      as arguments to an option or options.  These records have three
   5987      fields: the string `Enum', a space-separated list of properties
   5988      and help text used to describe the set of strings in `--help'
   5989      output.  Properties use the same format as option properties; the
   5990      following are valid:
   5991     `Name(NAME)'
   5992           This property is required; NAME must be a name (suitable for
   5993           use in C identifiers) used to identify the set of strings in
   5994           `Enum' option properties.
   5995 
   5996     `Type(TYPE)'
   5997           This property is required; TYPE is the C type for variables
   5998           set by options using this enumeration together with `Var'.
   5999 
   6000     `UnknownError(MESSAGE)'
   6001           The message MESSAGE will be used as an error message if the
   6002           argument is invalid; for enumerations without `UnknownError',
   6003           a generic error message is used.  MESSAGE should contain a
   6004           single `%qs' format, which will be used to format the invalid
   6005           argument.
   6006 
   6007    * An enumeration value record to define one of the strings in a set
   6008      given in an `Enum' record.  These records have two fields: the
   6009      string `EnumValue' and a space-separated list of properties.
   6010      Properties use the same format as option properties; the following
   6011      are valid:
   6012     `Enum(NAME)'
   6013           This property is required; NAME says which `Enum' record this
   6014           `EnumValue' record corresponds to.
   6015 
   6016     `String(STRING)'
   6017           This property is required; STRING is the string option
   6018           argument being described by this record.
   6019 
   6020     `Value(VALUE)'
   6021           This property is required; it says what value (representable
   6022           as `int') should be used for the given string.
   6023 
   6024     `Canonical'
   6025           This property is optional.  If present, it says the present
   6026           string is the canonical one among all those with the given
   6027           value.  Other strings yielding that value will be mapped to
   6028           this one so specs do not need to handle them.
   6029 
   6030     `DriverOnly'
   6031           This property is optional.  If present, the present string
   6032           will only be accepted by the driver.  This is used for cases
   6033           such as `-march=native' that are processed by the driver so
   6034           that `gcc -v' shows how the options chosen depended on the
   6035           system on which the compiler was run.
   6036 
   6037    * An option definition record.  These records have the following
   6038      fields:
   6039        1. the name of the option, with the leading "-" removed
   6040 
   6041        2. a space-separated list of option properties (*note Option
   6042           properties::)
   6043 
   6044        3. the help text to use for `--help' (omitted if the second field
   6045           contains the `Undocumented' property).
   6046 
   6047      By default, all options beginning with "f", "W" or "m" are
   6048      implicitly assumed to take a "no-" form.  This form should not be
   6049      listed separately.  If an option beginning with one of these
   6050      letters does not have a "no-" form, you can use the
   6051      `RejectNegative' property to reject it.
   6052 
   6053      The help text is automatically line-wrapped before being displayed.
   6054      Normally the name of the option is printed on the left-hand side of
   6055      the output and the help text is printed on the right.  However, if
   6056      the help text contains a tab character, the text to the left of
   6057      the tab is used instead of the option's name and the text to the
   6058      right of the tab forms the help text.  This allows you to
   6059      elaborate on what type of argument the option takes.
   6060 
   6061    * A target mask record.  These records have one field of the form
   6062      `Mask(X)'.  The options-processing script will automatically
   6063      allocate a bit in `target_flags' (*note Run-time Target::) for
   6064      each mask name X and set the macro `MASK_X' to the appropriate
   6065      bitmask.  It will also declare a `TARGET_X' macro that has the
   6066      value 1 when bit `MASK_X' is set and 0 otherwise.
   6067 
   6068      They are primarily intended to declare target masks that are not
   6069      associated with user options, either because these masks represent
   6070      internal switches or because the options are not available on all
   6071      configurations and yet the masks always need to be defined.
   6072 
   6073 
   6074 File: gccint.info,  Node: Option properties,  Prev: Option file format,  Up: Options
   6075 
   6076 8.2 Option properties
   6077 =====================
   6078 
   6079 The second field of an option record can specify any of the following
   6080 properties.  When an option takes an argument, it is enclosed in
   6081 parentheses following the option property name.  The parser that
   6082 handles option files is quite simplistic, and will be tricked by any
   6083 nested parentheses within the argument text itself; in this case, the
   6084 entire option argument can be wrapped in curly braces within the
   6085 parentheses to demarcate it, e.g.:
   6086 
   6087      Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)})
   6088 
   6089 `Common'
   6090      The option is available for all languages and targets.
   6091 
   6092 `Target'
   6093      The option is available for all languages but is target-specific.
   6094 
   6095 `Driver'
   6096      The option is handled by the compiler driver using code not shared
   6097      with the compilers proper (`cc1' etc.).
   6098 
   6099 `LANGUAGE'
   6100      The option is available when compiling for the given language.
   6101 
   6102      It is possible to specify several different languages for the same
   6103      option.  Each LANGUAGE must have been declared by an earlier
   6104      `Language' record.  *Note Option file format::.
   6105 
   6106 `RejectDriver'
   6107      The option is only handled by the compilers proper (`cc1' etc.)
   6108      and should not be accepted by the driver.
   6109 
   6110 `RejectNegative'
   6111      The option does not have a "no-" form.  All options beginning with
   6112      "f", "W" or "m" are assumed to have a "no-" form unless this
   6113      property is used.
   6114 
   6115 `Negative(OTHERNAME)'
   6116      The option will turn off another option OTHERNAME, which is the
   6117      option name with the leading "-" removed.  This chain action will
   6118      propagate through the `Negative' property of the option to be
   6119      turned off.
   6120 
   6121 `Joined'
   6122 `Separate'
   6123      The option takes a mandatory argument.  `Joined' indicates that
   6124      the option and argument can be included in the same `argv' entry
   6125      (as with `-mflush-func=NAME', for example).  `Separate' indicates
   6126      that the option and argument can be separate `argv' entries (as
   6127      with `-o').  An option is allowed to have both of these properties.
   6128 
   6129 `JoinedOrMissing'
   6130      The option takes an optional argument.  If the argument is given,
   6131      it will be part of the same `argv' entry as the option itself.
   6132 
   6133      This property cannot be used alongside `Joined' or `Separate'.
   6134 
   6135 `MissingArgError(MESSAGE)'
   6136      For an option marked `Joined' or `Separate', the message MESSAGE
   6137      will be used as an error message if the mandatory argument is
   6138      missing; for options without `MissingArgError', a generic error
   6139      message is used.  MESSAGE should contain a single `%qs' format,
   6140      which will be used to format the name of the option passed.
   6141 
   6142 `Args(N)'
   6143      For an option marked `Separate', indicate that it takes N
   6144      arguments.  The default is 1.
   6145 
   6146 `UInteger'
   6147      The option's argument is a non-negative integer.  The option parser
   6148      will check and convert the argument before passing it to the
   6149      relevant option handler.  `UInteger' should also be used on
   6150      options like `-falign-loops' where both `-falign-loops' and
   6151      `-falign-loops'=N are supported to make sure the saved options are
   6152      given a full integer.
   6153 
   6154 `NoDriverArg'
   6155      For an option marked `Separate', the option only takes an argument
   6156      in the compiler proper, not in the driver.  This is for
   6157      compatibility with existing options that are used both directly and
   6158      via `-Wp,'; new options should not have this property.
   6159 
   6160 `Var(VAR)'
   6161      The state of this option should be stored in variable VAR
   6162      (actually a macro for `global_options.x_VAR').  The way that the
   6163      state is stored depends on the type of option:
   6164 
   6165         * If the option uses the `Mask' or `InverseMask' properties,
   6166           VAR is the integer variable that contains the mask.
   6167 
   6168         * If the option is a normal on/off switch, VAR is an integer
   6169           variable that is nonzero when the option is enabled.  The
   6170           options parser will set the variable to 1 when the positive
   6171           form of the option is used and 0 when the "no-" form is used.
   6172 
   6173         * If the option takes an argument and has the `UInteger'
   6174           property, VAR is an integer variable that stores the value of
   6175           the argument.
   6176 
   6177         * If the option takes an argument and has the `Enum' property,
   6178           VAR is a variable (type given in the `Type' property of the
   6179           `Enum' record whose `Name' property has the same argument as
   6180           the `Enum' property of this option) that stores the value of
   6181           the argument.
   6182 
   6183         * If the option has the `Defer' property, VAR is a pointer to a
   6184           `VEC(cl_deferred_option,heap)' that stores the option for
   6185           later processing.  (VAR is declared with type `void *' and
   6186           needs to be cast to `VEC(cl_deferred_option,heap)' before
   6187           use.)
   6188 
   6189         * Otherwise, if the option takes an argument, VAR is a pointer
   6190           to the argument string.  The pointer will be null if the
   6191           argument is optional and wasn't given.
   6192 
   6193      The option-processing script will usually zero-initialize VAR.
   6194      You can modify this behavior using `Init'.
   6195 
   6196 `Var(VAR, SET)'
   6197      The option controls an integer variable VAR and is active when VAR
   6198      equals SET.  The option parser will set VAR to SET when the
   6199      positive form of the option is used and `!SET' when the "no-" form
   6200      is used.
   6201 
   6202      VAR is declared in the same way as for the single-argument form
   6203      described above.
   6204 
   6205 `Init(VALUE)'
   6206      The variable specified by the `Var' property should be statically
   6207      initialized to VALUE.  If more than one option using the same
   6208      variable specifies `Init', all must specify the same initializer.
   6209 
   6210 `Mask(NAME)'
   6211      The option is associated with a bit in the `target_flags' variable
   6212      (*note Run-time Target::) and is active when that bit is set.  You
   6213      may also specify `Var' to select a variable other than
   6214      `target_flags'.
   6215 
   6216      The options-processing script will automatically allocate a unique
   6217      bit for the option.  If the option is attached to `target_flags',
   6218      the script will set the macro `MASK_NAME' to the appropriate
   6219      bitmask.  It will also declare a `TARGET_NAME' macro that has the
   6220      value 1 when the option is active and 0 otherwise.  If you use
   6221      `Var' to attach the option to a different variable, the associated
   6222      macros are called `OPTION_MASK_NAME' and `OPTION_NAME'
   6223      respectively.
   6224 
   6225      You can disable automatic bit allocation using `MaskExists'.
   6226 
   6227 `InverseMask(OTHERNAME)'
   6228 `InverseMask(OTHERNAME, THISNAME)'
   6229      The option is the inverse of another option that has the
   6230      `Mask(OTHERNAME)' property.  If THISNAME is given, the
   6231      options-processing script will declare a `TARGET_THISNAME' macro
   6232      that is 1 when the option is active and 0 otherwise.
   6233 
   6234 `MaskExists'
   6235      The mask specified by the `Mask' property already exists.  No
   6236      `MASK' or `TARGET' definitions should be added to `options.h' in
   6237      response to this option record.
   6238 
   6239      The main purpose of this property is to support synonymous options.
   6240      The first option should use `Mask(NAME)' and the others should use
   6241      `Mask(NAME) MaskExists'.
   6242 
   6243 `Enum(NAME)'
   6244      The option's argument is a string from the set of strings
   6245      associated with the corresponding `Enum' record.  The string is
   6246      checked and converted to the integer specified in the corresponding
   6247      `EnumValue' record before being passed to option handlers.
   6248 
   6249 `Defer'
   6250      The option should be stored in a vector, specified with `Var', for
   6251      later processing.
   6252 
   6253 `Alias(OPT)'
   6254 `Alias(OPT, ARG)'
   6255 `Alias(OPT, POSARG, NEGARG)'
   6256      The option is an alias for `-OPT'.  In the first form, any
   6257      argument passed to the alias is considered to be passed to `-OPT',
   6258      and `-OPT' is considered to be negated if the alias is used in
   6259      negated form.  In the second form, the alias may not be negated or
   6260      have an argument, and POSARG is considered to be passed as an
   6261      argument to `-OPT'.  In the third form, the alias may not have an
   6262      argument, if the alias is used in the positive form then POSARG is
   6263      considered to be passed to `-OPT', and if the alias is used in the
   6264      negative form then NEGARG is considered to be passed to `-OPT'.
   6265 
   6266      Aliases should not specify `Var' or `Mask' or `UInteger'.  Aliases
   6267      should normally specify the same languages as the target of the
   6268      alias; the flags on the target will be used to determine any
   6269      diagnostic for use of an option for the wrong language, while
   6270      those on the alias will be used to identify what command-line text
   6271      is the option and what text is any argument to that option.
   6272 
   6273      When an `Alias' definition is used for an option, driver specs do
   6274      not need to handle it and no `OPT_' enumeration value is defined
   6275      for it; only the canonical form of the option will be seen in those
   6276      places.
   6277 
   6278 `Ignore'
   6279      This option is ignored apart from printing any warning specified
   6280      using `Warn'.  The option will not be seen by specs and no `OPT_'
   6281      enumeration value is defined for it.
   6282 
   6283 `SeparateAlias'
   6284      For an option marked with `Joined', `Separate' and `Alias', the
   6285      option only acts as an alias when passed a separate argument; with
   6286      a joined argument it acts as a normal option, with an `OPT_'
   6287      enumeration value.  This is for compatibility with the Java `-d'
   6288      option and should not be used for new options.
   6289 
   6290 `Warn(MESSAGE)'
   6291      If this option is used, output the warning MESSAGE.  MESSAGE is a
   6292      format string, either taking a single operand with a `%qs' format
   6293      which is the option name, or not taking any operands, which is
   6294      passed to the `warning' function.  If an alias is marked `Warn',
   6295      the target of the alias must not also be marked `Warn'.
   6296 
   6297 `Report'
   6298      The state of the option should be printed by `-fverbose-asm'.
   6299 
   6300 `Warning'
   6301      This is a warning option and should be shown as such in `--help'
   6302      output.  This flag does not currently affect anything other than
   6303      `--help'.
   6304 
   6305 `Optimization'
   6306      This is an optimization option.  It should be shown as such in
   6307      `--help' output, and any associated variable named using `Var'
   6308      should be saved and restored when the optimization level is
   6309      changed with `optimize' attributes.
   6310 
   6311 `Undocumented'
   6312      The option is deliberately missing documentation and should not be
   6313      included in the `--help' output.
   6314 
   6315 `Condition(COND)'
   6316      The option should only be accepted if preprocessor condition COND
   6317      is true.  Note that any C declarations associated with the option
   6318      will be present even if COND is false; COND simply controls
   6319      whether the option is accepted and whether it is printed in the
   6320      `--help' output.
   6321 
   6322 `Save'
   6323      Build the `cl_target_option' structure to hold a copy of the
   6324      option, add the functions `cl_target_option_save' and
   6325      `cl_target_option_restore' to save and restore the options.
   6326 
   6327 `SetByCombined'
   6328      The option may also be set by a combined option such as
   6329      `-ffast-math'.  This causes the `gcc_options' struct to have a
   6330      field `frontend_set_NAME', where `NAME' is the name of the field
   6331      holding the value of this option (without the leading `x_').  This
   6332      gives the front end a way to indicate that the value has been set
   6333      explicitly and should not be changed by the combined option.  For
   6334      example, some front ends use this to prevent `-ffast-math' and
   6335      `-fno-fast-math' from changing the value of `-fmath-errno' for
   6336      languages that do not use `errno'.
   6337 
   6338 
   6339 
   6340 File: gccint.info,  Node: Passes,  Next: GENERIC,  Prev: Options,  Up: Top
   6341 
   6342 9 Passes and Files of the Compiler
   6343 **********************************
   6344 
   6345 This chapter is dedicated to giving an overview of the optimization and
   6346 code generation passes of the compiler.  In the process, it describes
   6347 some of the language front end interface, though this description is no
   6348 where near complete.
   6349 
   6350 * Menu:
   6351 
   6352 * Parsing pass::         The language front end turns text into bits.
   6353 * Gimplification pass::  The bits are turned into something we can optimize.
   6354 * Pass manager::         Sequencing the optimization passes.
   6355 * Tree SSA passes::      Optimizations on a high-level representation.
   6356 * RTL passes::           Optimizations on a low-level representation.
   6357 
   6358 
   6359 File: gccint.info,  Node: Parsing pass,  Next: Gimplification pass,  Up: Passes
   6360 
   6361 9.1 Parsing pass
   6362 ================
   6363 
   6364 The language front end is invoked only once, via
   6365 `lang_hooks.parse_file', to parse the entire input.  The language front
   6366 end may use any intermediate language representation deemed
   6367 appropriate.  The C front end uses GENERIC trees (*note GENERIC::), plus
   6368 a double handful of language specific tree codes defined in
   6369 `c-common.def'.  The Fortran front end uses a completely different
   6370 private representation.
   6371 
   6372  At some point the front end must translate the representation used in
   6373 the front end to a representation understood by the language-independent
   6374 portions of the compiler.  Current practice takes one of two forms.
   6375 The C front end manually invokes the gimplifier (*note GIMPLE::) on
   6376 each function, and uses the gimplifier callbacks to convert the
   6377 language-specific tree nodes directly to GIMPLE before passing the
   6378 function off to be compiled.  The Fortran front end converts from a
   6379 private representation to GENERIC, which is later lowered to GIMPLE
   6380 when the function is compiled.  Which route to choose probably depends
   6381 on how well GENERIC (plus extensions) can be made to match up with the
   6382 source language and necessary parsing data structures.
   6383 
   6384  BUG: Gimplification must occur before nested function lowering, and
   6385 nested function lowering must be done by the front end before passing
   6386 the data off to cgraph.
   6387 
   6388  TODO: Cgraph should control nested function lowering.  It would only
   6389 be invoked when it is certain that the outer-most function is used.
   6390 
   6391  TODO: Cgraph needs a gimplify_function callback.  It should be invoked
   6392 when (1) it is certain that the function is used, (2) warning flags
   6393 specified by the user require some amount of compilation in order to
   6394 honor, (3) the language indicates that semantic analysis is not
   6395 complete until gimplification occurs.  Hum... this sounds overly
   6396 complicated.  Perhaps we should just have the front end gimplify
   6397 always; in most cases it's only one function call.
   6398 
   6399  The front end needs to pass all function definitions and top level
   6400 declarations off to the middle-end so that they can be compiled and
   6401 emitted to the object file.  For a simple procedural language, it is
   6402 usually most convenient to do this as each top level declaration or
   6403 definition is seen.  There is also a distinction to be made between
   6404 generating functional code and generating complete debug information.
   6405 The only thing that is absolutely required for functional code is that
   6406 function and data _definitions_ be passed to the middle-end.  For
   6407 complete debug information, function, data and type declarations should
   6408 all be passed as well.
   6409 
   6410  In any case, the front end needs each complete top-level function or
   6411 data declaration, and each data definition should be passed to
   6412 `rest_of_decl_compilation'.  Each complete type definition should be
   6413 passed to `rest_of_type_compilation'.  Each function definition should
   6414 be passed to `cgraph_finalize_function'.
   6415 
   6416  TODO: I know rest_of_compilation currently has all sorts of RTL
   6417 generation semantics.  I plan to move all code generation bits (both
   6418 Tree and RTL) to compile_function.  Should we hide cgraph from the
   6419 front ends and move back to rest_of_compilation as the official
   6420 interface?  Possibly we should rename all three interfaces such that
   6421 the names match in some meaningful way and that is more descriptive
   6422 than "rest_of".
   6423 
   6424  The middle-end will, at its option, emit the function and data
   6425 definitions immediately or queue them for later processing.
   6426 
   6427 
   6428 File: gccint.info,  Node: Gimplification pass,  Next: Pass manager,  Prev: Parsing pass,  Up: Passes
   6429 
   6430 9.2 Gimplification pass
   6431 =======================
   6432 
   6433 "Gimplification" is a whimsical term for the process of converting the
   6434 intermediate representation of a function into the GIMPLE language
   6435 (*note GIMPLE::).  The term stuck, and so words like "gimplification",
   6436 "gimplify", "gimplifier" and the like are sprinkled throughout this
   6437 section of code.
   6438 
   6439  While a front end may certainly choose to generate GIMPLE directly if
   6440 it chooses, this can be a moderately complex process unless the
   6441 intermediate language used by the front end is already fairly simple.
   6442 Usually it is easier to generate GENERIC trees plus extensions and let
   6443 the language-independent gimplifier do most of the work.
   6444 
   6445  The main entry point to this pass is `gimplify_function_tree' located
   6446 in `gimplify.c'.  From here we process the entire function gimplifying
   6447 each statement in turn.  The main workhorse for this pass is
   6448 `gimplify_expr'.  Approximately everything passes through here at least
   6449 once, and it is from here that we invoke the `lang_hooks.gimplify_expr'
   6450 callback.
   6451 
   6452  The callback should examine the expression in question and return
   6453 `GS_UNHANDLED' if the expression is not a language specific construct
   6454 that requires attention.  Otherwise it should alter the expression in
   6455 some way to such that forward progress is made toward producing valid
   6456 GIMPLE.  If the callback is certain that the transformation is complete
   6457 and the expression is valid GIMPLE, it should return `GS_ALL_DONE'.
   6458 Otherwise it should return `GS_OK', which will cause the expression to
   6459 be processed again.  If the callback encounters an error during the
   6460 transformation (because the front end is relying on the gimplification
   6461 process to finish semantic checks), it should return `GS_ERROR'.
   6462 
   6463 
   6464 File: gccint.info,  Node: Pass manager,  Next: Tree SSA passes,  Prev: Gimplification pass,  Up: Passes
   6465 
   6466 9.3 Pass manager
   6467 ================
   6468 
   6469 The pass manager is located in `passes.c', `tree-optimize.c' and
   6470 `tree-pass.h'.  Its job is to run all of the individual passes in the
   6471 correct order, and take care of standard bookkeeping that applies to
   6472 every pass.
   6473 
   6474  The theory of operation is that each pass defines a structure that
   6475 represents everything we need to know about that pass--when it should
   6476 be run, how it should be run, what intermediate language form or
   6477 on-the-side data structures it needs.  We register the pass to be run
   6478 in some particular order, and the pass manager arranges for everything
   6479 to happen in the correct order.
   6480 
   6481  The actuality doesn't completely live up to the theory at present.
   6482 Command-line switches and `timevar_id_t' enumerations must still be
   6483 defined elsewhere.  The pass manager validates constraints but does not
   6484 attempt to (re-)generate data structures or lower intermediate language
   6485 form based on the requirements of the next pass.  Nevertheless, what is
   6486 present is useful, and a far sight better than nothing at all.
   6487 
   6488  Each pass should have a unique name.  Each pass may have its own dump
   6489 file (for GCC debugging purposes).  Passes with a name starting with a
   6490 star do not dump anything.  Sometimes passes are supposed to share a
   6491 dump file / option name.  To still give these unique names, you can use
   6492 a prefix that is delimited by a space from the part that is used for
   6493 the dump file / option name.  E.g. When the pass name is "ud dce", the
   6494 name used for dump file/options is "dce".
   6495 
   6496  TODO: describe the global variables set up by the pass manager, and a
   6497 brief description of how a new pass should use it.  I need to look at
   6498 what info RTL passes use first...
   6499 
   6500 
   6501 File: gccint.info,  Node: Tree SSA passes,  Next: RTL passes,  Prev: Pass manager,  Up: Passes
   6502 
   6503 9.4 Tree SSA passes
   6504 ===================
   6505 
   6506 The following briefly describes the Tree optimization passes that are
   6507 run after gimplification and what source files they are located in.
   6508 
   6509    * Remove useless statements
   6510 
   6511      This pass is an extremely simple sweep across the gimple code in
   6512      which we identify obviously dead code and remove it.  Here we do
   6513      things like simplify `if' statements with constant conditions,
   6514      remove exception handling constructs surrounding code that
   6515      obviously cannot throw, remove lexical bindings that contain no
   6516      variables, and other assorted simplistic cleanups.  The idea is to
   6517      get rid of the obvious stuff quickly rather than wait until later
   6518      when it's more work to get rid of it.  This pass is located in
   6519      `tree-cfg.c' and described by `pass_remove_useless_stmts'.
   6520 
   6521    * Mudflap declaration registration
   6522 
   6523      If mudflap (*note -fmudflap -fmudflapth -fmudflapir: (gcc)Optimize
   6524      Options.) is enabled, we generate code to register some variable
   6525      declarations with the mudflap runtime.  Specifically, the runtime
   6526      tracks the lifetimes of those variable declarations that have
   6527      their addresses taken, or whose bounds are unknown at compile time
   6528      (`extern').  This pass generates new exception handling constructs
   6529      (`try'/`finally'), and so must run before those are lowered.  In
   6530      addition, the pass enqueues declarations of static variables whose
   6531      lifetimes extend to the entire program.  The pass is located in
   6532      `tree-mudflap.c' and is described by `pass_mudflap_1'.
   6533 
   6534    * OpenMP lowering
   6535 
   6536      If OpenMP generation (`-fopenmp') is enabled, this pass lowers
   6537      OpenMP constructs into GIMPLE.
   6538 
   6539      Lowering of OpenMP constructs involves creating replacement
   6540      expressions for local variables that have been mapped using data
   6541      sharing clauses, exposing the control flow of most synchronization
   6542      directives and adding region markers to facilitate the creation of
   6543      the control flow graph.  The pass is located in `omp-low.c' and is
   6544      described by `pass_lower_omp'.
   6545 
   6546    * OpenMP expansion
   6547 
   6548      If OpenMP generation (`-fopenmp') is enabled, this pass expands
   6549      parallel regions into their own functions to be invoked by the
   6550      thread library.  The pass is located in `omp-low.c' and is
   6551      described by `pass_expand_omp'.
   6552 
   6553    * Lower control flow
   6554 
   6555      This pass flattens `if' statements (`COND_EXPR') and moves lexical
   6556      bindings (`BIND_EXPR') out of line.  After this pass, all `if'
   6557      statements will have exactly two `goto' statements in its `then'
   6558      and `else' arms.  Lexical binding information for each statement
   6559      will be found in `TREE_BLOCK' rather than being inferred from its
   6560      position under a `BIND_EXPR'.  This pass is found in
   6561      `gimple-low.c' and is described by `pass_lower_cf'.
   6562 
   6563    * Lower exception handling control flow
   6564 
   6565      This pass decomposes high-level exception handling constructs
   6566      (`TRY_FINALLY_EXPR' and `TRY_CATCH_EXPR') into a form that
   6567      explicitly represents the control flow involved.  After this pass,
   6568      `lookup_stmt_eh_region' will return a non-negative number for any
   6569      statement that may have EH control flow semantics; examine
   6570      `tree_can_throw_internal' or `tree_can_throw_external' for exact
   6571      semantics.  Exact control flow may be extracted from
   6572      `foreach_reachable_handler'.  The EH region nesting tree is defined
   6573      in `except.h' and built in `except.c'.  The lowering pass itself
   6574      is in `tree-eh.c' and is described by `pass_lower_eh'.
   6575 
   6576    * Build the control flow graph
   6577 
   6578      This pass decomposes a function into basic blocks and creates all
   6579      of the edges that connect them.  It is located in `tree-cfg.c' and
   6580      is described by `pass_build_cfg'.
   6581 
   6582    * Find all referenced variables
   6583 
   6584      This pass walks the entire function and collects an array of all
   6585      variables referenced in the function, `referenced_vars'.  The
   6586      index at which a variable is found in the array is used as a UID
   6587      for the variable within this function.  This data is needed by the
   6588      SSA rewriting routines.  The pass is located in `tree-dfa.c' and
   6589      is described by `pass_referenced_vars'.
   6590 
   6591    * Enter static single assignment form
   6592 
   6593      This pass rewrites the function such that it is in SSA form.  After
   6594      this pass, all `is_gimple_reg' variables will be referenced by
   6595      `SSA_NAME', and all occurrences of other variables will be
   6596      annotated with `VDEFS' and `VUSES'; PHI nodes will have been
   6597      inserted as necessary for each basic block.  This pass is located
   6598      in `tree-ssa.c' and is described by `pass_build_ssa'.
   6599 
   6600    * Warn for uninitialized variables
   6601 
   6602      This pass scans the function for uses of `SSA_NAME's that are fed
   6603      by default definition.  For non-parameter variables, such uses are
   6604      uninitialized.  The pass is run twice, before and after
   6605      optimization (if turned on).  In the first pass we only warn for
   6606      uses that are positively uninitialized; in the second pass we warn
   6607      for uses that are possibly uninitialized.  The pass is located in
   6608      `tree-ssa.c' and is defined by `pass_early_warn_uninitialized' and
   6609      `pass_late_warn_uninitialized'.
   6610 
   6611    * Dead code elimination
   6612 
   6613      This pass scans the function for statements without side effects
   6614      whose result is unused.  It does not do memory life analysis, so
   6615      any value that is stored in memory is considered used.  The pass
   6616      is run multiple times throughout the optimization process.  It is
   6617      located in `tree-ssa-dce.c' and is described by `pass_dce'.
   6618 
   6619    * Dominator optimizations
   6620 
   6621      This pass performs trivial dominator-based copy and constant
   6622      propagation, expression simplification, and jump threading.  It is
   6623      run multiple times throughout the optimization process.  It is
   6624      located in `tree-ssa-dom.c' and is described by `pass_dominator'.
   6625 
   6626    * Forward propagation of single-use variables
   6627 
   6628      This pass attempts to remove redundant computation by substituting
   6629      variables that are used once into the expression that uses them and
   6630      seeing if the result can be simplified.  It is located in
   6631      `tree-ssa-forwprop.c' and is described by `pass_forwprop'.
   6632 
   6633    * Copy Renaming
   6634 
   6635      This pass attempts to change the name of compiler temporaries
   6636      involved in copy operations such that SSA->normal can coalesce the
   6637      copy away.  When compiler temporaries are copies of user
   6638      variables, it also renames the compiler temporary to the user
   6639      variable resulting in better use of user symbols.  It is located
   6640      in `tree-ssa-copyrename.c' and is described by `pass_copyrename'.
   6641 
   6642    * PHI node optimizations
   6643 
   6644      This pass recognizes forms of PHI inputs that can be represented as
   6645      conditional expressions and rewrites them into straight line code.
   6646      It is located in `tree-ssa-phiopt.c' and is described by
   6647      `pass_phiopt'.
   6648 
   6649    * May-alias optimization
   6650 
   6651      This pass performs a flow sensitive SSA-based points-to analysis.
   6652      The resulting may-alias, must-alias, and escape analysis
   6653      information is used to promote variables from in-memory
   6654      addressable objects to non-aliased variables that can be renamed
   6655      into SSA form.  We also update the `VDEF'/`VUSE' memory tags for
   6656      non-renameable aggregates so that we get fewer false kills.  The
   6657      pass is located in `tree-ssa-alias.c' and is described by
   6658      `pass_may_alias'.
   6659 
   6660      Interprocedural points-to information is located in
   6661      `tree-ssa-structalias.c' and described by `pass_ipa_pta'.
   6662 
   6663    * Profiling
   6664 
   6665      This pass rewrites the function in order to collect runtime block
   6666      and value profiling data.  Such data may be fed back into the
   6667      compiler on a subsequent run so as to allow optimization based on
   6668      expected execution frequencies.  The pass is located in
   6669      `predict.c' and is described by `pass_profile'.
   6670 
   6671    * Lower complex arithmetic
   6672 
   6673      This pass rewrites complex arithmetic operations into their
   6674      component scalar arithmetic operations.  The pass is located in
   6675      `tree-complex.c' and is described by `pass_lower_complex'.
   6676 
   6677    * Scalar replacement of aggregates
   6678 
   6679      This pass rewrites suitable non-aliased local aggregate variables
   6680      into a set of scalar variables.  The resulting scalar variables are
   6681      rewritten into SSA form, which allows subsequent optimization
   6682      passes to do a significantly better job with them.  The pass is
   6683      located in `tree-sra.c' and is described by `pass_sra'.
   6684 
   6685    * Dead store elimination
   6686 
   6687      This pass eliminates stores to memory that are subsequently
   6688      overwritten by another store, without any intervening loads.  The
   6689      pass is located in `tree-ssa-dse.c' and is described by `pass_dse'.
   6690 
   6691    * Tail recursion elimination
   6692 
   6693      This pass transforms tail recursion into a loop.  It is located in
   6694      `tree-tailcall.c' and is described by `pass_tail_recursion'.
   6695 
   6696    * Forward store motion
   6697 
   6698      This pass sinks stores and assignments down the flowgraph closer
   6699      to their use point.  The pass is located in `tree-ssa-sink.c' and
   6700      is described by `pass_sink_code'.
   6701 
   6702    * Partial redundancy elimination
   6703 
   6704      This pass eliminates partially redundant computations, as well as
   6705      performing load motion.  The pass is located in `tree-ssa-pre.c'
   6706      and is described by `pass_pre'.
   6707 
   6708      Just before partial redundancy elimination, if
   6709      `-funsafe-math-optimizations' is on, GCC tries to convert
   6710      divisions to multiplications by the reciprocal.  The pass is
   6711      located in `tree-ssa-math-opts.c' and is described by
   6712      `pass_cse_reciprocal'.
   6713 
   6714    * Full redundancy elimination
   6715 
   6716      This is a simpler form of PRE that only eliminates redundancies
   6717      that occur an all paths.  It is located in `tree-ssa-pre.c' and
   6718      described by `pass_fre'.
   6719 
   6720    * Loop optimization
   6721 
   6722      The main driver of the pass is placed in `tree-ssa-loop.c' and
   6723      described by `pass_loop'.
   6724 
   6725      The optimizations performed by this pass are:
   6726 
   6727      Loop invariant motion.  This pass moves only invariants that would
   6728      be hard to handle on RTL level (function calls, operations that
   6729      expand to nontrivial sequences of insns).  With `-funswitch-loops'
   6730      it also moves operands of conditions that are invariant out of the
   6731      loop, so that we can use just trivial invariantness analysis in
   6732      loop unswitching.  The pass also includes store motion.  The pass
   6733      is implemented in `tree-ssa-loop-im.c'.
   6734 
   6735      Canonical induction variable creation.  This pass creates a simple
   6736      counter for number of iterations of the loop and replaces the exit
   6737      condition of the loop using it, in case when a complicated
   6738      analysis is necessary to determine the number of iterations.
   6739      Later optimizations then may determine the number easily.  The
   6740      pass is implemented in `tree-ssa-loop-ivcanon.c'.
   6741 
   6742      Induction variable optimizations.  This pass performs standard
   6743      induction variable optimizations, including strength reduction,
   6744      induction variable merging and induction variable elimination.
   6745      The pass is implemented in `tree-ssa-loop-ivopts.c'.
   6746 
   6747      Loop unswitching.  This pass moves the conditional jumps that are
   6748      invariant out of the loops.  To achieve this, a duplicate of the
   6749      loop is created for each possible outcome of conditional jump(s).
   6750      The pass is implemented in `tree-ssa-loop-unswitch.c'.  This pass
   6751      should eventually replace the RTL level loop unswitching in
   6752      `loop-unswitch.c', but currently the RTL level pass is not
   6753      completely redundant yet due to deficiencies in tree level alias
   6754      analysis.
   6755 
   6756      The optimizations also use various utility functions contained in
   6757      `tree-ssa-loop-manip.c', `cfgloop.c', `cfgloopanal.c' and
   6758      `cfgloopmanip.c'.
   6759 
   6760      Vectorization.  This pass transforms loops to operate on vector
   6761      types instead of scalar types.  Data parallelism across loop
   6762      iterations is exploited to group data elements from consecutive
   6763      iterations into a vector and operate on them in parallel.
   6764      Depending on available target support the loop is conceptually
   6765      unrolled by a factor `VF' (vectorization factor), which is the
   6766      number of elements operated upon in parallel in each iteration,
   6767      and the `VF' copies of each scalar operation are fused to form a
   6768      vector operation.  Additional loop transformations such as peeling
   6769      and versioning may take place to align the number of iterations,
   6770      and to align the memory accesses in the loop.  The pass is
   6771      implemented in `tree-vectorizer.c' (the main driver),
   6772      `tree-vect-loop.c' and `tree-vect-loop-manip.c' (loop specific
   6773      parts and general loop utilities), `tree-vect-slp' (loop-aware SLP
   6774      functionality), `tree-vect-stmts.c' and `tree-vect-data-refs.c'.
   6775      Analysis of data references is in `tree-data-ref.c'.
   6776 
   6777      SLP Vectorization.  This pass performs vectorization of
   6778      straight-line code. The pass is implemented in `tree-vectorizer.c'
   6779      (the main driver), `tree-vect-slp.c', `tree-vect-stmts.c' and
   6780      `tree-vect-data-refs.c'.
   6781 
   6782      Autoparallelization.  This pass splits the loop iteration space to
   6783      run into several threads.  The pass is implemented in
   6784      `tree-parloops.c'.
   6785 
   6786      Graphite is a loop transformation framework based on the polyhedral
   6787      model.  Graphite stands for Gimple Represented as Polyhedra.  The
   6788      internals of this infrastructure are documented in
   6789      `http://gcc.gnu.org/wiki/Graphite'.  The passes working on this
   6790      representation are implemented in the various `graphite-*' files.
   6791 
   6792    * Tree level if-conversion for vectorizer
   6793 
   6794      This pass applies if-conversion to simple loops to help vectorizer.
   6795      We identify if convertible loops, if-convert statements and merge
   6796      basic blocks in one big block.  The idea is to present loop in such
   6797      form so that vectorizer can have one to one mapping between
   6798      statements and available vector operations.  This pass is located
   6799      in `tree-if-conv.c' and is described by `pass_if_conversion'.
   6800 
   6801    * Conditional constant propagation
   6802 
   6803      This pass relaxes a lattice of values in order to identify those
   6804      that must be constant even in the presence of conditional branches.
   6805      The pass is located in `tree-ssa-ccp.c' and is described by
   6806      `pass_ccp'.
   6807 
   6808      A related pass that works on memory loads and stores, and not just
   6809      register values, is located in `tree-ssa-ccp.c' and described by
   6810      `pass_store_ccp'.
   6811 
   6812    * Conditional copy propagation
   6813 
   6814      This is similar to constant propagation but the lattice of values
   6815      is the "copy-of" relation.  It eliminates redundant copies from the
   6816      code.  The pass is located in `tree-ssa-copy.c' and described by
   6817      `pass_copy_prop'.
   6818 
   6819      A related pass that works on memory copies, and not just register
   6820      copies, is located in `tree-ssa-copy.c' and described by
   6821      `pass_store_copy_prop'.
   6822 
   6823    * Value range propagation
   6824 
   6825      This transformation is similar to constant propagation but instead
   6826      of propagating single constant values, it propagates known value
   6827      ranges.  The implementation is based on Patterson's range
   6828      propagation algorithm (Accurate Static Branch Prediction by Value
   6829      Range Propagation, J. R. C. Patterson, PLDI '95).  In contrast to
   6830      Patterson's algorithm, this implementation does not propagate
   6831      branch probabilities nor it uses more than a single range per SSA
   6832      name. This means that the current implementation cannot be used
   6833      for branch prediction (though adapting it would not be difficult).
   6834      The pass is located in `tree-vrp.c' and is described by `pass_vrp'.
   6835 
   6836    * Folding built-in functions
   6837 
   6838      This pass simplifies built-in functions, as applicable, with
   6839      constant arguments or with inferable string lengths.  It is
   6840      located in `tree-ssa-ccp.c' and is described by
   6841      `pass_fold_builtins'.
   6842 
   6843    * Split critical edges
   6844 
   6845      This pass identifies critical edges and inserts empty basic blocks
   6846      such that the edge is no longer critical.  The pass is located in
   6847      `tree-cfg.c' and is described by `pass_split_crit_edges'.
   6848 
   6849    * Control dependence dead code elimination
   6850 
   6851      This pass is a stronger form of dead code elimination that can
   6852      eliminate unnecessary control flow statements.   It is located in
   6853      `tree-ssa-dce.c' and is described by `pass_cd_dce'.
   6854 
   6855    * Tail call elimination
   6856 
   6857      This pass identifies function calls that may be rewritten into
   6858      jumps.  No code transformation is actually applied here, but the
   6859      data and control flow problem is solved.  The code transformation
   6860      requires target support, and so is delayed until RTL.  In the
   6861      meantime `CALL_EXPR_TAILCALL' is set indicating the possibility.
   6862      The pass is located in `tree-tailcall.c' and is described by
   6863      `pass_tail_calls'.  The RTL transformation is handled by
   6864      `fixup_tail_calls' in `calls.c'.
   6865 
   6866    * Warn for function return without value
   6867 
   6868      For non-void functions, this pass locates return statements that do
   6869      not specify a value and issues a warning.  Such a statement may
   6870      have been injected by falling off the end of the function.  This
   6871      pass is run last so that we have as much time as possible to prove
   6872      that the statement is not reachable.  It is located in
   6873      `tree-cfg.c' and is described by `pass_warn_function_return'.
   6874 
   6875    * Mudflap statement annotation
   6876 
   6877      If mudflap is enabled, we rewrite some memory accesses with code to
   6878      validate that the memory access is correct.  In particular,
   6879      expressions involving pointer dereferences (`INDIRECT_REF',
   6880      `ARRAY_REF', etc.) are replaced by code that checks the selected
   6881      address range against the mudflap runtime's database of valid
   6882      regions.  This check includes an inline lookup into a
   6883      direct-mapped cache, based on shift/mask operations of the pointer
   6884      value, with a fallback function call into the runtime.  The pass
   6885      is located in `tree-mudflap.c' and is described by
   6886      `pass_mudflap_2'.
   6887 
   6888    * Leave static single assignment form
   6889 
   6890      This pass rewrites the function such that it is in normal form.  At
   6891      the same time, we eliminate as many single-use temporaries as
   6892      possible, so the intermediate language is no longer GIMPLE, but
   6893      GENERIC.  The pass is located in `tree-outof-ssa.c' and is
   6894      described by `pass_del_ssa'.
   6895 
   6896    * Merge PHI nodes that feed into one another
   6897 
   6898      This is part of the CFG cleanup passes.  It attempts to join PHI
   6899      nodes from a forwarder CFG block into another block with PHI
   6900      nodes.  The pass is located in `tree-cfgcleanup.c' and is
   6901      described by `pass_merge_phi'.
   6902 
   6903    * Return value optimization
   6904 
   6905      If a function always returns the same local variable, and that
   6906      local variable is an aggregate type, then the variable is replaced
   6907      with the return value for the function (i.e., the function's
   6908      DECL_RESULT).  This is equivalent to the C++ named return value
   6909      optimization applied to GIMPLE.  The pass is located in
   6910      `tree-nrv.c' and is described by `pass_nrv'.
   6911 
   6912    * Return slot optimization
   6913 
   6914      If a function returns a memory object and is called as `var =
   6915      foo()', this pass tries to change the call so that the address of
   6916      `var' is sent to the caller to avoid an extra memory copy.  This
   6917      pass is located in `tree-nrv.c' and is described by
   6918      `pass_return_slot'.
   6919 
   6920    * Optimize calls to `__builtin_object_size'
   6921 
   6922      This is a propagation pass similar to CCP that tries to remove
   6923      calls to `__builtin_object_size' when the size of the object can be
   6924      computed at compile-time.  This pass is located in
   6925      `tree-object-size.c' and is described by `pass_object_sizes'.
   6926 
   6927    * Loop invariant motion
   6928 
   6929      This pass removes expensive loop-invariant computations out of
   6930      loops.  The pass is located in `tree-ssa-loop.c' and described by
   6931      `pass_lim'.
   6932 
   6933    * Loop nest optimizations
   6934 
   6935      This is a family of loop transformations that works on loop nests.
   6936      It includes loop interchange, scaling, skewing and reversal and
   6937      they are all geared to the optimization of data locality in array
   6938      traversals and the removal of dependencies that hamper
   6939      optimizations such as loop parallelization and vectorization.  The
   6940      pass is located in `tree-loop-linear.c' and described by
   6941      `pass_linear_transform'.
   6942 
   6943    * Removal of empty loops
   6944 
   6945      This pass removes loops with no code in them.  The pass is located
   6946      in `tree-ssa-loop-ivcanon.c' and described by `pass_empty_loop'.
   6947 
   6948    * Unrolling of small loops
   6949 
   6950      This pass completely unrolls loops with few iterations.  The pass
   6951      is located in `tree-ssa-loop-ivcanon.c' and described by
   6952      `pass_complete_unroll'.
   6953 
   6954    * Predictive commoning
   6955 
   6956      This pass makes the code reuse the computations from the previous
   6957      iterations of the loops, especially loads and stores to memory.
   6958      It does so by storing the values of these computations to a bank
   6959      of temporary variables that are rotated at the end of loop.  To
   6960      avoid the need for this rotation, the loop is then unrolled and
   6961      the copies of the loop body are rewritten to use the appropriate
   6962      version of the temporary variable.  This pass is located in
   6963      `tree-predcom.c' and described by `pass_predcom'.
   6964 
   6965    * Array prefetching
   6966 
   6967      This pass issues prefetch instructions for array references inside
   6968      loops.  The pass is located in `tree-ssa-loop-prefetch.c' and
   6969      described by `pass_loop_prefetch'.
   6970 
   6971    * Reassociation
   6972 
   6973      This pass rewrites arithmetic expressions to enable optimizations
   6974      that operate on them, like redundancy elimination and
   6975      vectorization.  The pass is located in `tree-ssa-reassoc.c' and
   6976      described by `pass_reassoc'.
   6977 
   6978    * Optimization of `stdarg' functions
   6979 
   6980      This pass tries to avoid the saving of register arguments into the
   6981      stack on entry to `stdarg' functions.  If the function doesn't use
   6982      any `va_start' macros, no registers need to be saved.  If
   6983      `va_start' macros are used, the `va_list' variables don't escape
   6984      the function, it is only necessary to save registers that will be
   6985      used in `va_arg' macros.  For instance, if `va_arg' is only used
   6986      with integral types in the function, floating point registers
   6987      don't need to be saved.  This pass is located in `tree-stdarg.c'
   6988      and described by `pass_stdarg'.
   6989 
   6990 
   6991 
   6992 File: gccint.info,  Node: RTL passes,  Prev: Tree SSA passes,  Up: Passes
   6993 
   6994 9.5 RTL passes
   6995 ==============
   6996 
   6997 The following briefly describes the RTL generation and optimization
   6998 passes that are run after the Tree optimization passes.
   6999 
   7000    * RTL generation
   7001 
   7002      The source files for RTL generation include `stmt.c', `calls.c',
   7003      `expr.c', `explow.c', `expmed.c', `function.c', `optabs.c' and
   7004      `emit-rtl.c'.  Also, the file `insn-emit.c', generated from the
   7005      machine description by the program `genemit', is used in this
   7006      pass.  The header file `expr.h' is used for communication within
   7007      this pass.
   7008 
   7009      The header files `insn-flags.h' and `insn-codes.h', generated from
   7010      the machine description by the programs `genflags' and `gencodes',
   7011      tell this pass which standard names are available for use and
   7012      which patterns correspond to them.
   7013 
   7014    * Generation of exception landing pads
   7015 
   7016      This pass generates the glue that handles communication between the
   7017      exception handling library routines and the exception handlers
   7018      within the function.  Entry points in the function that are
   7019      invoked by the exception handling library are called "landing
   7020      pads".  The code for this pass is located in `except.c'.
   7021 
   7022    * Control flow graph cleanup
   7023 
   7024      This pass removes unreachable code, simplifies jumps to next,
   7025      jumps to jump, jumps across jumps, etc.  The pass is run multiple
   7026      times.  For historical reasons, it is occasionally referred to as
   7027      the "jump optimization pass".  The bulk of the code for this pass
   7028      is in `cfgcleanup.c', and there are support routines in `cfgrtl.c'
   7029      and `jump.c'.
   7030 
   7031    * Forward propagation of single-def values
   7032 
   7033      This pass attempts to remove redundant computation by substituting
   7034      variables that come from a single definition, and seeing if the
   7035      result can be simplified.  It performs copy propagation and
   7036      addressing mode selection.  The pass is run twice, with values
   7037      being propagated into loops only on the second run.  The code is
   7038      located in `fwprop.c'.
   7039 
   7040    * Common subexpression elimination
   7041 
   7042      This pass removes redundant computation within basic blocks, and
   7043      optimizes addressing modes based on cost.  The pass is run twice.
   7044      The code for this pass is located in `cse.c'.
   7045 
   7046    * Global common subexpression elimination
   7047 
   7048      This pass performs two different types of GCSE  depending on
   7049      whether you are optimizing for size or not (LCM based GCSE tends
   7050      to increase code size for a gain in speed, while Morel-Renvoise
   7051      based GCSE does not).  When optimizing for size, GCSE is done
   7052      using Morel-Renvoise Partial Redundancy Elimination, with the
   7053      exception that it does not try to move invariants out of
   7054      loops--that is left to  the loop optimization pass.  If MR PRE
   7055      GCSE is done, code hoisting (aka unification) is also done, as
   7056      well as load motion.  If you are optimizing for speed, LCM (lazy
   7057      code motion) based GCSE is done.  LCM is based on the work of
   7058      Knoop, Ruthing, and Steffen.  LCM based GCSE also does loop
   7059      invariant code motion.  We also perform load and store motion when
   7060      optimizing for speed.  Regardless of which type of GCSE is used,
   7061      the GCSE pass also performs global constant and  copy propagation.
   7062      The source file for this pass is `gcse.c', and the LCM routines
   7063      are in `lcm.c'.
   7064 
   7065    * Loop optimization
   7066 
   7067      This pass performs several loop related optimizations.  The source
   7068      files `cfgloopanal.c' and `cfgloopmanip.c' contain generic loop
   7069      analysis and manipulation code.  Initialization and finalization
   7070      of loop structures is handled by `loop-init.c'.  A loop invariant
   7071      motion pass is implemented in `loop-invariant.c'.  Basic block
   7072      level optimizations--unrolling, peeling and unswitching loops--
   7073      are implemented in `loop-unswitch.c' and `loop-unroll.c'.
   7074      Replacing of the exit condition of loops by special
   7075      machine-dependent instructions is handled by `loop-doloop.c'.
   7076 
   7077    * Jump bypassing
   7078 
   7079      This pass is an aggressive form of GCSE that transforms the control
   7080      flow graph of a function by propagating constants into conditional
   7081      branch instructions.  The source file for this pass is `gcse.c'.
   7082 
   7083    * If conversion
   7084 
   7085      This pass attempts to replace conditional branches and surrounding
   7086      assignments with arithmetic, boolean value producing comparison
   7087      instructions, and conditional move instructions.  In the very last
   7088      invocation after reload, it will generate predicated instructions
   7089      when supported by the target.  The code is located in `ifcvt.c'.
   7090 
   7091    * Web construction
   7092 
   7093      This pass splits independent uses of each pseudo-register.  This
   7094      can improve effect of the other transformation, such as CSE or
   7095      register allocation.  The code for this pass is located in `web.c'.
   7096 
   7097    * Instruction combination
   7098 
   7099      This pass attempts to combine groups of two or three instructions
   7100      that are related by data flow into single instructions.  It
   7101      combines the RTL expressions for the instructions by substitution,
   7102      simplifies the result using algebra, and then attempts to match
   7103      the result against the machine description.  The code is located
   7104      in `combine.c'.
   7105 
   7106    * Register movement
   7107 
   7108      This pass looks for cases where matching constraints would force an
   7109      instruction to need a reload, and this reload would be a
   7110      register-to-register move.  It then attempts to change the
   7111      registers used by the instruction to avoid the move instruction.
   7112      The code is located in `regmove.c'.
   7113 
   7114    * Mode switching optimization
   7115 
   7116      This pass looks for instructions that require the processor to be
   7117      in a specific "mode" and minimizes the number of mode changes
   7118      required to satisfy all users.  What these modes are, and what
   7119      they apply to are completely target-specific.  The code for this
   7120      pass is located in `mode-switching.c'.
   7121 
   7122    * Modulo scheduling
   7123 
   7124      This pass looks at innermost loops and reorders their instructions
   7125      by overlapping different iterations.  Modulo scheduling is
   7126      performed immediately before instruction scheduling.  The code for
   7127      this pass is located in `modulo-sched.c'.
   7128 
   7129    * Instruction scheduling
   7130 
   7131      This pass looks for instructions whose output will not be
   7132      available by the time that it is used in subsequent instructions.
   7133      Memory loads and floating point instructions often have this
   7134      behavior on RISC machines.  It re-orders instructions within a
   7135      basic block to try to separate the definition and use of items
   7136      that otherwise would cause pipeline stalls.  This pass is
   7137      performed twice, before and after register allocation.  The code
   7138      for this pass is located in `haifa-sched.c', `sched-deps.c',
   7139      `sched-ebb.c', `sched-rgn.c' and `sched-vis.c'.
   7140 
   7141    * Register allocation
   7142 
   7143      These passes make sure that all occurrences of pseudo registers are
   7144      eliminated, either by allocating them to a hard register, replacing
   7145      them by an equivalent expression (e.g. a constant) or by placing
   7146      them on the stack.  This is done in several subpasses:
   7147 
   7148         * Register move optimizations.  This pass makes some simple RTL
   7149           code transformations which improve the subsequent register
   7150           allocation.  The source file is `regmove.c'.
   7151 
   7152         * The integrated register allocator (IRA).  It is called
   7153           integrated because coalescing, register live range splitting,
   7154           and hard register preferencing are done on-the-fly during
   7155           coloring.  It also has better integration with the reload
   7156           pass.  Pseudo-registers spilled by the allocator or the
   7157           reload have still a chance to get hard-registers if the
   7158           reload evicts some pseudo-registers from hard-registers.  The
   7159           allocator helps to choose better pseudos for spilling based
   7160           on their live ranges and to coalesce stack slots allocated
   7161           for the spilled pseudo-registers.  IRA is a regional register
   7162           allocator which is transformed into Chaitin-Briggs allocator
   7163           if there is one region.  By default, IRA chooses regions using
   7164           register pressure but the user can force it to use one region
   7165           or regions corresponding to all loops.
   7166 
   7167           Source files of the allocator are `ira.c', `ira-build.c',
   7168           `ira-costs.c', `ira-conflicts.c', `ira-color.c',
   7169           `ira-emit.c', `ira-lives', plus header files `ira.h' and
   7170           `ira-int.h' used for the communication between the allocator
   7171           and the rest of the compiler and between the IRA files.
   7172 
   7173         * Reloading.  This pass renumbers pseudo registers with the
   7174           hardware registers numbers they were allocated.  Pseudo
   7175           registers that did not get hard registers are replaced with
   7176           stack slots.  Then it finds instructions that are invalid
   7177           because a value has failed to end up in a register, or has
   7178           ended up in a register of the wrong kind.  It fixes up these
   7179           instructions by reloading the problematical values
   7180           temporarily into registers.  Additional instructions are
   7181           generated to do the copying.
   7182 
   7183           The reload pass also optionally eliminates the frame pointer
   7184           and inserts instructions to save and restore call-clobbered
   7185           registers around calls.
   7186 
   7187           Source files are `reload.c' and `reload1.c', plus the header
   7188           `reload.h' used for communication between them.
   7189 
   7190    * Basic block reordering
   7191 
   7192      This pass implements profile guided code positioning.  If profile
   7193      information is not available, various types of static analysis are
   7194      performed to make the predictions normally coming from the profile
   7195      feedback (IE execution frequency, branch probability, etc).  It is
   7196      implemented in the file `bb-reorder.c', and the various prediction
   7197      routines are in `predict.c'.
   7198 
   7199    * Variable tracking
   7200 
   7201      This pass computes where the variables are stored at each position
   7202      in code and generates notes describing the variable locations to
   7203      RTL code.  The location lists are then generated according to these
   7204      notes to debug information if the debugging information format
   7205      supports location lists.  The code is located in `var-tracking.c'.
   7206 
   7207    * Delayed branch scheduling
   7208 
   7209      This optional pass attempts to find instructions that can go into
   7210      the delay slots of other instructions, usually jumps and calls.
   7211      The code for this pass is located in `reorg.c'.
   7212 
   7213    * Branch shortening
   7214 
   7215      On many RISC machines, branch instructions have a limited range.
   7216      Thus, longer sequences of instructions must be used for long
   7217      branches.  In this pass, the compiler figures out what how far
   7218      each instruction will be from each other instruction, and
   7219      therefore whether the usual instructions, or the longer sequences,
   7220      must be used for each branch.  The code for this pass is located
   7221      in `final.c'.
   7222 
   7223    * Register-to-stack conversion
   7224 
   7225      Conversion from usage of some hard registers to usage of a register
   7226      stack may be done at this point.  Currently, this is supported only
   7227      for the floating-point registers of the Intel 80387 coprocessor.
   7228      The code for this pass is located in `reg-stack.c'.
   7229 
   7230    * Final
   7231 
   7232      This pass outputs the assembler code for the function.  The source
   7233      files are `final.c' plus `insn-output.c'; the latter is generated
   7234      automatically from the machine description by the tool `genoutput'.
   7235      The header file `conditions.h' is used for communication between
   7236      these files.  If mudflap is enabled, the queue of deferred
   7237      declarations and any addressed constants (e.g., string literals)
   7238      is processed by `mudflap_finish_file' into a synthetic constructor
   7239      function containing calls into the mudflap runtime.
   7240 
   7241    * Debugging information output
   7242 
   7243      This is run after final because it must output the stack slot
   7244      offsets for pseudo registers that did not get hard registers.
   7245      Source files are `dbxout.c' for DBX symbol table format,
   7246      `sdbout.c' for SDB symbol table format, `dwarfout.c' for DWARF
   7247      symbol table format, files `dwarf2out.c' and `dwarf2asm.c' for
   7248      DWARF2 symbol table format, and `vmsdbgout.c' for VMS debug symbol
   7249      table format.
   7250 
   7251 
   7252 
   7253 File: gccint.info,  Node: RTL,  Next: Control Flow,  Prev: Tree SSA,  Up: Top
   7254 
   7255 10 RTL Representation
   7256 *********************
   7257 
   7258 The last part of the compiler work is done on a low-level intermediate
   7259 representation called Register Transfer Language.  In this language, the
   7260 instructions to be output are described, pretty much one by one, in an
   7261 algebraic form that describes what the instruction does.
   7262 
   7263  RTL is inspired by Lisp lists.  It has both an internal form, made up
   7264 of structures that point at other structures, and a textual form that
   7265 is used in the machine description and in printed debugging dumps.  The
   7266 textual form uses nested parentheses to indicate the pointers in the
   7267 internal form.
   7268 
   7269 * Menu:
   7270 
   7271 * RTL Objects::       Expressions vs vectors vs strings vs integers.
   7272 * RTL Classes::       Categories of RTL expression objects, and their structure.
   7273 * Accessors::         Macros to access expression operands or vector elts.
   7274 * Special Accessors:: Macros to access specific annotations on RTL.
   7275 * Flags::             Other flags in an RTL expression.
   7276 * Machine Modes::     Describing the size and format of a datum.
   7277 * Constants::         Expressions with constant values.
   7278 * Regs and Memory::   Expressions representing register contents or memory.
   7279 * Arithmetic::        Expressions representing arithmetic on other expressions.
   7280 * Comparisons::       Expressions representing comparison of expressions.
   7281 * Bit-Fields::        Expressions representing bit-fields in memory or reg.
   7282 * Vector Operations:: Expressions involving vector datatypes.
   7283 * Conversions::       Extending, truncating, floating or fixing.
   7284 * RTL Declarations::  Declaring volatility, constancy, etc.
   7285 * Side Effects::      Expressions for storing in registers, etc.
   7286 * Incdec::            Embedded side-effects for autoincrement addressing.
   7287 * Assembler::         Representing `asm' with operands.
   7288 * Debug Information:: Expressions representing debugging information.
   7289 * Insns::             Expression types for entire insns.
   7290 * Calls::             RTL representation of function call insns.
   7291 * Sharing::           Some expressions are unique; others *must* be copied.
   7292 * Reading RTL::       Reading textual RTL from a file.
   7293 
   7294 
   7295 File: gccint.info,  Node: RTL Objects,  Next: RTL Classes,  Up: RTL
   7296 
   7297 10.1 RTL Object Types
   7298 =====================
   7299 
   7300 RTL uses five kinds of objects: expressions, integers, wide integers,
   7301 strings and vectors.  Expressions are the most important ones.  An RTL
   7302 expression ("RTX", for short) is a C structure, but it is usually
   7303 referred to with a pointer; a type that is given the typedef name `rtx'.
   7304 
   7305  An integer is simply an `int'; their written form uses decimal digits.
   7306 A wide integer is an integral object whose type is `HOST_WIDE_INT';
   7307 their written form uses decimal digits.
   7308 
   7309  A string is a sequence of characters.  In core it is represented as a
   7310 `char *' in usual C fashion, and it is written in C syntax as well.
   7311 However, strings in RTL may never be null.  If you write an empty
   7312 string in a machine description, it is represented in core as a null
   7313 pointer rather than as a pointer to a null character.  In certain
   7314 contexts, these null pointers instead of strings are valid.  Within RTL
   7315 code, strings are most commonly found inside `symbol_ref' expressions,
   7316 but they appear in other contexts in the RTL expressions that make up
   7317 machine descriptions.
   7318 
   7319  In a machine description, strings are normally written with double
   7320 quotes, as you would in C.  However, strings in machine descriptions may
   7321 extend over many lines, which is invalid C, and adjacent string
   7322 constants are not concatenated as they are in C.  Any string constant
   7323 may be surrounded with a single set of parentheses.  Sometimes this
   7324 makes the machine description easier to read.
   7325 
   7326  There is also a special syntax for strings, which can be useful when C
   7327 code is embedded in a machine description.  Wherever a string can
   7328 appear, it is also valid to write a C-style brace block.  The entire
   7329 brace block, including the outermost pair of braces, is considered to be
   7330 the string constant.  Double quote characters inside the braces are not
   7331 special.  Therefore, if you write string constants in the C code, you
   7332 need not escape each quote character with a backslash.
   7333 
   7334  A vector contains an arbitrary number of pointers to expressions.  The
   7335 number of elements in the vector is explicitly present in the vector.
   7336 The written form of a vector consists of square brackets (`[...]')
   7337 surrounding the elements, in sequence and with whitespace separating
   7338 them.  Vectors of length zero are not created; null pointers are used
   7339 instead.
   7340 
   7341  Expressions are classified by "expression codes" (also called RTX
   7342 codes).  The expression code is a name defined in `rtl.def', which is
   7343 also (in uppercase) a C enumeration constant.  The possible expression
   7344 codes and their meanings are machine-independent.  The code of an RTX
   7345 can be extracted with the macro `GET_CODE (X)' and altered with
   7346 `PUT_CODE (X, NEWCODE)'.
   7347 
   7348  The expression code determines how many operands the expression
   7349 contains, and what kinds of objects they are.  In RTL, unlike Lisp, you
   7350 cannot tell by looking at an operand what kind of object it is.
   7351 Instead, you must know from its context--from the expression code of
   7352 the containing expression.  For example, in an expression of code
   7353 `subreg', the first operand is to be regarded as an expression and the
   7354 second operand as an integer.  In an expression of code `plus', there
   7355 are two operands, both of which are to be regarded as expressions.  In
   7356 a `symbol_ref' expression, there is one operand, which is to be
   7357 regarded as a string.
   7358 
   7359  Expressions are written as parentheses containing the name of the
   7360 expression type, its flags and machine mode if any, and then the
   7361 operands of the expression (separated by spaces).
   7362 
   7363  Expression code names in the `md' file are written in lowercase, but
   7364 when they appear in C code they are written in uppercase.  In this
   7365 manual, they are shown as follows: `const_int'.
   7366 
   7367  In a few contexts a null pointer is valid where an expression is
   7368 normally wanted.  The written form of this is `(nil)'.
   7369 
   7370 
   7371 File: gccint.info,  Node: RTL Classes,  Next: Accessors,  Prev: RTL Objects,  Up: RTL
   7372 
   7373 10.2 RTL Classes and Formats
   7374 ============================
   7375 
   7376 The various expression codes are divided into several "classes", which
   7377 are represented by single characters.  You can determine the class of
   7378 an RTX code with the macro `GET_RTX_CLASS (CODE)'.  Currently,
   7379 `rtl.def' defines these classes:
   7380 
   7381 `RTX_OBJ'
   7382      An RTX code that represents an actual object, such as a register
   7383      (`REG') or a memory location (`MEM', `SYMBOL_REF').  `LO_SUM') is
   7384      also included; instead, `SUBREG' and `STRICT_LOW_PART' are not in
   7385      this class, but in class `x'.
   7386 
   7387 `RTX_CONST_OBJ'
   7388      An RTX code that represents a constant object.  `HIGH' is also
   7389      included in this class.
   7390 
   7391 `RTX_COMPARE'
   7392      An RTX code for a non-symmetric comparison, such as `GEU' or `LT'.
   7393 
   7394 `RTX_COMM_COMPARE'
   7395      An RTX code for a symmetric (commutative) comparison, such as `EQ'
   7396      or `ORDERED'.
   7397 
   7398 `RTX_UNARY'
   7399      An RTX code for a unary arithmetic operation, such as `NEG',
   7400      `NOT', or `ABS'.  This category also includes value extension
   7401      (sign or zero) and conversions between integer and floating point.
   7402 
   7403 `RTX_COMM_ARITH'
   7404      An RTX code for a commutative binary operation, such as `PLUS' or
   7405      `AND'.  `NE' and `EQ' are comparisons, so they have class `<'.
   7406 
   7407 `RTX_BIN_ARITH'
   7408      An RTX code for a non-commutative binary operation, such as
   7409      `MINUS', `DIV', or `ASHIFTRT'.
   7410 
   7411 `RTX_BITFIELD_OPS'
   7412      An RTX code for a bit-field operation.  Currently only
   7413      `ZERO_EXTRACT' and `SIGN_EXTRACT'.  These have three inputs and
   7414      are lvalues (so they can be used for insertion as well).  *Note
   7415      Bit-Fields::.
   7416 
   7417 `RTX_TERNARY'
   7418      An RTX code for other three input operations.  Currently only
   7419      `IF_THEN_ELSE',  `VEC_MERGE', `SIGN_EXTRACT', `ZERO_EXTRACT', and
   7420      `FMA'.
   7421 
   7422 `RTX_INSN'
   7423      An RTX code for an entire instruction:  `INSN', `JUMP_INSN', and
   7424      `CALL_INSN'.  *Note Insns::.
   7425 
   7426 `RTX_MATCH'
   7427      An RTX code for something that matches in insns, such as
   7428      `MATCH_DUP'.  These only occur in machine descriptions.
   7429 
   7430 `RTX_AUTOINC'
   7431      An RTX code for an auto-increment addressing mode, such as
   7432      `POST_INC'.
   7433 
   7434 `RTX_EXTRA'
   7435      All other RTX codes.  This category includes the remaining codes
   7436      used only in machine descriptions (`DEFINE_*', etc.).  It also
   7437      includes all the codes describing side effects (`SET', `USE',
   7438      `CLOBBER', etc.) and the non-insns that may appear on an insn
   7439      chain, such as `NOTE', `BARRIER', and `CODE_LABEL'.  `SUBREG' is
   7440      also part of this class.
   7441 
   7442  For each expression code, `rtl.def' specifies the number of contained
   7443 objects and their kinds using a sequence of characters called the
   7444 "format" of the expression code.  For example, the format of `subreg'
   7445 is `ei'.
   7446 
   7447  These are the most commonly used format characters:
   7448 
   7449 `e'
   7450      An expression (actually a pointer to an expression).
   7451 
   7452 `i'
   7453      An integer.
   7454 
   7455 `w'
   7456      A wide integer.
   7457 
   7458 `s'
   7459      A string.
   7460 
   7461 `E'
   7462      A vector of expressions.
   7463 
   7464  A few other format characters are used occasionally:
   7465 
   7466 `u'
   7467      `u' is equivalent to `e' except that it is printed differently in
   7468      debugging dumps.  It is used for pointers to insns.
   7469 
   7470 `n'
   7471      `n' is equivalent to `i' except that it is printed differently in
   7472      debugging dumps.  It is used for the line number or code number of
   7473      a `note' insn.
   7474 
   7475 `S'
   7476      `S' indicates a string which is optional.  In the RTL objects in
   7477      core, `S' is equivalent to `s', but when the object is read, from
   7478      an `md' file, the string value of this operand may be omitted.  An
   7479      omitted string is taken to be the null string.
   7480 
   7481 `V'
   7482      `V' indicates a vector which is optional.  In the RTL objects in
   7483      core, `V' is equivalent to `E', but when the object is read from
   7484      an `md' file, the vector value of this operand may be omitted.  An
   7485      omitted vector is effectively the same as a vector of no elements.
   7486 
   7487 `B'
   7488      `B' indicates a pointer to basic block structure.
   7489 
   7490 `0'
   7491      `0' means a slot whose contents do not fit any normal category.
   7492      `0' slots are not printed at all in dumps, and are often used in
   7493      special ways by small parts of the compiler.
   7494 
   7495  There are macros to get the number of operands and the format of an
   7496 expression code:
   7497 
   7498 `GET_RTX_LENGTH (CODE)'
   7499      Number of operands of an RTX of code CODE.
   7500 
   7501 `GET_RTX_FORMAT (CODE)'
   7502      The format of an RTX of code CODE, as a C string.
   7503 
   7504  Some classes of RTX codes always have the same format.  For example, it
   7505 is safe to assume that all comparison operations have format `ee'.
   7506 
   7507 `1'
   7508      All codes of this class have format `e'.
   7509 
   7510 `<'
   7511 `c'
   7512 `2'
   7513      All codes of these classes have format `ee'.
   7514 
   7515 `b'
   7516 `3'
   7517      All codes of these classes have format `eee'.
   7518 
   7519 `i'
   7520      All codes of this class have formats that begin with `iuueiee'.
   7521      *Note Insns::.  Note that not all RTL objects linked onto an insn
   7522      chain are of class `i'.
   7523 
   7524 `o'
   7525 `m'
   7526 `x'
   7527      You can make no assumptions about the format of these codes.
   7528 
   7529 
   7530 File: gccint.info,  Node: Accessors,  Next: Special Accessors,  Prev: RTL Classes,  Up: RTL
   7531 
   7532 10.3 Access to Operands
   7533 =======================
   7534 
   7535 Operands of expressions are accessed using the macros `XEXP', `XINT',
   7536 `XWINT' and `XSTR'.  Each of these macros takes two arguments: an
   7537 expression-pointer (RTX) and an operand number (counting from zero).
   7538 Thus,
   7539 
   7540      XEXP (X, 2)
   7541 
   7542 accesses operand 2 of expression X, as an expression.
   7543 
   7544      XINT (X, 2)
   7545 
   7546 accesses the same operand as an integer.  `XSTR', used in the same
   7547 fashion, would access it as a string.
   7548 
   7549  Any operand can be accessed as an integer, as an expression or as a
   7550 string.  You must choose the correct method of access for the kind of
   7551 value actually stored in the operand.  You would do this based on the
   7552 expression code of the containing expression.  That is also how you
   7553 would know how many operands there are.
   7554 
   7555  For example, if X is a `subreg' expression, you know that it has two
   7556 operands which can be correctly accessed as `XEXP (X, 0)' and `XINT (X,
   7557 1)'.  If you did `XINT (X, 0)', you would get the address of the
   7558 expression operand but cast as an integer; that might occasionally be
   7559 useful, but it would be cleaner to write `(int) XEXP (X, 0)'.  `XEXP
   7560 (X, 1)' would also compile without error, and would return the second,
   7561 integer operand cast as an expression pointer, which would probably
   7562 result in a crash when accessed.  Nothing stops you from writing `XEXP
   7563 (X, 28)' either, but this will access memory past the end of the
   7564 expression with unpredictable results.
   7565 
   7566  Access to operands which are vectors is more complicated.  You can use
   7567 the macro `XVEC' to get the vector-pointer itself, or the macros
   7568 `XVECEXP' and `XVECLEN' to access the elements and length of a vector.
   7569 
   7570 `XVEC (EXP, IDX)'
   7571      Access the vector-pointer which is operand number IDX in EXP.
   7572 
   7573 `XVECLEN (EXP, IDX)'
   7574      Access the length (number of elements) in the vector which is in
   7575      operand number IDX in EXP.  This value is an `int'.
   7576 
   7577 `XVECEXP (EXP, IDX, ELTNUM)'
   7578      Access element number ELTNUM in the vector which is in operand
   7579      number IDX in EXP.  This value is an RTX.
   7580 
   7581      It is up to you to make sure that ELTNUM is not negative and is
   7582      less than `XVECLEN (EXP, IDX)'.
   7583 
   7584  All the macros defined in this section expand into lvalues and
   7585 therefore can be used to assign the operands, lengths and vector
   7586 elements as well as to access them.
   7587 
   7588 
   7589 File: gccint.info,  Node: Special Accessors,  Next: Flags,  Prev: Accessors,  Up: RTL
   7590 
   7591 10.4 Access to Special Operands
   7592 ===============================
   7593 
   7594 Some RTL nodes have special annotations associated with them.
   7595 
   7596 `MEM'
   7597 
   7598     `MEM_ALIAS_SET (X)'
   7599           If 0, X is not in any alias set, and may alias anything.
   7600           Otherwise, X can only alias `MEM's in a conflicting alias
   7601           set.  This value is set in a language-dependent manner in the
   7602           front-end, and should not be altered in the back-end.  In
   7603           some front-ends, these numbers may correspond in some way to
   7604           types, or other language-level entities, but they need not,
   7605           and the back-end makes no such assumptions.  These set
   7606           numbers are tested with `alias_sets_conflict_p'.
   7607 
   7608     `MEM_EXPR (X)'
   7609           If this register is known to hold the value of some user-level
   7610           declaration, this is that tree node.  It may also be a
   7611           `COMPONENT_REF', in which case this is some field reference,
   7612           and `TREE_OPERAND (X, 0)' contains the declaration, or
   7613           another `COMPONENT_REF', or null if there is no compile-time
   7614           object associated with the reference.
   7615 
   7616     `MEM_OFFSET (X)'
   7617           The offset from the start of `MEM_EXPR' as a `CONST_INT' rtx.
   7618 
   7619     `MEM_SIZE (X)'
   7620           The size in bytes of the memory reference as a `CONST_INT'
   7621           rtx.  This is mostly relevant for `BLKmode' references as
   7622           otherwise the size is implied by the mode.
   7623 
   7624     `MEM_ALIGN (X)'
   7625           The known alignment in bits of the memory reference.
   7626 
   7627     `MEM_ADDR_SPACE (X)'
   7628           The address space of the memory reference.  This will
   7629           commonly be zero for the generic address space.
   7630 
   7631 `REG'
   7632 
   7633     `ORIGINAL_REGNO (X)'
   7634           This field holds the number the register "originally" had;
   7635           for a pseudo register turned into a hard reg this will hold
   7636           the old pseudo register number.
   7637 
   7638     `REG_EXPR (X)'
   7639           If this register is known to hold the value of some user-level
   7640           declaration, this is that tree node.
   7641 
   7642     `REG_OFFSET (X)'
   7643           If this register is known to hold the value of some user-level
   7644           declaration, this is the offset into that logical storage.
   7645 
   7646 `SYMBOL_REF'
   7647 
   7648     `SYMBOL_REF_DECL (X)'
   7649           If the `symbol_ref' X was created for a `VAR_DECL' or a
   7650           `FUNCTION_DECL', that tree is recorded here.  If this value is
   7651           null, then X was created by back end code generation routines,
   7652           and there is no associated front end symbol table entry.
   7653 
   7654           `SYMBOL_REF_DECL' may also point to a tree of class `'c'',
   7655           that is, some sort of constant.  In this case, the
   7656           `symbol_ref' is an entry in the per-file constant pool;
   7657           again, there is no associated front end symbol table entry.
   7658 
   7659     `SYMBOL_REF_CONSTANT (X)'
   7660           If `CONSTANT_POOL_ADDRESS_P (X)' is true, this is the constant
   7661           pool entry for X.  It is null otherwise.
   7662 
   7663     `SYMBOL_REF_DATA (X)'
   7664           A field of opaque type used to store `SYMBOL_REF_DECL' or
   7665           `SYMBOL_REF_CONSTANT'.
   7666 
   7667     `SYMBOL_REF_FLAGS (X)'
   7668           In a `symbol_ref', this is used to communicate various
   7669           predicates about the symbol.  Some of these are common enough
   7670           to be computed by common code, some are specific to the
   7671           target.  The common bits are:
   7672 
   7673          `SYMBOL_FLAG_FUNCTION'
   7674                Set if the symbol refers to a function.
   7675 
   7676          `SYMBOL_FLAG_LOCAL'
   7677                Set if the symbol is local to this "module".  See
   7678                `TARGET_BINDS_LOCAL_P'.
   7679 
   7680          `SYMBOL_FLAG_EXTERNAL'
   7681                Set if this symbol is not defined in this translation
   7682                unit.  Note that this is not the inverse of
   7683                `SYMBOL_FLAG_LOCAL'.
   7684 
   7685          `SYMBOL_FLAG_SMALL'
   7686                Set if the symbol is located in the small data section.
   7687                See `TARGET_IN_SMALL_DATA_P'.
   7688 
   7689          `SYMBOL_REF_TLS_MODEL (X)'
   7690                This is a multi-bit field accessor that returns the
   7691                `tls_model' to be used for a thread-local storage
   7692                symbol.  It returns zero for non-thread-local symbols.
   7693 
   7694          `SYMBOL_FLAG_HAS_BLOCK_INFO'
   7695                Set if the symbol has `SYMBOL_REF_BLOCK' and
   7696                `SYMBOL_REF_BLOCK_OFFSET' fields.
   7697 
   7698          `SYMBOL_FLAG_ANCHOR'
   7699                Set if the symbol is used as a section anchor.  "Section
   7700                anchors" are symbols that have a known position within
   7701                an `object_block' and that can be used to access nearby
   7702                members of that block.  They are used to implement
   7703                `-fsection-anchors'.
   7704 
   7705                If this flag is set, then `SYMBOL_FLAG_HAS_BLOCK_INFO'
   7706                will be too.
   7707 
   7708           Bits beginning with `SYMBOL_FLAG_MACH_DEP' are available for
   7709           the target's use.
   7710 
   7711 `SYMBOL_REF_BLOCK (X)'
   7712      If `SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the `object_block'
   7713      structure to which the symbol belongs, or `NULL' if it has not
   7714      been assigned a block.
   7715 
   7716 `SYMBOL_REF_BLOCK_OFFSET (X)'
   7717      If `SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the offset of X from
   7718      the first object in `SYMBOL_REF_BLOCK (X)'.  The value is negative
   7719      if X has not yet been assigned to a block, or it has not been
   7720      given an offset within that block.
   7721 
   7722 
   7723 File: gccint.info,  Node: Flags,  Next: Machine Modes,  Prev: Special Accessors,  Up: RTL
   7724 
   7725 10.5 Flags in an RTL Expression
   7726 ===============================
   7727 
   7728 RTL expressions contain several flags (one-bit bit-fields) that are
   7729 used in certain types of expression.  Most often they are accessed with
   7730 the following macros, which expand into lvalues.
   7731 
   7732 `CONSTANT_POOL_ADDRESS_P (X)'
   7733      Nonzero in a `symbol_ref' if it refers to part of the current
   7734      function's constant pool.  For most targets these addresses are in
   7735      a `.rodata' section entirely separate from the function, but for
   7736      some targets the addresses are close to the beginning of the
   7737      function.  In either case GCC assumes these addresses can be
   7738      addressed directly, perhaps with the help of base registers.
   7739      Stored in the `unchanging' field and printed as `/u'.
   7740 
   7741 `RTL_CONST_CALL_P (X)'
   7742      In a `call_insn' indicates that the insn represents a call to a
   7743      const function.  Stored in the `unchanging' field and printed as
   7744      `/u'.
   7745 
   7746 `RTL_PURE_CALL_P (X)'
   7747      In a `call_insn' indicates that the insn represents a call to a
   7748      pure function.  Stored in the `return_val' field and printed as
   7749      `/i'.
   7750 
   7751 `RTL_CONST_OR_PURE_CALL_P (X)'
   7752      In a `call_insn', true if `RTL_CONST_CALL_P' or `RTL_PURE_CALL_P'
   7753      is true.
   7754 
   7755 `RTL_LOOPING_CONST_OR_PURE_CALL_P (X)'
   7756      In a `call_insn' indicates that the insn represents a possibly
   7757      infinite looping call to a const or pure function.  Stored in the
   7758      `call' field and printed as `/c'.  Only true if one of
   7759      `RTL_CONST_CALL_P' or `RTL_PURE_CALL_P' is true.
   7760 
   7761 `INSN_ANNULLED_BRANCH_P (X)'
   7762      In a `jump_insn', `call_insn', or `insn' indicates that the branch
   7763      is an annulling one.  See the discussion under `sequence' below.
   7764      Stored in the `unchanging' field and printed as `/u'.
   7765 
   7766 `INSN_DELETED_P (X)'
   7767      In an `insn', `call_insn', `jump_insn', `code_label', `barrier',
   7768      or `note', nonzero if the insn has been deleted.  Stored in the
   7769      `volatil' field and printed as `/v'.
   7770 
   7771 `INSN_FROM_TARGET_P (X)'
   7772      In an `insn' or `jump_insn' or `call_insn' in a delay slot of a
   7773      branch, indicates that the insn is from the target of the branch.
   7774      If the branch insn has `INSN_ANNULLED_BRANCH_P' set, this insn
   7775      will only be executed if the branch is taken.  For annulled
   7776      branches with `INSN_FROM_TARGET_P' clear, the insn will be
   7777      executed only if the branch is not taken.  When
   7778      `INSN_ANNULLED_BRANCH_P' is not set, this insn will always be
   7779      executed.  Stored in the `in_struct' field and printed as `/s'.
   7780 
   7781 `LABEL_PRESERVE_P (X)'
   7782      In a `code_label' or `note', indicates that the label is
   7783      referenced by code or data not visible to the RTL of a given
   7784      function.  Labels referenced by a non-local goto will have this
   7785      bit set.  Stored in the `in_struct' field and printed as `/s'.
   7786 
   7787 `LABEL_REF_NONLOCAL_P (X)'
   7788      In `label_ref' and `reg_label' expressions, nonzero if this is a
   7789      reference to a non-local label.  Stored in the `volatil' field and
   7790      printed as `/v'.
   7791 
   7792 `MEM_IN_STRUCT_P (X)'
   7793      In `mem' expressions, nonzero for reference to an entire structure,
   7794      union or array, or to a component of one.  Zero for references to a
   7795      scalar variable or through a pointer to a scalar.  If both this
   7796      flag and `MEM_SCALAR_P' are clear, then we don't know whether this
   7797      `mem' is in a structure or not.  Both flags should never be
   7798      simultaneously set.  Stored in the `in_struct' field and printed
   7799      as `/s'.
   7800 
   7801 `MEM_KEEP_ALIAS_SET_P (X)'
   7802      In `mem' expressions, 1 if we should keep the alias set for this
   7803      mem unchanged when we access a component.  Set to 1, for example,
   7804      when we are already in a non-addressable component of an aggregate.
   7805      Stored in the `jump' field and printed as `/j'.
   7806 
   7807 `MEM_SCALAR_P (X)'
   7808      In `mem' expressions, nonzero for reference to a scalar known not
   7809      to be a member of a structure, union, or array.  Zero for such
   7810      references and for indirections through pointers, even pointers
   7811      pointing to scalar types.  If both this flag and `MEM_IN_STRUCT_P'
   7812      are clear, then we don't know whether this `mem' is in a structure
   7813      or not.  Both flags should never be simultaneously set.  Stored in
   7814      the `return_val' field and printed as `/i'.
   7815 
   7816 `MEM_VOLATILE_P (X)'
   7817      In `mem', `asm_operands', and `asm_input' expressions, nonzero for
   7818      volatile memory references.  Stored in the `volatil' field and
   7819      printed as `/v'.
   7820 
   7821 `MEM_NOTRAP_P (X)'
   7822      In `mem', nonzero for memory references that will not trap.
   7823      Stored in the `call' field and printed as `/c'.
   7824 
   7825 `MEM_POINTER (X)'
   7826      Nonzero in a `mem' if the memory reference holds a pointer.
   7827      Stored in the `frame_related' field and printed as `/f'.
   7828 
   7829 `REG_FUNCTION_VALUE_P (X)'
   7830      Nonzero in a `reg' if it is the place in which this function's
   7831      value is going to be returned.  (This happens only in a hard
   7832      register.)  Stored in the `return_val' field and printed as `/i'.
   7833 
   7834 `REG_POINTER (X)'
   7835      Nonzero in a `reg' if the register holds a pointer.  Stored in the
   7836      `frame_related' field and printed as `/f'.
   7837 
   7838 `REG_USERVAR_P (X)'
   7839      In a `reg', nonzero if it corresponds to a variable present in the
   7840      user's source code.  Zero for temporaries generated internally by
   7841      the compiler.  Stored in the `volatil' field and printed as `/v'.
   7842 
   7843      The same hard register may be used also for collecting the values
   7844      of functions called by this one, but `REG_FUNCTION_VALUE_P' is zero
   7845      in this kind of use.
   7846 
   7847 `RTX_FRAME_RELATED_P (X)'
   7848      Nonzero in an `insn', `call_insn', `jump_insn', `barrier', or
   7849      `set' which is part of a function prologue and sets the stack
   7850      pointer, sets the frame pointer, or saves a register.  This flag
   7851      should also be set on an instruction that sets up a temporary
   7852      register to use in place of the frame pointer.  Stored in the
   7853      `frame_related' field and printed as `/f'.
   7854 
   7855      In particular, on RISC targets where there are limits on the sizes
   7856      of immediate constants, it is sometimes impossible to reach the
   7857      register save area directly from the stack pointer.  In that case,
   7858      a temporary register is used that is near enough to the register
   7859      save area, and the Canonical Frame Address, i.e., DWARF2's logical
   7860      frame pointer, register must (temporarily) be changed to be this
   7861      temporary register.  So, the instruction that sets this temporary
   7862      register must be marked as `RTX_FRAME_RELATED_P'.
   7863 
   7864      If the marked instruction is overly complex (defined in terms of
   7865      what `dwarf2out_frame_debug_expr' can handle), you will also have
   7866      to create a `REG_FRAME_RELATED_EXPR' note and attach it to the
   7867      instruction.  This note should contain a simple expression of the
   7868      computation performed by this instruction, i.e., one that
   7869      `dwarf2out_frame_debug_expr' can handle.
   7870 
   7871      This flag is required for exception handling support on targets
   7872      with RTL prologues.
   7873 
   7874 `MEM_READONLY_P (X)'
   7875      Nonzero in a `mem', if the memory is statically allocated and
   7876      read-only.
   7877 
   7878      Read-only in this context means never modified during the lifetime
   7879      of the program, not necessarily in ROM or in write-disabled pages.
   7880      A common example of the later is a shared library's global offset
   7881      table.  This table is initialized by the runtime loader, so the
   7882      memory is technically writable, but after control is transfered
   7883      from the runtime loader to the application, this memory will never
   7884      be subsequently modified.
   7885 
   7886      Stored in the `unchanging' field and printed as `/u'.
   7887 
   7888 `SCHED_GROUP_P (X)'
   7889      During instruction scheduling, in an `insn', `call_insn' or
   7890      `jump_insn', indicates that the previous insn must be scheduled
   7891      together with this insn.  This is used to ensure that certain
   7892      groups of instructions will not be split up by the instruction
   7893      scheduling pass, for example, `use' insns before a `call_insn' may
   7894      not be separated from the `call_insn'.  Stored in the `in_struct'
   7895      field and printed as `/s'.
   7896 
   7897 `SET_IS_RETURN_P (X)'
   7898      For a `set', nonzero if it is for a return.  Stored in the `jump'
   7899      field and printed as `/j'.
   7900 
   7901 `SIBLING_CALL_P (X)'
   7902      For a `call_insn', nonzero if the insn is a sibling call.  Stored
   7903      in the `jump' field and printed as `/j'.
   7904 
   7905 `STRING_POOL_ADDRESS_P (X)'
   7906      For a `symbol_ref' expression, nonzero if it addresses this
   7907      function's string constant pool.  Stored in the `frame_related'
   7908      field and printed as `/f'.
   7909 
   7910 `SUBREG_PROMOTED_UNSIGNED_P (X)'
   7911      Returns a value greater then zero for a `subreg' that has
   7912      `SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is
   7913      kept zero-extended, zero if it is kept sign-extended, and less
   7914      then zero if it is extended some other way via the `ptr_extend'
   7915      instruction.  Stored in the `unchanging' field and `volatil'
   7916      field, printed as `/u' and `/v'.  This macro may only be used to
   7917      get the value it may not be used to change the value.  Use
   7918      `SUBREG_PROMOTED_UNSIGNED_SET' to change the value.
   7919 
   7920 `SUBREG_PROMOTED_UNSIGNED_SET (X)'
   7921      Set the `unchanging' and `volatil' fields in a `subreg' to reflect
   7922      zero, sign, or other extension.  If `volatil' is zero, then
   7923      `unchanging' as nonzero means zero extension and as zero means
   7924      sign extension.  If `volatil' is nonzero then some other type of
   7925      extension was done via the `ptr_extend' instruction.
   7926 
   7927 `SUBREG_PROMOTED_VAR_P (X)'
   7928      Nonzero in a `subreg' if it was made when accessing an object that
   7929      was promoted to a wider mode in accord with the `PROMOTED_MODE'
   7930      machine description macro (*note Storage Layout::).  In this case,
   7931      the mode of the `subreg' is the declared mode of the object and
   7932      the mode of `SUBREG_REG' is the mode of the register that holds
   7933      the object.  Promoted variables are always either sign- or
   7934      zero-extended to the wider mode on every assignment.  Stored in
   7935      the `in_struct' field and printed as `/s'.
   7936 
   7937 `SYMBOL_REF_USED (X)'
   7938      In a `symbol_ref', indicates that X has been used.  This is
   7939      normally only used to ensure that X is only declared external
   7940      once.  Stored in the `used' field.
   7941 
   7942 `SYMBOL_REF_WEAK (X)'
   7943      In a `symbol_ref', indicates that X has been declared weak.
   7944      Stored in the `return_val' field and printed as `/i'.
   7945 
   7946 `SYMBOL_REF_FLAG (X)'
   7947      In a `symbol_ref', this is used as a flag for machine-specific
   7948      purposes.  Stored in the `volatil' field and printed as `/v'.
   7949 
   7950      Most uses of `SYMBOL_REF_FLAG' are historic and may be subsumed by
   7951      `SYMBOL_REF_FLAGS'.  Certainly use of `SYMBOL_REF_FLAGS' is
   7952      mandatory if the target requires more than one bit of storage.
   7953 
   7954 `PREFETCH_SCHEDULE_BARRIER_P (X)'
   7955      In a `prefetch', indicates that the prefetch is a scheduling
   7956      barrier.  No other INSNs will be moved over it.  Stored in the
   7957      `volatil' field and printed as `/v'.
   7958 
   7959  These are the fields to which the above macros refer:
   7960 
   7961 `call'
   7962      In a `mem', 1 means that the memory reference will not trap.
   7963 
   7964      In a `call', 1 means that this pure or const call may possibly
   7965      infinite loop.
   7966 
   7967      In an RTL dump, this flag is represented as `/c'.
   7968 
   7969 `frame_related'
   7970      In an `insn' or `set' expression, 1 means that it is part of a
   7971      function prologue and sets the stack pointer, sets the frame
   7972      pointer, saves a register, or sets up a temporary register to use
   7973      in place of the frame pointer.
   7974 
   7975      In `reg' expressions, 1 means that the register holds a pointer.
   7976 
   7977      In `mem' expressions, 1 means that the memory reference holds a
   7978      pointer.
   7979 
   7980      In `symbol_ref' expressions, 1 means that the reference addresses
   7981      this function's string constant pool.
   7982 
   7983      In an RTL dump, this flag is represented as `/f'.
   7984 
   7985 `in_struct'
   7986      In `mem' expressions, it is 1 if the memory datum referred to is
   7987      all or part of a structure or array; 0 if it is (or might be) a
   7988      scalar variable.  A reference through a C pointer has 0 because
   7989      the pointer might point to a scalar variable.  This information
   7990      allows the compiler to determine something about possible cases of
   7991      aliasing.
   7992 
   7993      In `reg' expressions, it is 1 if the register has its entire life
   7994      contained within the test expression of some loop.
   7995 
   7996      In `subreg' expressions, 1 means that the `subreg' is accessing an
   7997      object that has had its mode promoted from a wider mode.
   7998 
   7999      In `label_ref' expressions, 1 means that the referenced label is
   8000      outside the innermost loop containing the insn in which the
   8001      `label_ref' was found.
   8002 
   8003      In `code_label' expressions, it is 1 if the label may never be
   8004      deleted.  This is used for labels which are the target of
   8005      non-local gotos.  Such a label that would have been deleted is
   8006      replaced with a `note' of type `NOTE_INSN_DELETED_LABEL'.
   8007 
   8008      In an `insn' during dead-code elimination, 1 means that the insn is
   8009      dead code.
   8010 
   8011      In an `insn' or `jump_insn' during reorg for an insn in the delay
   8012      slot of a branch, 1 means that this insn is from the target of the
   8013      branch.
   8014 
   8015      In an `insn' during instruction scheduling, 1 means that this insn
   8016      must be scheduled as part of a group together with the previous
   8017      insn.
   8018 
   8019      In an RTL dump, this flag is represented as `/s'.
   8020 
   8021 `return_val'
   8022      In `reg' expressions, 1 means the register contains the value to
   8023      be returned by the current function.  On machines that pass
   8024      parameters in registers, the same register number may be used for
   8025      parameters as well, but this flag is not set on such uses.
   8026 
   8027      In `mem' expressions, 1 means the memory reference is to a scalar
   8028      known not to be a member of a structure, union, or array.
   8029 
   8030      In `symbol_ref' expressions, 1 means the referenced symbol is weak.
   8031 
   8032      In `call' expressions, 1 means the call is pure.
   8033 
   8034      In an RTL dump, this flag is represented as `/i'.
   8035 
   8036 `jump'
   8037      In a `mem' expression, 1 means we should keep the alias set for
   8038      this mem unchanged when we access a component.
   8039 
   8040      In a `set', 1 means it is for a return.
   8041 
   8042      In a `call_insn', 1 means it is a sibling call.
   8043 
   8044      In an RTL dump, this flag is represented as `/j'.
   8045 
   8046 `unchanging'
   8047      In `reg' and `mem' expressions, 1 means that the value of the
   8048      expression never changes.
   8049 
   8050      In `subreg' expressions, it is 1 if the `subreg' references an
   8051      unsigned object whose mode has been promoted to a wider mode.
   8052 
   8053      In an `insn' or `jump_insn' in the delay slot of a branch
   8054      instruction, 1 means an annulling branch should be used.
   8055 
   8056      In a `symbol_ref' expression, 1 means that this symbol addresses
   8057      something in the per-function constant pool.
   8058 
   8059      In a `call_insn' 1 means that this instruction is a call to a const
   8060      function.
   8061 
   8062      In an RTL dump, this flag is represented as `/u'.
   8063 
   8064 `used'
   8065      This flag is used directly (without an access macro) at the end of
   8066      RTL generation for a function, to count the number of times an
   8067      expression appears in insns.  Expressions that appear more than
   8068      once are copied, according to the rules for shared structure
   8069      (*note Sharing::).
   8070 
   8071      For a `reg', it is used directly (without an access macro) by the
   8072      leaf register renumbering code to ensure that each register is only
   8073      renumbered once.
   8074 
   8075      In a `symbol_ref', it indicates that an external declaration for
   8076      the symbol has already been written.
   8077 
   8078 `volatil'
   8079      In a `mem', `asm_operands', or `asm_input' expression, it is 1 if
   8080      the memory reference is volatile.  Volatile memory references may
   8081      not be deleted, reordered or combined.
   8082 
   8083      In a `symbol_ref' expression, it is used for machine-specific
   8084      purposes.
   8085 
   8086      In a `reg' expression, it is 1 if the value is a user-level
   8087      variable.  0 indicates an internal compiler temporary.
   8088 
   8089      In an `insn', 1 means the insn has been deleted.
   8090 
   8091      In `label_ref' and `reg_label' expressions, 1 means a reference to
   8092      a non-local label.
   8093 
   8094      In `prefetch' expressions, 1 means that the containing insn is a
   8095      scheduling barrier.
   8096 
   8097      In an RTL dump, this flag is represented as `/v'.
   8098 
   8099 
   8100 File: gccint.info,  Node: Machine Modes,  Next: Constants,  Prev: Flags,  Up: RTL
   8101 
   8102 10.6 Machine Modes
   8103 ==================
   8104 
   8105 A machine mode describes a size of data object and the representation
   8106 used for it.  In the C code, machine modes are represented by an
   8107 enumeration type, `enum machine_mode', defined in `machmode.def'.  Each
   8108 RTL expression has room for a machine mode and so do certain kinds of
   8109 tree expressions (declarations and types, to be precise).
   8110 
   8111  In debugging dumps and machine descriptions, the machine mode of an RTL
   8112 expression is written after the expression code with a colon to separate
   8113 them.  The letters `mode' which appear at the end of each machine mode
   8114 name are omitted.  For example, `(reg:SI 38)' is a `reg' expression
   8115 with machine mode `SImode'.  If the mode is `VOIDmode', it is not
   8116 written at all.
   8117 
   8118  Here is a table of machine modes.  The term "byte" below refers to an
   8119 object of `BITS_PER_UNIT' bits (*note Storage Layout::).
   8120 
   8121 `BImode'
   8122      "Bit" mode represents a single bit, for predicate registers.
   8123 
   8124 `QImode'
   8125      "Quarter-Integer" mode represents a single byte treated as an
   8126      integer.
   8127 
   8128 `HImode'
   8129      "Half-Integer" mode represents a two-byte integer.
   8130 
   8131 `PSImode'
   8132      "Partial Single Integer" mode represents an integer which occupies
   8133      four bytes but which doesn't really use all four.  On some
   8134      machines, this is the right mode to use for pointers.
   8135 
   8136 `SImode'
   8137      "Single Integer" mode represents a four-byte integer.
   8138 
   8139 `PDImode'
   8140      "Partial Double Integer" mode represents an integer which occupies
   8141      eight bytes but which doesn't really use all eight.  On some
   8142      machines, this is the right mode to use for certain pointers.
   8143 
   8144 `DImode'
   8145      "Double Integer" mode represents an eight-byte integer.
   8146 
   8147 `TImode'
   8148      "Tetra Integer" (?) mode represents a sixteen-byte integer.
   8149 
   8150 `OImode'
   8151      "Octa Integer" (?) mode represents a thirty-two-byte integer.
   8152 
   8153 `QFmode'
   8154      "Quarter-Floating" mode represents a quarter-precision (single
   8155      byte) floating point number.
   8156 
   8157 `HFmode'
   8158      "Half-Floating" mode represents a half-precision (two byte)
   8159      floating point number.
   8160 
   8161 `TQFmode'
   8162      "Three-Quarter-Floating" (?) mode represents a
   8163      three-quarter-precision (three byte) floating point number.
   8164 
   8165 `SFmode'
   8166      "Single Floating" mode represents a four byte floating point
   8167      number.  In the common case, of a processor with IEEE arithmetic
   8168      and 8-bit bytes, this is a single-precision IEEE floating point
   8169      number; it can also be used for double-precision (on processors
   8170      with 16-bit bytes) and single-precision VAX and IBM types.
   8171 
   8172 `DFmode'
   8173      "Double Floating" mode represents an eight byte floating point
   8174      number.  In the common case, of a processor with IEEE arithmetic
   8175      and 8-bit bytes, this is a double-precision IEEE floating point
   8176      number.
   8177 
   8178 `XFmode'
   8179      "Extended Floating" mode represents an IEEE extended floating point
   8180      number.  This mode only has 80 meaningful bits (ten bytes).  Some
   8181      processors require such numbers to be padded to twelve bytes,
   8182      others to sixteen; this mode is used for either.
   8183 
   8184 `SDmode'
   8185      "Single Decimal Floating" mode represents a four byte decimal
   8186      floating point number (as distinct from conventional binary
   8187      floating point).
   8188 
   8189 `DDmode'
   8190      "Double Decimal Floating" mode represents an eight byte decimal
   8191      floating point number.
   8192 
   8193 `TDmode'
   8194      "Tetra Decimal Floating" mode represents a sixteen byte decimal
   8195      floating point number all 128 of whose bits are meaningful.
   8196 
   8197 `TFmode'
   8198      "Tetra Floating" mode represents a sixteen byte floating point
   8199      number all 128 of whose bits are meaningful.  One common use is the
   8200      IEEE quad-precision format.
   8201 
   8202 `QQmode'
   8203      "Quarter-Fractional" mode represents a single byte treated as a
   8204      signed fractional number.  The default format is "s.7".
   8205 
   8206 `HQmode'
   8207      "Half-Fractional" mode represents a two-byte signed fractional
   8208      number.  The default format is "s.15".
   8209 
   8210 `SQmode'
   8211      "Single Fractional" mode represents a four-byte signed fractional
   8212      number.  The default format is "s.31".
   8213 
   8214 `DQmode'
   8215      "Double Fractional" mode represents an eight-byte signed
   8216      fractional number.  The default format is "s.63".
   8217 
   8218 `TQmode'
   8219      "Tetra Fractional" mode represents a sixteen-byte signed
   8220      fractional number.  The default format is "s.127".
   8221 
   8222 `UQQmode'
   8223      "Unsigned Quarter-Fractional" mode represents a single byte
   8224      treated as an unsigned fractional number.  The default format is
   8225      ".8".
   8226 
   8227 `UHQmode'
   8228      "Unsigned Half-Fractional" mode represents a two-byte unsigned
   8229      fractional number.  The default format is ".16".
   8230 
   8231 `USQmode'
   8232      "Unsigned Single Fractional" mode represents a four-byte unsigned
   8233      fractional number.  The default format is ".32".
   8234 
   8235 `UDQmode'
   8236      "Unsigned Double Fractional" mode represents an eight-byte unsigned
   8237      fractional number.  The default format is ".64".
   8238 
   8239 `UTQmode'
   8240      "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned
   8241      fractional number.  The default format is ".128".
   8242 
   8243 `HAmode'
   8244      "Half-Accumulator" mode represents a two-byte signed accumulator.
   8245      The default format is "s8.7".
   8246 
   8247 `SAmode'
   8248      "Single Accumulator" mode represents a four-byte signed
   8249      accumulator.  The default format is "s16.15".
   8250 
   8251 `DAmode'
   8252      "Double Accumulator" mode represents an eight-byte signed
   8253      accumulator.  The default format is "s32.31".
   8254 
   8255 `TAmode'
   8256      "Tetra Accumulator" mode represents a sixteen-byte signed
   8257      accumulator.  The default format is "s64.63".
   8258 
   8259 `UHAmode'
   8260      "Unsigned Half-Accumulator" mode represents a two-byte unsigned
   8261      accumulator.  The default format is "8.8".
   8262 
   8263 `USAmode'
   8264      "Unsigned Single Accumulator" mode represents a four-byte unsigned
   8265      accumulator.  The default format is "16.16".
   8266 
   8267 `UDAmode'
   8268      "Unsigned Double Accumulator" mode represents an eight-byte
   8269      unsigned accumulator.  The default format is "32.32".
   8270 
   8271 `UTAmode'
   8272      "Unsigned Tetra Accumulator" mode represents a sixteen-byte
   8273      unsigned accumulator.  The default format is "64.64".
   8274 
   8275 `CCmode'
   8276      "Condition Code" mode represents the value of a condition code,
   8277      which is a machine-specific set of bits used to represent the
   8278      result of a comparison operation.  Other machine-specific modes
   8279      may also be used for the condition code.  These modes are not used
   8280      on machines that use `cc0' (*note Condition Code::).
   8281 
   8282 `BLKmode'
   8283      "Block" mode represents values that are aggregates to which none of
   8284      the other modes apply.  In RTL, only memory references can have
   8285      this mode, and only if they appear in string-move or vector
   8286      instructions.  On machines which have no such instructions,
   8287      `BLKmode' will not appear in RTL.
   8288 
   8289 `VOIDmode'
   8290      Void mode means the absence of a mode or an unspecified mode.  For
   8291      example, RTL expressions of code `const_int' have mode `VOIDmode'
   8292      because they can be taken to have whatever mode the context
   8293      requires.  In debugging dumps of RTL, `VOIDmode' is expressed by
   8294      the absence of any mode.
   8295 
   8296 `QCmode, HCmode, SCmode, DCmode, XCmode, TCmode'
   8297      These modes stand for a complex number represented as a pair of
   8298      floating point values.  The floating point values are in `QFmode',
   8299      `HFmode', `SFmode', `DFmode', `XFmode', and `TFmode', respectively.
   8300 
   8301 `CQImode, CHImode, CSImode, CDImode, CTImode, COImode'
   8302      These modes stand for a complex number represented as a pair of
   8303      integer values.  The integer values are in `QImode', `HImode',
   8304      `SImode', `DImode', `TImode', and `OImode', respectively.
   8305 
   8306  The machine description defines `Pmode' as a C macro which expands
   8307 into the machine mode used for addresses.  Normally this is the mode
   8308 whose size is `BITS_PER_WORD', `SImode' on 32-bit machines.
   8309 
   8310  The only modes which a machine description must support are `QImode',
   8311 and the modes corresponding to `BITS_PER_WORD', `FLOAT_TYPE_SIZE' and
   8312 `DOUBLE_TYPE_SIZE'.  The compiler will attempt to use `DImode' for
   8313 8-byte structures and unions, but this can be prevented by overriding
   8314 the definition of `MAX_FIXED_MODE_SIZE'.  Alternatively, you can have
   8315 the compiler use `TImode' for 16-byte structures and unions.  Likewise,
   8316 you can arrange for the C type `short int' to avoid using `HImode'.
   8317 
   8318  Very few explicit references to machine modes remain in the compiler
   8319 and these few references will soon be removed.  Instead, the machine
   8320 modes are divided into mode classes.  These are represented by the
   8321 enumeration type `enum mode_class' defined in `machmode.h'.  The
   8322 possible mode classes are:
   8323 
   8324 `MODE_INT'
   8325      Integer modes.  By default these are `BImode', `QImode', `HImode',
   8326      `SImode', `DImode', `TImode', and `OImode'.
   8327 
   8328 `MODE_PARTIAL_INT'
   8329      The "partial integer" modes, `PQImode', `PHImode', `PSImode' and
   8330      `PDImode'.
   8331 
   8332 `MODE_FLOAT'
   8333      Floating point modes.  By default these are `QFmode', `HFmode',
   8334      `TQFmode', `SFmode', `DFmode', `XFmode' and `TFmode'.
   8335 
   8336 `MODE_DECIMAL_FLOAT'
   8337      Decimal floating point modes.  By default these are `SDmode',
   8338      `DDmode' and `TDmode'.
   8339 
   8340 `MODE_FRACT'
   8341      Signed fractional modes.  By default these are `QQmode', `HQmode',
   8342      `SQmode', `DQmode' and `TQmode'.
   8343 
   8344 `MODE_UFRACT'
   8345      Unsigned fractional modes.  By default these are `UQQmode',
   8346      `UHQmode', `USQmode', `UDQmode' and `UTQmode'.
   8347 
   8348 `MODE_ACCUM'
   8349      Signed accumulator modes.  By default these are `HAmode',
   8350      `SAmode', `DAmode' and `TAmode'.
   8351 
   8352 `MODE_UACCUM'
   8353      Unsigned accumulator modes.  By default these are `UHAmode',
   8354      `USAmode', `UDAmode' and `UTAmode'.
   8355 
   8356 `MODE_COMPLEX_INT'
   8357      Complex integer modes.  (These are not currently implemented).
   8358 
   8359 `MODE_COMPLEX_FLOAT'
   8360      Complex floating point modes.  By default these are `QCmode',
   8361      `HCmode', `SCmode', `DCmode', `XCmode', and `TCmode'.
   8362 
   8363 `MODE_FUNCTION'
   8364      Algol or Pascal function variables including a static chain.
   8365      (These are not currently implemented).
   8366 
   8367 `MODE_CC'
   8368      Modes representing condition code values.  These are `CCmode' plus
   8369      any `CC_MODE' modes listed in the `MACHINE-modes.def'.  *Note Jump
   8370      Patterns::, also see *note Condition Code::.
   8371 
   8372 `MODE_RANDOM'
   8373      This is a catchall mode class for modes which don't fit into the
   8374      above classes.  Currently `VOIDmode' and `BLKmode' are in
   8375      `MODE_RANDOM'.
   8376 
   8377  Here are some C macros that relate to machine modes:
   8378 
   8379 `GET_MODE (X)'
   8380      Returns the machine mode of the RTX X.
   8381 
   8382 `PUT_MODE (X, NEWMODE)'
   8383      Alters the machine mode of the RTX X to be NEWMODE.
   8384 
   8385 `NUM_MACHINE_MODES'
   8386      Stands for the number of machine modes available on the target
   8387      machine.  This is one greater than the largest numeric value of any
   8388      machine mode.
   8389 
   8390 `GET_MODE_NAME (M)'
   8391      Returns the name of mode M as a string.
   8392 
   8393 `GET_MODE_CLASS (M)'
   8394      Returns the mode class of mode M.
   8395 
   8396 `GET_MODE_WIDER_MODE (M)'
   8397      Returns the next wider natural mode.  For example, the expression
   8398      `GET_MODE_WIDER_MODE (QImode)' returns `HImode'.
   8399 
   8400 `GET_MODE_SIZE (M)'
   8401      Returns the size in bytes of a datum of mode M.
   8402 
   8403 `GET_MODE_BITSIZE (M)'
   8404      Returns the size in bits of a datum of mode M.
   8405 
   8406 `GET_MODE_IBIT (M)'
   8407      Returns the number of integral bits of a datum of fixed-point mode
   8408      M.
   8409 
   8410 `GET_MODE_FBIT (M)'
   8411      Returns the number of fractional bits of a datum of fixed-point
   8412      mode M.
   8413 
   8414 `GET_MODE_MASK (M)'
   8415      Returns a bitmask containing 1 for all bits in a word that fit
   8416      within mode M.  This macro can only be used for modes whose
   8417      bitsize is less than or equal to `HOST_BITS_PER_INT'.
   8418 
   8419 `GET_MODE_ALIGNMENT (M)'
   8420      Return the required alignment, in bits, for an object of mode M.
   8421 
   8422 `GET_MODE_UNIT_SIZE (M)'
   8423      Returns the size in bytes of the subunits of a datum of mode M.
   8424      This is the same as `GET_MODE_SIZE' except in the case of complex
   8425      modes.  For them, the unit size is the size of the real or
   8426      imaginary part.
   8427 
   8428 `GET_MODE_NUNITS (M)'
   8429      Returns the number of units contained in a mode, i.e.,
   8430      `GET_MODE_SIZE' divided by `GET_MODE_UNIT_SIZE'.
   8431 
   8432 `GET_CLASS_NARROWEST_MODE (C)'
   8433      Returns the narrowest mode in mode class C.
   8434 
   8435  The global variables `byte_mode' and `word_mode' contain modes whose
   8436 classes are `MODE_INT' and whose bitsizes are either `BITS_PER_UNIT' or
   8437 `BITS_PER_WORD', respectively.  On 32-bit machines, these are `QImode'
   8438 and `SImode', respectively.
   8439 
   8440 
   8441 File: gccint.info,  Node: Constants,  Next: Regs and Memory,  Prev: Machine Modes,  Up: RTL
   8442 
   8443 10.7 Constant Expression Types
   8444 ==============================
   8445 
   8446 The simplest RTL expressions are those that represent constant values.
   8447 
   8448 `(const_int I)'
   8449      This type of expression represents the integer value I.  I is
   8450      customarily accessed with the macro `INTVAL' as in `INTVAL (EXP)',
   8451      which is equivalent to `XWINT (EXP, 0)'.
   8452 
   8453      Constants generated for modes with fewer bits than `HOST_WIDE_INT'
   8454      must be sign extended to full width (e.g., with `gen_int_mode').
   8455 
   8456      There is only one expression object for the integer value zero; it
   8457      is the value of the variable `const0_rtx'.  Likewise, the only
   8458      expression for integer value one is found in `const1_rtx', the only
   8459      expression for integer value two is found in `const2_rtx', and the
   8460      only expression for integer value negative one is found in
   8461      `constm1_rtx'.  Any attempt to create an expression of code
   8462      `const_int' and value zero, one, two or negative one will return
   8463      `const0_rtx', `const1_rtx', `const2_rtx' or `constm1_rtx' as
   8464      appropriate.
   8465 
   8466      Similarly, there is only one object for the integer whose value is
   8467      `STORE_FLAG_VALUE'.  It is found in `const_true_rtx'.  If
   8468      `STORE_FLAG_VALUE' is one, `const_true_rtx' and `const1_rtx' will
   8469      point to the same object.  If `STORE_FLAG_VALUE' is -1,
   8470      `const_true_rtx' and `constm1_rtx' will point to the same object.
   8471 
   8472 `(const_double:M I0 I1 ...)'
   8473      Represents either a floating-point constant of mode M or an
   8474      integer constant too large to fit into `HOST_BITS_PER_WIDE_INT'
   8475      bits but small enough to fit within twice that number of bits (GCC
   8476      does not provide a mechanism to represent even larger constants).
   8477      In the latter case, M will be `VOIDmode'.
   8478 
   8479      If M is `VOIDmode', the bits of the value are stored in I0 and I1.
   8480      I0 is customarily accessed with the macro `CONST_DOUBLE_LOW' and
   8481      I1 with `CONST_DOUBLE_HIGH'.
   8482 
   8483      If the constant is floating point (regardless of its precision),
   8484      then the number of integers used to store the value depends on the
   8485      size of `REAL_VALUE_TYPE' (*note Floating Point::).  The integers
   8486      represent a floating point number, but not precisely in the target
   8487      machine's or host machine's floating point format.  To convert
   8488      them to the precise bit pattern used by the target machine, use
   8489      the macro `REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data
   8490      Output::).
   8491 
   8492 `(const_fixed:M ...)'
   8493      Represents a fixed-point constant of mode M.  The operand is a
   8494      data structure of type `struct fixed_value' and is accessed with
   8495      the macro `CONST_FIXED_VALUE'.  The high part of data is accessed
   8496      with `CONST_FIXED_VALUE_HIGH'; the low part is accessed with
   8497      `CONST_FIXED_VALUE_LOW'.
   8498 
   8499 `(const_vector:M [X0 X1 ...])'
   8500      Represents a vector constant.  The square brackets stand for the
   8501      vector containing the constant elements.  X0, X1 and so on are the
   8502      `const_int', `const_double' or `const_fixed' elements.
   8503 
   8504      The number of units in a `const_vector' is obtained with the macro
   8505      `CONST_VECTOR_NUNITS' as in `CONST_VECTOR_NUNITS (V)'.
   8506 
   8507      Individual elements in a vector constant are accessed with the
   8508      macro `CONST_VECTOR_ELT' as in `CONST_VECTOR_ELT (V, N)' where V
   8509      is the vector constant and N is the element desired.
   8510 
   8511 `(const_string STR)'
   8512      Represents a constant string with value STR.  Currently this is
   8513      used only for insn attributes (*note Insn Attributes::) since
   8514      constant strings in C are placed in memory.
   8515 
   8516 `(symbol_ref:MODE SYMBOL)'
   8517      Represents the value of an assembler label for data.  SYMBOL is a
   8518      string that describes the name of the assembler label.  If it
   8519      starts with a `*', the label is the rest of SYMBOL not including
   8520      the `*'.  Otherwise, the label is SYMBOL, usually prefixed with
   8521      `_'.
   8522 
   8523      The `symbol_ref' contains a mode, which is usually `Pmode'.
   8524      Usually that is the only mode for which a symbol is directly valid.
   8525 
   8526 `(label_ref:MODE LABEL)'
   8527      Represents the value of an assembler label for code.  It contains
   8528      one operand, an expression, which must be a `code_label' or a
   8529      `note' of type `NOTE_INSN_DELETED_LABEL' that appears in the
   8530      instruction sequence to identify the place where the label should
   8531      go.
   8532 
   8533      The reason for using a distinct expression type for code label
   8534      references is so that jump optimization can distinguish them.
   8535 
   8536      The `label_ref' contains a mode, which is usually `Pmode'.
   8537      Usually that is the only mode for which a label is directly valid.
   8538 
   8539 `(const:M EXP)'
   8540      Represents a constant that is the result of an assembly-time
   8541      arithmetic computation.  The operand, EXP, is an expression that
   8542      contains only constants (`const_int', `symbol_ref' and `label_ref'
   8543      expressions) combined with `plus' and `minus'.  However, not all
   8544      combinations are valid, since the assembler cannot do arbitrary
   8545      arithmetic on relocatable symbols.
   8546 
   8547      M should be `Pmode'.
   8548 
   8549 `(high:M EXP)'
   8550      Represents the high-order bits of EXP, usually a `symbol_ref'.
   8551      The number of bits is machine-dependent and is normally the number
   8552      of bits specified in an instruction that initializes the high
   8553      order bits of a register.  It is used with `lo_sum' to represent
   8554      the typical two-instruction sequence used in RISC machines to
   8555      reference a global memory location.
   8556 
   8557      M should be `Pmode'.
   8558 
   8559  The macro `CONST0_RTX (MODE)' refers to an expression with value 0 in
   8560 mode MODE.  If mode MODE is of mode class `MODE_INT', it returns
   8561 `const0_rtx'.  If mode MODE is of mode class `MODE_FLOAT', it returns a
   8562 `CONST_DOUBLE' expression in mode MODE.  Otherwise, it returns a
   8563 `CONST_VECTOR' expression in mode MODE.  Similarly, the macro
   8564 `CONST1_RTX (MODE)' refers to an expression with value 1 in mode MODE
   8565 and similarly for `CONST2_RTX'.  The `CONST1_RTX' and `CONST2_RTX'
   8566 macros are undefined for vector modes.
   8567 
   8568 
   8569 File: gccint.info,  Node: Regs and Memory,  Next: Arithmetic,  Prev: Constants,  Up: RTL
   8570 
   8571 10.8 Registers and Memory
   8572 =========================
   8573 
   8574 Here are the RTL expression types for describing access to machine
   8575 registers and to main memory.
   8576 
   8577 `(reg:M N)'
   8578      For small values of the integer N (those that are less than
   8579      `FIRST_PSEUDO_REGISTER'), this stands for a reference to machine
   8580      register number N: a "hard register".  For larger values of N, it
   8581      stands for a temporary value or "pseudo register".  The compiler's
   8582      strategy is to generate code assuming an unlimited number of such
   8583      pseudo registers, and later convert them into hard registers or
   8584      into memory references.
   8585 
   8586      M is the machine mode of the reference.  It is necessary because
   8587      machines can generally refer to each register in more than one
   8588      mode.  For example, a register may contain a full word but there
   8589      may be instructions to refer to it as a half word or as a single
   8590      byte, as well as instructions to refer to it as a floating point
   8591      number of various precisions.
   8592 
   8593      Even for a register that the machine can access in only one mode,
   8594      the mode must always be specified.
   8595 
   8596      The symbol `FIRST_PSEUDO_REGISTER' is defined by the machine
   8597      description, since the number of hard registers on the machine is
   8598      an invariant characteristic of the machine.  Note, however, that
   8599      not all of the machine registers must be general registers.  All
   8600      the machine registers that can be used for storage of data are
   8601      given hard register numbers, even those that can be used only in
   8602      certain instructions or can hold only certain types of data.
   8603 
   8604      A hard register may be accessed in various modes throughout one
   8605      function, but each pseudo register is given a natural mode and is
   8606      accessed only in that mode.  When it is necessary to describe an
   8607      access to a pseudo register using a nonnatural mode, a `subreg'
   8608      expression is used.
   8609 
   8610      A `reg' expression with a machine mode that specifies more than
   8611      one word of data may actually stand for several consecutive
   8612      registers.  If in addition the register number specifies a
   8613      hardware register, then it actually represents several consecutive
   8614      hardware registers starting with the specified one.
   8615 
   8616      Each pseudo register number used in a function's RTL code is
   8617      represented by a unique `reg' expression.
   8618 
   8619      Some pseudo register numbers, those within the range of
   8620      `FIRST_VIRTUAL_REGISTER' to `LAST_VIRTUAL_REGISTER' only appear
   8621      during the RTL generation phase and are eliminated before the
   8622      optimization phases.  These represent locations in the stack frame
   8623      that cannot be determined until RTL generation for the function
   8624      has been completed.  The following virtual register numbers are
   8625      defined:
   8626 
   8627     `VIRTUAL_INCOMING_ARGS_REGNUM'
   8628           This points to the first word of the incoming arguments
   8629           passed on the stack.  Normally these arguments are placed
   8630           there by the caller, but the callee may have pushed some
   8631           arguments that were previously passed in registers.
   8632 
   8633           When RTL generation is complete, this virtual register is
   8634           replaced by the sum of the register given by
   8635           `ARG_POINTER_REGNUM' and the value of `FIRST_PARM_OFFSET'.
   8636 
   8637     `VIRTUAL_STACK_VARS_REGNUM'
   8638           If `FRAME_GROWS_DOWNWARD' is defined to a nonzero value, this
   8639           points to immediately above the first variable on the stack.
   8640           Otherwise, it points to the first variable on the stack.
   8641 
   8642           `VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the
   8643           register given by `FRAME_POINTER_REGNUM' and the value
   8644           `STARTING_FRAME_OFFSET'.
   8645 
   8646     `VIRTUAL_STACK_DYNAMIC_REGNUM'
   8647           This points to the location of dynamically allocated memory
   8648           on the stack immediately after the stack pointer has been
   8649           adjusted by the amount of memory desired.
   8650 
   8651           This virtual register is replaced by the sum of the register
   8652           given by `STACK_POINTER_REGNUM' and the value
   8653           `STACK_DYNAMIC_OFFSET'.
   8654 
   8655     `VIRTUAL_OUTGOING_ARGS_REGNUM'
   8656           This points to the location in the stack at which outgoing
   8657           arguments should be written when the stack is pre-pushed
   8658           (arguments pushed using push insns should always use
   8659           `STACK_POINTER_REGNUM').
   8660 
   8661           This virtual register is replaced by the sum of the register
   8662           given by `STACK_POINTER_REGNUM' and the value
   8663           `STACK_POINTER_OFFSET'.
   8664 
   8665 `(subreg:M1 REG:M2 BYTENUM)'
   8666      `subreg' expressions are used to refer to a register in a machine
   8667      mode other than its natural one, or to refer to one register of a
   8668      multi-part `reg' that actually refers to several registers.
   8669 
   8670      Each pseudo register has a natural mode.  If it is necessary to
   8671      operate on it in a different mode, the register must be enclosed
   8672      in a `subreg'.
   8673 
   8674      There are currently three supported types for the first operand of
   8675      a `subreg':
   8676         * pseudo registers This is the most common case.  Most
   8677           `subreg's have pseudo `reg's as their first operand.
   8678 
   8679         * mem `subreg's of `mem' were common in earlier versions of GCC
   8680           and are still supported.  During the reload pass these are
   8681           replaced by plain `mem's.  On machines that do not do
   8682           instruction scheduling, use of `subreg's of `mem' are still
   8683           used, but this is no longer recommended.  Such `subreg's are
   8684           considered to be `register_operand's rather than
   8685           `memory_operand's before and during reload.  Because of this,
   8686           the scheduling passes cannot properly schedule instructions
   8687           with `subreg's of `mem', so for machines that do scheduling,
   8688           `subreg's of `mem' should never be used.  To support this,
   8689           the combine and recog passes have explicit code to inhibit
   8690           the creation of `subreg's of `mem' when `INSN_SCHEDULING' is
   8691           defined.
   8692 
   8693           The use of `subreg's of `mem' after the reload pass is an area
   8694           that is not well understood and should be avoided.  There is
   8695           still some code in the compiler to support this, but this
   8696           code has possibly rotted.  This use of `subreg's is
   8697           discouraged and will most likely not be supported in the
   8698           future.
   8699 
   8700         * hard registers It is seldom necessary to wrap hard registers
   8701           in `subreg's; such registers would normally reduce to a
   8702           single `reg' rtx.  This use of `subreg's is discouraged and
   8703           may not be supported in the future.
   8704 
   8705 
   8706      `subreg's of `subreg's are not supported.  Using
   8707      `simplify_gen_subreg' is the recommended way to avoid this problem.
   8708 
   8709      `subreg's come in two distinct flavors, each having its own usage
   8710      and rules:
   8711 
   8712     Paradoxical subregs
   8713           When M1 is strictly wider than M2, the `subreg' expression is
   8714           called "paradoxical".  The canonical test for this class of
   8715           `subreg' is:
   8716 
   8717                GET_MODE_SIZE (M1) > GET_MODE_SIZE (M2)
   8718 
   8719           Paradoxical `subreg's can be used as both lvalues and rvalues.
   8720           When used as an lvalue, the low-order bits of the source value
   8721           are stored in REG and the high-order bits are discarded.
   8722           When used as an rvalue, the low-order bits of the `subreg' are
   8723           taken from REG while the high-order bits may or may not be
   8724           defined.
   8725 
   8726           The high-order bits of rvalues are in the following
   8727           circumstances:
   8728 
   8729              * `subreg's of `mem' When M2 is smaller than a word, the
   8730                macro `LOAD_EXTEND_OP', can control how the high-order
   8731                bits are defined.
   8732 
   8733              * `subreg' of `reg's The upper bits are defined when
   8734                `SUBREG_PROMOTED_VAR_P' is true.
   8735                `SUBREG_PROMOTED_UNSIGNED_P' describes what the upper
   8736                bits hold.  Such subregs usually represent local
   8737                variables, register variables and parameter pseudo
   8738                variables that have been promoted to a wider mode.
   8739 
   8740 
   8741           BYTENUM is always zero for a paradoxical `subreg', even on
   8742           big-endian targets.
   8743 
   8744           For example, the paradoxical `subreg':
   8745 
   8746                (set (subreg:SI (reg:HI X) 0) Y)
   8747 
   8748           stores the lower 2 bytes of Y in X and discards the upper 2
   8749           bytes.  A subsequent:
   8750 
   8751                (set Z (subreg:SI (reg:HI X) 0))
   8752 
   8753           would set the lower two bytes of Z to Y and set the upper two
   8754           bytes to an unknown value assuming `SUBREG_PROMOTED_VAR_P' is
   8755           false.
   8756 
   8757     Normal subregs
   8758           When M1 is at least as narrow as M2 the `subreg' expression
   8759           is called "normal".
   8760 
   8761           Normal `subreg's restrict consideration to certain bits of
   8762           REG.  There are two cases.  If M1 is smaller than a word, the
   8763           `subreg' refers to the least-significant part (or "lowpart")
   8764           of one word of REG.  If M1 is word-sized or greater, the
   8765           `subreg' refers to one or more complete words.
   8766 
   8767           When used as an lvalue, `subreg' is a word-based accessor.
   8768           Storing to a `subreg' modifies all the words of REG that
   8769           overlap the `subreg', but it leaves the other words of REG
   8770           alone.
   8771 
   8772           When storing to a normal `subreg' that is smaller than a word,
   8773           the other bits of the referenced word are usually left in an
   8774           undefined state.  This laxity makes it easier to generate
   8775           efficient code for such instructions.  To represent an
   8776           instruction that preserves all the bits outside of those in
   8777           the `subreg', use `strict_low_part' or `zero_extract' around
   8778           the `subreg'.
   8779 
   8780           BYTENUM must identify the offset of the first byte of the
   8781           `subreg' from the start of REG, assuming that REG is laid out
   8782           in memory order.  The memory order of bytes is defined by two
   8783           target macros, `WORDS_BIG_ENDIAN' and `BYTES_BIG_ENDIAN':
   8784 
   8785              * `WORDS_BIG_ENDIAN', if set to 1, says that byte number
   8786                zero is part of the most significant word; otherwise, it
   8787                is part of the least significant word.
   8788 
   8789              * `BYTES_BIG_ENDIAN', if set to 1, says that byte number
   8790                zero is the most significant byte within a word;
   8791                otherwise, it is the least significant byte within a
   8792                word.
   8793 
   8794           On a few targets, `FLOAT_WORDS_BIG_ENDIAN' disagrees with
   8795           `WORDS_BIG_ENDIAN'.  However, most parts of the compiler treat
   8796           floating point values as if they had the same endianness as
   8797           integer values.  This works because they handle them solely
   8798           as a collection of integer values, with no particular
   8799           numerical value.  Only real.c and the runtime libraries care
   8800           about `FLOAT_WORDS_BIG_ENDIAN'.
   8801 
   8802           Thus,
   8803 
   8804                (subreg:HI (reg:SI X) 2)
   8805 
   8806           on a `BYTES_BIG_ENDIAN', `UNITS_PER_WORD == 4' target is the
   8807           same as
   8808 
   8809                (subreg:HI (reg:SI X) 0)
   8810 
   8811           on a little-endian, `UNITS_PER_WORD == 4' target.  Both
   8812           `subreg's access the lower two bytes of register X.
   8813 
   8814 
   8815      A `MODE_PARTIAL_INT' mode behaves as if it were as wide as the
   8816      corresponding `MODE_INT' mode, except that it has an unknown
   8817      number of undefined bits.  For example:
   8818 
   8819           (subreg:PSI (reg:SI 0) 0)
   8820 
   8821      accesses the whole of `(reg:SI 0)', but the exact relationship
   8822      between the `PSImode' value and the `SImode' value is not defined.
   8823      If we assume `UNITS_PER_WORD <= 4', then the following two
   8824      `subreg's:
   8825 
   8826           (subreg:PSI (reg:DI 0) 0)
   8827           (subreg:PSI (reg:DI 0) 4)
   8828 
   8829      represent independent 4-byte accesses to the two halves of
   8830      `(reg:DI 0)'.  Both `subreg's have an unknown number of undefined
   8831      bits.
   8832 
   8833      If `UNITS_PER_WORD <= 2' then these two `subreg's:
   8834 
   8835           (subreg:HI (reg:PSI 0) 0)
   8836           (subreg:HI (reg:PSI 0) 2)
   8837 
   8838      represent independent 2-byte accesses that together span the whole
   8839      of `(reg:PSI 0)'.  Storing to the first `subreg' does not affect
   8840      the value of the second, and vice versa.  `(reg:PSI 0)' has an
   8841      unknown number of undefined bits, so the assignment:
   8842 
   8843           (set (subreg:HI (reg:PSI 0) 0) (reg:HI 4))
   8844 
   8845      does not guarantee that `(subreg:HI (reg:PSI 0) 0)' has the value
   8846      `(reg:HI 4)'.
   8847 
   8848      The rules above apply to both pseudo REGs and hard REGs.  If the
   8849      semantics are not correct for particular combinations of M1, M2
   8850      and hard REG, the target-specific code must ensure that those
   8851      combinations are never used.  For example:
   8852 
   8853           CANNOT_CHANGE_MODE_CLASS (M2, M1, CLASS)
   8854 
   8855      must be true for every class CLASS that includes REG.
   8856 
   8857      The first operand of a `subreg' expression is customarily accessed
   8858      with the `SUBREG_REG' macro and the second operand is customarily
   8859      accessed with the `SUBREG_BYTE' macro.
   8860 
   8861      It has been several years since a platform in which
   8862      `BYTES_BIG_ENDIAN' not equal to `WORDS_BIG_ENDIAN' has been
   8863      tested.  Anyone wishing to support such a platform in the future
   8864      may be confronted with code rot.
   8865 
   8866 `(scratch:M)'
   8867      This represents a scratch register that will be required for the
   8868      execution of a single instruction and not used subsequently.  It is
   8869      converted into a `reg' by either the local register allocator or
   8870      the reload pass.
   8871 
   8872      `scratch' is usually present inside a `clobber' operation (*note
   8873      Side Effects::).
   8874 
   8875 `(cc0)'
   8876      This refers to the machine's condition code register.  It has no
   8877      operands and may not have a machine mode.  There are two ways to
   8878      use it:
   8879 
   8880         * To stand for a complete set of condition code flags.  This is
   8881           best on most machines, where each comparison sets the entire
   8882           series of flags.
   8883 
   8884           With this technique, `(cc0)' may be validly used in only two
   8885           contexts: as the destination of an assignment (in test and
   8886           compare instructions) and in comparison operators comparing
   8887           against zero (`const_int' with value zero; that is to say,
   8888           `const0_rtx').
   8889 
   8890         * To stand for a single flag that is the result of a single
   8891           condition.  This is useful on machines that have only a
   8892           single flag bit, and in which comparison instructions must
   8893           specify the condition to test.
   8894 
   8895           With this technique, `(cc0)' may be validly used in only two
   8896           contexts: as the destination of an assignment (in test and
   8897           compare instructions) where the source is a comparison
   8898           operator, and as the first operand of `if_then_else' (in a
   8899           conditional branch).
   8900 
   8901      There is only one expression object of code `cc0'; it is the value
   8902      of the variable `cc0_rtx'.  Any attempt to create an expression of
   8903      code `cc0' will return `cc0_rtx'.
   8904 
   8905      Instructions can set the condition code implicitly.  On many
   8906      machines, nearly all instructions set the condition code based on
   8907      the value that they compute or store.  It is not necessary to
   8908      record these actions explicitly in the RTL because the machine
   8909      description includes a prescription for recognizing the
   8910      instructions that do so (by means of the macro
   8911      `NOTICE_UPDATE_CC').  *Note Condition Code::.  Only instructions
   8912      whose sole purpose is to set the condition code, and instructions
   8913      that use the condition code, need mention `(cc0)'.
   8914 
   8915      On some machines, the condition code register is given a register
   8916      number and a `reg' is used instead of `(cc0)'.  This is usually the
   8917      preferable approach if only a small subset of instructions modify
   8918      the condition code.  Other machines store condition codes in
   8919      general registers; in such cases a pseudo register should be used.
   8920 
   8921      Some machines, such as the SPARC and RS/6000, have two sets of
   8922      arithmetic instructions, one that sets and one that does not set
   8923      the condition code.  This is best handled by normally generating
   8924      the instruction that does not set the condition code, and making a
   8925      pattern that both performs the arithmetic and sets the condition
   8926      code register (which would not be `(cc0)' in this case).  For
   8927      examples, search for `addcc' and `andcc' in `sparc.md'.
   8928 
   8929 `(pc)'
   8930      This represents the machine's program counter.  It has no operands
   8931      and may not have a machine mode.  `(pc)' may be validly used only
   8932      in certain specific contexts in jump instructions.
   8933 
   8934      There is only one expression object of code `pc'; it is the value
   8935      of the variable `pc_rtx'.  Any attempt to create an expression of
   8936      code `pc' will return `pc_rtx'.
   8937 
   8938      All instructions that do not jump alter the program counter
   8939      implicitly by incrementing it, but there is no need to mention
   8940      this in the RTL.
   8941 
   8942 `(mem:M ADDR ALIAS)'
   8943      This RTX represents a reference to main memory at an address
   8944      represented by the expression ADDR.  M specifies how large a unit
   8945      of memory is accessed.  ALIAS specifies an alias set for the
   8946      reference.  In general two items are in different alias sets if
   8947      they cannot reference the same memory address.
   8948 
   8949      The construct `(mem:BLK (scratch))' is considered to alias all
   8950      other memories.  Thus it may be used as a memory barrier in
   8951      epilogue stack deallocation patterns.
   8952 
   8953 `(concatM RTX RTX)'
   8954      This RTX represents the concatenation of two other RTXs.  This is
   8955      used for complex values.  It should only appear in the RTL
   8956      attached to declarations and during RTL generation.  It should not
   8957      appear in the ordinary insn chain.
   8958 
   8959 `(concatnM [RTX ...])'
   8960      This RTX represents the concatenation of all the RTX to make a
   8961      single value.  Like `concat', this should only appear in
   8962      declarations, and not in the insn chain.
   8963 
   8964 
   8965 File: gccint.info,  Node: Arithmetic,  Next: Comparisons,  Prev: Regs and Memory,  Up: RTL
   8966 
   8967 10.9 RTL Expressions for Arithmetic
   8968 ===================================
   8969 
   8970 Unless otherwise specified, all the operands of arithmetic expressions
   8971 must be valid for mode M.  An operand is valid for mode M if it has
   8972 mode M, or if it is a `const_int' or `const_double' and M is a mode of
   8973 class `MODE_INT'.
   8974 
   8975  For commutative binary operations, constants should be placed in the
   8976 second operand.
   8977 
   8978 `(plus:M X Y)'
   8979 `(ss_plus:M X Y)'
   8980 `(us_plus:M X Y)'
   8981      These three expressions all represent the sum of the values
   8982      represented by X and Y carried out in machine mode M.  They differ
   8983      in their behavior on overflow of integer modes.  `plus' wraps
   8984      round modulo the width of M; `ss_plus' saturates at the maximum
   8985      signed value representable in M; `us_plus' saturates at the
   8986      maximum unsigned value.
   8987 
   8988 `(lo_sum:M X Y)'
   8989      This expression represents the sum of X and the low-order bits of
   8990      Y.  It is used with `high' (*note Constants::) to represent the
   8991      typical two-instruction sequence used in RISC machines to
   8992      reference a global memory location.
   8993 
   8994      The number of low order bits is machine-dependent but is normally
   8995      the number of bits in a `Pmode' item minus the number of bits set
   8996      by `high'.
   8997 
   8998      M should be `Pmode'.
   8999 
   9000 `(minus:M X Y)'
   9001 `(ss_minus:M X Y)'
   9002 `(us_minus:M X Y)'
   9003      These three expressions represent the result of subtracting Y from
   9004      X, carried out in mode M.  Behavior on overflow is the same as for
   9005      the three variants of `plus' (see above).
   9006 
   9007 `(compare:M X Y)'
   9008      Represents the result of subtracting Y from X for purposes of
   9009      comparison.  The result is computed without overflow, as if with
   9010      infinite precision.
   9011 
   9012      Of course, machines can't really subtract with infinite precision.
   9013      However, they can pretend to do so when only the sign of the
   9014      result will be used, which is the case when the result is stored
   9015      in the condition code.  And that is the _only_ way this kind of
   9016      expression may validly be used: as a value to be stored in the
   9017      condition codes, either `(cc0)' or a register.  *Note
   9018      Comparisons::.
   9019 
   9020      The mode M is not related to the modes of X and Y, but instead is
   9021      the mode of the condition code value.  If `(cc0)' is used, it is
   9022      `VOIDmode'.  Otherwise it is some mode in class `MODE_CC', often
   9023      `CCmode'.  *Note Condition Code::.  If M is `VOIDmode' or
   9024      `CCmode', the operation returns sufficient information (in an
   9025      unspecified format) so that any comparison operator can be applied
   9026      to the result of the `COMPARE' operation.  For other modes in
   9027      class `MODE_CC', the operation only returns a subset of this
   9028      information.
   9029 
   9030      Normally, X and Y must have the same mode.  Otherwise, `compare'
   9031      is valid only if the mode of X is in class `MODE_INT' and Y is a
   9032      `const_int' or `const_double' with mode `VOIDmode'.  The mode of X
   9033      determines what mode the comparison is to be done in; thus it must
   9034      not be `VOIDmode'.
   9035 
   9036      If one of the operands is a constant, it should be placed in the
   9037      second operand and the comparison code adjusted as appropriate.
   9038 
   9039      A `compare' specifying two `VOIDmode' constants is not valid since
   9040      there is no way to know in what mode the comparison is to be
   9041      performed; the comparison must either be folded during the
   9042      compilation or the first operand must be loaded into a register
   9043      while its mode is still known.
   9044 
   9045 `(neg:M X)'
   9046 `(ss_neg:M X)'
   9047 `(us_neg:M X)'
   9048      These two expressions represent the negation (subtraction from
   9049      zero) of the value represented by X, carried out in mode M.  They
   9050      differ in the behavior on overflow of integer modes.  In the case
   9051      of `neg', the negation of the operand may be a number not
   9052      representable in mode M, in which case it is truncated to M.
   9053      `ss_neg' and `us_neg' ensure that an out-of-bounds result
   9054      saturates to the maximum or minimum signed or unsigned value.
   9055 
   9056 `(mult:M X Y)'
   9057 `(ss_mult:M X Y)'
   9058 `(us_mult:M X Y)'
   9059      Represents the signed product of the values represented by X and Y
   9060      carried out in machine mode M.  `ss_mult' and `us_mult' ensure
   9061      that an out-of-bounds result saturates to the maximum or minimum
   9062      signed or unsigned value.
   9063 
   9064      Some machines support a multiplication that generates a product
   9065      wider than the operands.  Write the pattern for this as
   9066 
   9067           (mult:M (sign_extend:M X) (sign_extend:M Y))
   9068 
   9069      where M is wider than the modes of X and Y, which need not be the
   9070      same.
   9071 
   9072      For unsigned widening multiplication, use the same idiom, but with
   9073      `zero_extend' instead of `sign_extend'.
   9074 
   9075 `(fma:M X Y Z)'
   9076      Represents the `fma', `fmaf', and `fmal' builtin functions that do
   9077      a combined multiply of X and Y and then adding toZ without doing
   9078      an intermediate rounding step.
   9079 
   9080 `(div:M X Y)'
   9081 `(ss_div:M X Y)'
   9082      Represents the quotient in signed division of X by Y, carried out
   9083      in machine mode M.  If M is a floating point mode, it represents
   9084      the exact quotient; otherwise, the integerized quotient.  `ss_div'
   9085      ensures that an out-of-bounds result saturates to the maximum or
   9086      minimum signed value.
   9087 
   9088      Some machines have division instructions in which the operands and
   9089      quotient widths are not all the same; you should represent such
   9090      instructions using `truncate' and `sign_extend' as in,
   9091 
   9092           (truncate:M1 (div:M2 X (sign_extend:M2 Y)))
   9093 
   9094 `(udiv:M X Y)'
   9095 `(us_div:M X Y)'
   9096      Like `div' but represents unsigned division.  `us_div' ensures
   9097      that an out-of-bounds result saturates to the maximum or minimum
   9098      unsigned value.
   9099 
   9100 `(mod:M X Y)'
   9101 `(umod:M X Y)'
   9102      Like `div' and `udiv' but represent the remainder instead of the
   9103      quotient.
   9104 
   9105 `(smin:M X Y)'
   9106 `(smax:M X Y)'
   9107      Represents the smaller (for `smin') or larger (for `smax') of X
   9108      and Y, interpreted as signed values in mode M.  When used with
   9109      floating point, if both operands are zeros, or if either operand
   9110      is `NaN', then it is unspecified which of the two operands is
   9111      returned as the result.
   9112 
   9113 `(umin:M X Y)'
   9114 `(umax:M X Y)'
   9115      Like `smin' and `smax', but the values are interpreted as unsigned
   9116      integers.
   9117 
   9118 `(not:M X)'
   9119      Represents the bitwise complement of the value represented by X,
   9120      carried out in mode M, which must be a fixed-point machine mode.
   9121 
   9122 `(and:M X Y)'
   9123      Represents the bitwise logical-and of the values represented by X
   9124      and Y, carried out in machine mode M, which must be a fixed-point
   9125      machine mode.
   9126 
   9127 `(ior:M X Y)'
   9128      Represents the bitwise inclusive-or of the values represented by X
   9129      and Y, carried out in machine mode M, which must be a fixed-point
   9130      mode.
   9131 
   9132 `(xor:M X Y)'
   9133      Represents the bitwise exclusive-or of the values represented by X
   9134      and Y, carried out in machine mode M, which must be a fixed-point
   9135      mode.
   9136 
   9137 `(ashift:M X C)'
   9138 `(ss_ashift:M X C)'
   9139 `(us_ashift:M X C)'
   9140      These three expressions represent the result of arithmetically
   9141      shifting X left by C places.  They differ in their behavior on
   9142      overflow of integer modes.  An `ashift' operation is a plain shift
   9143      with no special behavior in case of a change in the sign bit;
   9144      `ss_ashift' and `us_ashift' saturates to the minimum or maximum
   9145      representable value if any of the bits shifted out differs from
   9146      the final sign bit.
   9147 
   9148      X have mode M, a fixed-point machine mode.  C be a fixed-point
   9149      mode or be a constant with mode `VOIDmode'; which mode is
   9150      determined by the mode called for in the machine description entry
   9151      for the left-shift instruction.  For example, on the VAX, the mode
   9152      of C is `QImode' regardless of M.
   9153 
   9154 `(lshiftrt:M X C)'
   9155 `(ashiftrt:M X C)'
   9156      Like `ashift' but for right shift.  Unlike the case for left shift,
   9157      these two operations are distinct.
   9158 
   9159 `(rotate:M X C)'
   9160 `(rotatert:M X C)'
   9161      Similar but represent left and right rotate.  If C is a constant,
   9162      use `rotate'.
   9163 
   9164 `(abs:M X)'
   9165 
   9166 `(ss_abs:M X)'
   9167      Represents the absolute value of X, computed in mode M.  `ss_abs'
   9168      ensures that an out-of-bounds result saturates to the maximum
   9169      signed value.
   9170 
   9171 `(sqrt:M X)'
   9172      Represents the square root of X, computed in mode M.  Most often M
   9173      will be a floating point mode.
   9174 
   9175 `(ffs:M X)'
   9176      Represents one plus the index of the least significant 1-bit in X,
   9177      represented as an integer of mode M.  (The value is zero if X is
   9178      zero.)  The mode of X need not be M; depending on the target
   9179      machine, various mode combinations may be valid.
   9180 
   9181 `(clz:M X)'
   9182      Represents the number of leading 0-bits in X, represented as an
   9183      integer of mode M, starting at the most significant bit position.
   9184      If X is zero, the value is determined by
   9185      `CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::).  Note that this is one
   9186      of the few expressions that is not invariant under widening.  The
   9187      mode of X will usually be an integer mode.
   9188 
   9189 `(ctz:M X)'
   9190      Represents the number of trailing 0-bits in X, represented as an
   9191      integer of mode M, starting at the least significant bit position.
   9192      If X is zero, the value is determined by
   9193      `CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::).  Except for this case,
   9194      `ctz(x)' is equivalent to `ffs(X) - 1'.  The mode of X will
   9195      usually be an integer mode.
   9196 
   9197 `(popcount:M X)'
   9198      Represents the number of 1-bits in X, represented as an integer of
   9199      mode M.  The mode of X will usually be an integer mode.
   9200 
   9201 `(parity:M X)'
   9202      Represents the number of 1-bits modulo 2 in X, represented as an
   9203      integer of mode M.  The mode of X will usually be an integer mode.
   9204 
   9205 `(bswap:M X)'
   9206      Represents the value X with the order of bytes reversed, carried
   9207      out in mode M, which must be a fixed-point machine mode.
   9208 
   9209 
   9210 File: gccint.info,  Node: Comparisons,  Next: Bit-Fields,  Prev: Arithmetic,  Up: RTL
   9211 
   9212 10.10 Comparison Operations
   9213 ===========================
   9214 
   9215 Comparison operators test a relation on two operands and are considered
   9216 to represent a machine-dependent nonzero value described by, but not
   9217 necessarily equal to, `STORE_FLAG_VALUE' (*note Misc::) if the relation
   9218 holds, or zero if it does not, for comparison operators whose results
   9219 have a `MODE_INT' mode, `FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the
   9220 relation holds, or zero if it does not, for comparison operators that
   9221 return floating-point values, and a vector of either
   9222 `VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of
   9223 zeros if it does not, for comparison operators that return vector
   9224 results.  The mode of the comparison operation is independent of the
   9225 mode of the data being compared.  If the comparison operation is being
   9226 tested (e.g., the first operand of an `if_then_else'), the mode must be
   9227 `VOIDmode'.
   9228 
   9229  There are two ways that comparison operations may be used.  The
   9230 comparison operators may be used to compare the condition codes `(cc0)'
   9231 against zero, as in `(eq (cc0) (const_int 0))'.  Such a construct
   9232 actually refers to the result of the preceding instruction in which the
   9233 condition codes were set.  The instruction setting the condition code
   9234 must be adjacent to the instruction using the condition code; only
   9235 `note' insns may separate them.
   9236 
   9237  Alternatively, a comparison operation may directly compare two data
   9238 objects.  The mode of the comparison is determined by the operands; they
   9239 must both be valid for a common machine mode.  A comparison with both
   9240 operands constant would be invalid as the machine mode could not be
   9241 deduced from it, but such a comparison should never exist in RTL due to
   9242 constant folding.
   9243 
   9244  In the example above, if `(cc0)' were last set to `(compare X Y)', the
   9245 comparison operation is identical to `(eq X Y)'.  Usually only one style
   9246 of comparisons is supported on a particular machine, but the combine
   9247 pass will try to merge the operations to produce the `eq' shown in case
   9248 it exists in the context of the particular insn involved.
   9249 
   9250  Inequality comparisons come in two flavors, signed and unsigned.  Thus,
   9251 there are distinct expression codes `gt' and `gtu' for signed and
   9252 unsigned greater-than.  These can produce different results for the same
   9253 pair of integer values: for example, 1 is signed greater-than -1 but not
   9254 unsigned greater-than, because -1 when regarded as unsigned is actually
   9255 `0xffffffff' which is greater than 1.
   9256 
   9257  The signed comparisons are also used for floating point values.
   9258 Floating point comparisons are distinguished by the machine modes of
   9259 the operands.
   9260 
   9261 `(eq:M X Y)'
   9262      `STORE_FLAG_VALUE' if the values represented by X and Y are equal,
   9263      otherwise 0.
   9264 
   9265 `(ne:M X Y)'
   9266      `STORE_FLAG_VALUE' if the values represented by X and Y are not
   9267      equal, otherwise 0.
   9268 
   9269 `(gt:M X Y)'
   9270      `STORE_FLAG_VALUE' if the X is greater than Y.  If they are
   9271      fixed-point, the comparison is done in a signed sense.
   9272 
   9273 `(gtu:M X Y)'
   9274      Like `gt' but does unsigned comparison, on fixed-point numbers
   9275      only.
   9276 
   9277 `(lt:M X Y)'
   9278 `(ltu:M X Y)'
   9279      Like `gt' and `gtu' but test for "less than".
   9280 
   9281 `(ge:M X Y)'
   9282 `(geu:M X Y)'
   9283      Like `gt' and `gtu' but test for "greater than or equal".
   9284 
   9285 `(le:M X Y)'
   9286 `(leu:M X Y)'
   9287      Like `gt' and `gtu' but test for "less than or equal".
   9288 
   9289 `(if_then_else COND THEN ELSE)'
   9290      This is not a comparison operation but is listed here because it is
   9291      always used in conjunction with a comparison operation.  To be
   9292      precise, COND is a comparison expression.  This expression
   9293      represents a choice, according to COND, between the value
   9294      represented by THEN and the one represented by ELSE.
   9295 
   9296      On most machines, `if_then_else' expressions are valid only to
   9297      express conditional jumps.
   9298 
   9299 `(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)'
   9300      Similar to `if_then_else', but more general.  Each of TEST1,
   9301      TEST2, ... is performed in turn.  The result of this expression is
   9302      the VALUE corresponding to the first nonzero test, or DEFAULT if
   9303      none of the tests are nonzero expressions.
   9304 
   9305      This is currently not valid for instruction patterns and is
   9306      supported only for insn attributes.  *Note Insn Attributes::.
   9307 
   9308 
   9309 File: gccint.info,  Node: Bit-Fields,  Next: Vector Operations,  Prev: Comparisons,  Up: RTL
   9310 
   9311 10.11 Bit-Fields
   9312 ================
   9313 
   9314 Special expression codes exist to represent bit-field instructions.
   9315 
   9316 `(sign_extract:M LOC SIZE POS)'
   9317      This represents a reference to a sign-extended bit-field contained
   9318      or starting in LOC (a memory or register reference).  The bit-field
   9319      is SIZE bits wide and starts at bit POS.  The compilation option
   9320      `BITS_BIG_ENDIAN' says which end of the memory unit POS counts
   9321      from.
   9322 
   9323      If LOC is in memory, its mode must be a single-byte integer mode.
   9324      If LOC is in a register, the mode to use is specified by the
   9325      operand of the `insv' or `extv' pattern (*note Standard Names::)
   9326      and is usually a full-word integer mode, which is the default if
   9327      none is specified.
   9328 
   9329      The mode of POS is machine-specific and is also specified in the
   9330      `insv' or `extv' pattern.
   9331 
   9332      The mode M is the same as the mode that would be used for LOC if
   9333      it were a register.
   9334 
   9335      A `sign_extract' can not appear as an lvalue, or part thereof, in
   9336      RTL.
   9337 
   9338 `(zero_extract:M LOC SIZE POS)'
   9339      Like `sign_extract' but refers to an unsigned or zero-extended
   9340      bit-field.  The same sequence of bits are extracted, but they are
   9341      filled to an entire word with zeros instead of by sign-extension.
   9342 
   9343      Unlike `sign_extract', this type of expressions can be lvalues in
   9344      RTL; they may appear on the left side of an assignment, indicating
   9345      insertion of a value into the specified bit-field.
   9346 
   9347 
   9348 File: gccint.info,  Node: Vector Operations,  Next: Conversions,  Prev: Bit-Fields,  Up: RTL
   9349 
   9350 10.12 Vector Operations
   9351 =======================
   9352 
   9353 All normal RTL expressions can be used with vector modes; they are
   9354 interpreted as operating on each part of the vector independently.
   9355 Additionally, there are a few new expressions to describe specific
   9356 vector operations.
   9357 
   9358 `(vec_merge:M VEC1 VEC2 ITEMS)'
   9359      This describes a merge operation between two vectors.  The result
   9360      is a vector of mode M; its elements are selected from either VEC1
   9361      or VEC2.  Which elements are selected is described by ITEMS, which
   9362      is a bit mask represented by a `const_int'; a zero bit indicates
   9363      the corresponding element in the result vector is taken from VEC2
   9364      while a set bit indicates it is taken from VEC1.
   9365 
   9366 `(vec_select:M VEC1 SELECTION)'
   9367      This describes an operation that selects parts of a vector.  VEC1
   9368      is the source vector, and SELECTION is a `parallel' that contains a
   9369      `const_int' for each of the subparts of the result vector, giving
   9370      the number of the source subpart that should be stored into it.
   9371      The result mode M is either the submode for a single element of
   9372      VEC1 (if only one subpart is selected), or another vector mode
   9373      with that element submode (if multiple subparts are selected).
   9374 
   9375 `(vec_concat:M VEC1 VEC2)'
   9376      Describes a vector concat operation.  The result is a
   9377      concatenation of the vectors VEC1 and VEC2; its length is the sum
   9378      of the lengths of the two inputs.
   9379 
   9380 `(vec_duplicate:M VEC)'
   9381      This operation converts a small vector into a larger one by
   9382      duplicating the input values.  The output vector mode must have
   9383      the same submodes as the input vector mode, and the number of
   9384      output parts must be an integer multiple of the number of input
   9385      parts.
   9386 
   9387 
   9388 
   9389 File: gccint.info,  Node: Conversions,  Next: RTL Declarations,  Prev: Vector Operations,  Up: RTL
   9390 
   9391 10.13 Conversions
   9392 =================
   9393 
   9394 All conversions between machine modes must be represented by explicit
   9395 conversion operations.  For example, an expression which is the sum of
   9396 a byte and a full word cannot be written as `(plus:SI (reg:QI 34)
   9397 (reg:SI 80))' because the `plus' operation requires two operands of the
   9398 same machine mode.  Therefore, the byte-sized operand is enclosed in a
   9399 conversion operation, as in
   9400 
   9401      (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
   9402 
   9403  The conversion operation is not a mere placeholder, because there may
   9404 be more than one way of converting from a given starting mode to the
   9405 desired final mode.  The conversion operation code says how to do it.
   9406 
   9407  For all conversion operations, X must not be `VOIDmode' because the
   9408 mode in which to do the conversion would not be known.  The conversion
   9409 must either be done at compile-time or X must be placed into a register.
   9410 
   9411 `(sign_extend:M X)'
   9412      Represents the result of sign-extending the value X to machine
   9413      mode M.  M must be a fixed-point mode and X a fixed-point value of
   9414      a mode narrower than M.
   9415 
   9416 `(zero_extend:M X)'
   9417      Represents the result of zero-extending the value X to machine
   9418      mode M.  M must be a fixed-point mode and X a fixed-point value of
   9419      a mode narrower than M.
   9420 
   9421 `(float_extend:M X)'
   9422      Represents the result of extending the value X to machine mode M.
   9423      M must be a floating point mode and X a floating point value of a
   9424      mode narrower than M.
   9425 
   9426 `(truncate:M X)'
   9427      Represents the result of truncating the value X to machine mode M.
   9428      M must be a fixed-point mode and X a fixed-point value of a mode
   9429      wider than M.
   9430 
   9431 `(ss_truncate:M X)'
   9432      Represents the result of truncating the value X to machine mode M,
   9433      using signed saturation in the case of overflow.  Both M and the
   9434      mode of X must be fixed-point modes.
   9435 
   9436 `(us_truncate:M X)'
   9437      Represents the result of truncating the value X to machine mode M,
   9438      using unsigned saturation in the case of overflow.  Both M and the
   9439      mode of X must be fixed-point modes.
   9440 
   9441 `(float_truncate:M X)'
   9442      Represents the result of truncating the value X to machine mode M.
   9443      M must be a floating point mode and X a floating point value of a
   9444      mode wider than M.
   9445 
   9446 `(float:M X)'
   9447      Represents the result of converting fixed point value X, regarded
   9448      as signed, to floating point mode M.
   9449 
   9450 `(unsigned_float:M X)'
   9451      Represents the result of converting fixed point value X, regarded
   9452      as unsigned, to floating point mode M.
   9453 
   9454 `(fix:M X)'
   9455      When M is a floating-point mode, represents the result of
   9456      converting floating point value X (valid for mode M) to an
   9457      integer, still represented in floating point mode M, by rounding
   9458      towards zero.
   9459 
   9460      When M is a fixed-point mode, represents the result of converting
   9461      floating point value X to mode M, regarded as signed.  How
   9462      rounding is done is not specified, so this operation may be used
   9463      validly in compiling C code only for integer-valued operands.
   9464 
   9465 `(unsigned_fix:M X)'
   9466      Represents the result of converting floating point value X to
   9467      fixed point mode M, regarded as unsigned.  How rounding is done is
   9468      not specified.
   9469 
   9470 `(fract_convert:M X)'
   9471      Represents the result of converting fixed-point value X to
   9472      fixed-point mode M, signed integer value X to fixed-point mode M,
   9473      floating-point value X to fixed-point mode M, fixed-point value X
   9474      to integer mode M regarded as signed, or fixed-point value X to
   9475      floating-point mode M.  When overflows or underflows happen, the
   9476      results are undefined.
   9477 
   9478 `(sat_fract:M X)'
   9479      Represents the result of converting fixed-point value X to
   9480      fixed-point mode M, signed integer value X to fixed-point mode M,
   9481      or floating-point value X to fixed-point mode M.  When overflows
   9482      or underflows happen, the results are saturated to the maximum or
   9483      the minimum.
   9484 
   9485 `(unsigned_fract_convert:M X)'
   9486      Represents the result of converting fixed-point value X to integer
   9487      mode M regarded as unsigned, or unsigned integer value X to
   9488      fixed-point mode M.  When overflows or underflows happen, the
   9489      results are undefined.
   9490 
   9491 `(unsigned_sat_fract:M X)'
   9492      Represents the result of converting unsigned integer value X to
   9493      fixed-point mode M.  When overflows or underflows happen, the
   9494      results are saturated to the maximum or the minimum.
   9495 
   9496 
   9497 File: gccint.info,  Node: RTL Declarations,  Next: Side Effects,  Prev: Conversions,  Up: RTL
   9498 
   9499 10.14 Declarations
   9500 ==================
   9501 
   9502 Declaration expression codes do not represent arithmetic operations but
   9503 rather state assertions about their operands.
   9504 
   9505 `(strict_low_part (subreg:M (reg:N R) 0))'
   9506      This expression code is used in only one context: as the
   9507      destination operand of a `set' expression.  In addition, the
   9508      operand of this expression must be a non-paradoxical `subreg'
   9509      expression.
   9510 
   9511      The presence of `strict_low_part' says that the part of the
   9512      register which is meaningful in mode N, but is not part of mode M,
   9513      is not to be altered.  Normally, an assignment to such a subreg is
   9514      allowed to have undefined effects on the rest of the register when
   9515      M is less than a word.
   9516 
   9517 
   9518 File: gccint.info,  Node: Side Effects,  Next: Incdec,  Prev: RTL Declarations,  Up: RTL
   9519 
   9520 10.15 Side Effect Expressions
   9521 =============================
   9522 
   9523 The expression codes described so far represent values, not actions.
   9524 But machine instructions never produce values; they are meaningful only
   9525 for their side effects on the state of the machine.  Special expression
   9526 codes are used to represent side effects.
   9527 
   9528  The body of an instruction is always one of these side effect codes;
   9529 the codes described above, which represent values, appear only as the
   9530 operands of these.
   9531 
   9532 `(set LVAL X)'
   9533      Represents the action of storing the value of X into the place
   9534      represented by LVAL.  LVAL must be an expression representing a
   9535      place that can be stored in: `reg' (or `subreg', `strict_low_part'
   9536      or `zero_extract'), `mem', `pc', `parallel', or `cc0'.
   9537 
   9538      If LVAL is a `reg', `subreg' or `mem', it has a machine mode; then
   9539      X must be valid for that mode.
   9540 
   9541      If LVAL is a `reg' whose machine mode is less than the full width
   9542      of the register, then it means that the part of the register
   9543      specified by the machine mode is given the specified value and the
   9544      rest of the register receives an undefined value.  Likewise, if
   9545      LVAL is a `subreg' whose machine mode is narrower than the mode of
   9546      the register, the rest of the register can be changed in an
   9547      undefined way.
   9548 
   9549      If LVAL is a `strict_low_part' of a subreg, then the part of the
   9550      register specified by the machine mode of the `subreg' is given
   9551      the value X and the rest of the register is not changed.
   9552 
   9553      If LVAL is a `zero_extract', then the referenced part of the
   9554      bit-field (a memory or register reference) specified by the
   9555      `zero_extract' is given the value X and the rest of the bit-field
   9556      is not changed.  Note that `sign_extract' can not appear in LVAL.
   9557 
   9558      If LVAL is `(cc0)', it has no machine mode, and X may be either a
   9559      `compare' expression or a value that may have any mode.  The
   9560      latter case represents a "test" instruction.  The expression `(set
   9561      (cc0) (reg:M N))' is equivalent to `(set (cc0) (compare (reg:M N)
   9562      (const_int 0)))'.  Use the former expression to save space during
   9563      the compilation.
   9564 
   9565      If LVAL is a `parallel', it is used to represent the case of a
   9566      function returning a structure in multiple registers.  Each element
   9567      of the `parallel' is an `expr_list' whose first operand is a `reg'
   9568      and whose second operand is a `const_int' representing the offset
   9569      (in bytes) into the structure at which the data in that register
   9570      corresponds.  The first element may be null to indicate that the
   9571      structure is also passed partly in memory.
   9572 
   9573      If LVAL is `(pc)', we have a jump instruction, and the
   9574      possibilities for X are very limited.  It may be a `label_ref'
   9575      expression (unconditional jump).  It may be an `if_then_else'
   9576      (conditional jump), in which case either the second or the third
   9577      operand must be `(pc)' (for the case which does not jump) and the
   9578      other of the two must be a `label_ref' (for the case which does
   9579      jump).  X may also be a `mem' or `(plus:SI (pc) Y)', where Y may
   9580      be a `reg' or a `mem'; these unusual patterns are used to
   9581      represent jumps through branch tables.
   9582 
   9583      If LVAL is neither `(cc0)' nor `(pc)', the mode of LVAL must not
   9584      be `VOIDmode' and the mode of X must be valid for the mode of LVAL.
   9585 
   9586      LVAL is customarily accessed with the `SET_DEST' macro and X with
   9587      the `SET_SRC' macro.
   9588 
   9589 `(return)'
   9590      As the sole expression in a pattern, represents a return from the
   9591      current function, on machines where this can be done with one
   9592      instruction, such as VAXen.  On machines where a multi-instruction
   9593      "epilogue" must be executed in order to return from the function,
   9594      returning is done by jumping to a label which precedes the
   9595      epilogue, and the `return' expression code is never used.
   9596 
   9597      Inside an `if_then_else' expression, represents the value to be
   9598      placed in `pc' to return to the caller.
   9599 
   9600      Note that an insn pattern of `(return)' is logically equivalent to
   9601      `(set (pc) (return))', but the latter form is never used.
   9602 
   9603 `(call FUNCTION NARGS)'
   9604      Represents a function call.  FUNCTION is a `mem' expression whose
   9605      address is the address of the function to be called.  NARGS is an
   9606      expression which can be used for two purposes: on some machines it
   9607      represents the number of bytes of stack argument; on others, it
   9608      represents the number of argument registers.
   9609 
   9610      Each machine has a standard machine mode which FUNCTION must have.
   9611      The machine description defines macro `FUNCTION_MODE' to expand
   9612      into the requisite mode name.  The purpose of this mode is to
   9613      specify what kind of addressing is allowed, on machines where the
   9614      allowed kinds of addressing depend on the machine mode being
   9615      addressed.
   9616 
   9617 `(clobber X)'
   9618      Represents the storing or possible storing of an unpredictable,
   9619      undescribed value into X, which must be a `reg', `scratch',
   9620      `parallel' or `mem' expression.
   9621 
   9622      One place this is used is in string instructions that store
   9623      standard values into particular hard registers.  It may not be
   9624      worth the trouble to describe the values that are stored, but it
   9625      is essential to inform the compiler that the registers will be
   9626      altered, lest it attempt to keep data in them across the string
   9627      instruction.
   9628 
   9629      If X is `(mem:BLK (const_int 0))' or `(mem:BLK (scratch))', it
   9630      means that all memory locations must be presumed clobbered.  If X
   9631      is a `parallel', it has the same meaning as a `parallel' in a
   9632      `set' expression.
   9633 
   9634      Note that the machine description classifies certain hard
   9635      registers as "call-clobbered".  All function call instructions are
   9636      assumed by default to clobber these registers, so there is no need
   9637      to use `clobber' expressions to indicate this fact.  Also, each
   9638      function call is assumed to have the potential to alter any memory
   9639      location, unless the function is declared `const'.
   9640 
   9641      If the last group of expressions in a `parallel' are each a
   9642      `clobber' expression whose arguments are `reg' or `match_scratch'
   9643      (*note RTL Template::) expressions, the combiner phase can add the
   9644      appropriate `clobber' expressions to an insn it has constructed
   9645      when doing so will cause a pattern to be matched.
   9646 
   9647      This feature can be used, for example, on a machine that whose
   9648      multiply and add instructions don't use an MQ register but which
   9649      has an add-accumulate instruction that does clobber the MQ
   9650      register.  Similarly, a combined instruction might require a
   9651      temporary register while the constituent instructions might not.
   9652 
   9653      When a `clobber' expression for a register appears inside a
   9654      `parallel' with other side effects, the register allocator
   9655      guarantees that the register is unoccupied both before and after
   9656      that insn if it is a hard register clobber.  For pseudo-register
   9657      clobber, the register allocator and the reload pass do not assign
   9658      the same hard register to the clobber and the input operands if
   9659      there is an insn alternative containing the `&' constraint (*note
   9660      Modifiers::) for the clobber and the hard register is in register
   9661      classes of the clobber in the alternative.  You can clobber either
   9662      a specific hard register, a pseudo register, or a `scratch'
   9663      expression; in the latter two cases, GCC will allocate a hard
   9664      register that is available there for use as a temporary.
   9665 
   9666      For instructions that require a temporary register, you should use
   9667      `scratch' instead of a pseudo-register because this will allow the
   9668      combiner phase to add the `clobber' when required.  You do this by
   9669      coding (`clobber' (`match_scratch' ...)).  If you do clobber a
   9670      pseudo register, use one which appears nowhere else--generate a
   9671      new one each time.  Otherwise, you may confuse CSE.
   9672 
   9673      There is one other known use for clobbering a pseudo register in a
   9674      `parallel': when one of the input operands of the insn is also
   9675      clobbered by the insn.  In this case, using the same pseudo
   9676      register in the clobber and elsewhere in the insn produces the
   9677      expected results.
   9678 
   9679 `(use X)'
   9680      Represents the use of the value of X.  It indicates that the value
   9681      in X at this point in the program is needed, even though it may
   9682      not be apparent why this is so.  Therefore, the compiler will not
   9683      attempt to delete previous instructions whose only effect is to
   9684      store a value in X.  X must be a `reg' expression.
   9685 
   9686      In some situations, it may be tempting to add a `use' of a
   9687      register in a `parallel' to describe a situation where the value
   9688      of a special register will modify the behavior of the instruction.
   9689      A hypothetical example might be a pattern for an addition that can
   9690      either wrap around or use saturating addition depending on the
   9691      value of a special control register:
   9692 
   9693           (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3)
   9694                                                  (reg:SI 4)] 0))
   9695                      (use (reg:SI 1))])
   9696 
   9697      This will not work, several of the optimizers only look at
   9698      expressions locally; it is very likely that if you have multiple
   9699      insns with identical inputs to the `unspec', they will be
   9700      optimized away even if register 1 changes in between.
   9701 
   9702      This means that `use' can _only_ be used to describe that the
   9703      register is live.  You should think twice before adding `use'
   9704      statements, more often you will want to use `unspec' instead.  The
   9705      `use' RTX is most commonly useful to describe that a fixed
   9706      register is implicitly used in an insn.  It is also safe to use in
   9707      patterns where the compiler knows for other reasons that the result
   9708      of the whole pattern is variable, such as `movmemM' or `call'
   9709      patterns.
   9710 
   9711      During the reload phase, an insn that has a `use' as pattern can
   9712      carry a reg_equal note.  These `use' insns will be deleted before
   9713      the reload phase exits.
   9714 
   9715      During the delayed branch scheduling phase, X may be an insn.
   9716      This indicates that X previously was located at this place in the
   9717      code and its data dependencies need to be taken into account.
   9718      These `use' insns will be deleted before the delayed branch
   9719      scheduling phase exits.
   9720 
   9721 `(parallel [X0 X1 ...])'
   9722      Represents several side effects performed in parallel.  The square
   9723      brackets stand for a vector; the operand of `parallel' is a vector
   9724      of expressions.  X0, X1 and so on are individual side effect
   9725      expressions--expressions of code `set', `call', `return',
   9726      `clobber' or `use'.
   9727 
   9728      "In parallel" means that first all the values used in the
   9729      individual side-effects are computed, and second all the actual
   9730      side-effects are performed.  For example,
   9731 
   9732           (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
   9733                      (set (mem:SI (reg:SI 1)) (reg:SI 1))])
   9734 
   9735      says unambiguously that the values of hard register 1 and the
   9736      memory location addressed by it are interchanged.  In both places
   9737      where `(reg:SI 1)' appears as a memory address it refers to the
   9738      value in register 1 _before_ the execution of the insn.
   9739 
   9740      It follows that it is _incorrect_ to use `parallel' and expect the
   9741      result of one `set' to be available for the next one.  For
   9742      example, people sometimes attempt to represent a jump-if-zero
   9743      instruction this way:
   9744 
   9745           (parallel [(set (cc0) (reg:SI 34))
   9746                      (set (pc) (if_then_else
   9747                                   (eq (cc0) (const_int 0))
   9748                                   (label_ref ...)
   9749                                   (pc)))])
   9750 
   9751      But this is incorrect, because it says that the jump condition
   9752      depends on the condition code value _before_ this instruction, not
   9753      on the new value that is set by this instruction.
   9754 
   9755      Peephole optimization, which takes place together with final
   9756      assembly code output, can produce insns whose patterns consist of
   9757      a `parallel' whose elements are the operands needed to output the
   9758      resulting assembler code--often `reg', `mem' or constant
   9759      expressions.  This would not be well-formed RTL at any other stage
   9760      in compilation, but it is ok then because no further optimization
   9761      remains to be done.  However, the definition of the macro
   9762      `NOTICE_UPDATE_CC', if any, must deal with such insns if you
   9763      define any peephole optimizations.
   9764 
   9765 `(cond_exec [COND EXPR])'
   9766      Represents a conditionally executed expression.  The EXPR is
   9767      executed only if the COND is nonzero.  The COND expression must
   9768      not have side-effects, but the EXPR may very well have
   9769      side-effects.
   9770 
   9771 `(sequence [INSNS ...])'
   9772      Represents a sequence of insns.  Each of the INSNS that appears in
   9773      the vector is suitable for appearing in the chain of insns, so it
   9774      must be an `insn', `jump_insn', `call_insn', `code_label',
   9775      `barrier' or `note'.
   9776 
   9777      A `sequence' RTX is never placed in an actual insn during RTL
   9778      generation.  It represents the sequence of insns that result from a
   9779      `define_expand' _before_ those insns are passed to `emit_insn' to
   9780      insert them in the chain of insns.  When actually inserted, the
   9781      individual sub-insns are separated out and the `sequence' is
   9782      forgotten.
   9783 
   9784      After delay-slot scheduling is completed, an insn and all the
   9785      insns that reside in its delay slots are grouped together into a
   9786      `sequence'.  The insn requiring the delay slot is the first insn
   9787      in the vector; subsequent insns are to be placed in the delay slot.
   9788 
   9789      `INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to
   9790      indicate that a branch insn should be used that will conditionally
   9791      annul the effect of the insns in the delay slots.  In such a case,
   9792      `INSN_FROM_TARGET_P' indicates that the insn is from the target of
   9793      the branch and should be executed only if the branch is taken;
   9794      otherwise the insn should be executed only if the branch is not
   9795      taken.  *Note Delay Slots::.
   9796 
   9797  These expression codes appear in place of a side effect, as the body of
   9798 an insn, though strictly speaking they do not always describe side
   9799 effects as such:
   9800 
   9801 `(asm_input S)'
   9802      Represents literal assembler code as described by the string S.
   9803 
   9804 `(unspec [OPERANDS ...] INDEX)'
   9805 `(unspec_volatile [OPERANDS ...] INDEX)'
   9806      Represents a machine-specific operation on OPERANDS.  INDEX
   9807      selects between multiple machine-specific operations.
   9808      `unspec_volatile' is used for volatile operations and operations
   9809      that may trap; `unspec' is used for other operations.
   9810 
   9811      These codes may appear inside a `pattern' of an insn, inside a
   9812      `parallel', or inside an expression.
   9813 
   9814 `(addr_vec:M [LR0 LR1 ...])'
   9815      Represents a table of jump addresses.  The vector elements LR0,
   9816      etc., are `label_ref' expressions.  The mode M specifies how much
   9817      space is given to each address; normally M would be `Pmode'.
   9818 
   9819 `(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)'
   9820      Represents a table of jump addresses expressed as offsets from
   9821      BASE.  The vector elements LR0, etc., are `label_ref' expressions
   9822      and so is BASE.  The mode M specifies how much space is given to
   9823      each address-difference.  MIN and MAX are set up by branch
   9824      shortening and hold a label with a minimum and a maximum address,
   9825      respectively.  FLAGS indicates the relative position of BASE, MIN
   9826      and MAX to the containing insn and of MIN and MAX to BASE.  See
   9827      rtl.def for details.
   9828 
   9829 `(prefetch:M ADDR RW LOCALITY)'
   9830      Represents prefetch of memory at address ADDR.  Operand RW is 1 if
   9831      the prefetch is for data to be written, 0 otherwise; targets that
   9832      do not support write prefetches should treat this as a normal
   9833      prefetch.  Operand LOCALITY specifies the amount of temporal
   9834      locality; 0 if there is none or 1, 2, or 3 for increasing levels
   9835      of temporal locality; targets that do not support locality hints
   9836      should ignore this.
   9837 
   9838      This insn is used to minimize cache-miss latency by moving data
   9839      into a cache before it is accessed.  It should use only
   9840      non-faulting data prefetch instructions.
   9841 
   9842 
   9843 File: gccint.info,  Node: Incdec,  Next: Assembler,  Prev: Side Effects,  Up: RTL
   9844 
   9845 10.16 Embedded Side-Effects on Addresses
   9846 ========================================
   9847 
   9848 Six special side-effect expression codes appear as memory addresses.
   9849 
   9850 `(pre_dec:M X)'
   9851      Represents the side effect of decrementing X by a standard amount
   9852      and represents also the value that X has after being decremented.
   9853      X must be a `reg' or `mem', but most machines allow only a `reg'.
   9854      M must be the machine mode for pointers on the machine in use.
   9855      The amount X is decremented by is the length in bytes of the
   9856      machine mode of the containing memory reference of which this
   9857      expression serves as the address.  Here is an example of its use:
   9858 
   9859           (mem:DF (pre_dec:SI (reg:SI 39)))
   9860 
   9861      This says to decrement pseudo register 39 by the length of a
   9862      `DFmode' value and use the result to address a `DFmode' value.
   9863 
   9864 `(pre_inc:M X)'
   9865      Similar, but specifies incrementing X instead of decrementing it.
   9866 
   9867 `(post_dec:M X)'
   9868      Represents the same side effect as `pre_dec' but a different
   9869      value.  The value represented here is the value X has before being
   9870      decremented.
   9871 
   9872 `(post_inc:M X)'
   9873      Similar, but specifies incrementing X instead of decrementing it.
   9874 
   9875 `(post_modify:M X Y)'
   9876      Represents the side effect of setting X to Y and represents X
   9877      before X is modified.  X must be a `reg' or `mem', but most
   9878      machines allow only a `reg'.  M must be the machine mode for
   9879      pointers on the machine in use.
   9880 
   9881      The expression Y must be one of three forms: `(plus:M X Z)',
   9882      `(minus:M X Z)', or `(plus:M X I)', where Z is an index register
   9883      and I is a constant.
   9884 
   9885      Here is an example of its use:
   9886 
   9887           (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42)
   9888                                                     (reg:SI 48))))
   9889 
   9890      This says to modify pseudo register 42 by adding the contents of
   9891      pseudo register 48 to it, after the use of what ever 42 points to.
   9892 
   9893 `(pre_modify:M X EXPR)'
   9894      Similar except side effects happen before the use.
   9895 
   9896  These embedded side effect expressions must be used with care.
   9897 Instruction patterns may not use them.  Until the `flow' pass of the
   9898 compiler, they may occur only to represent pushes onto the stack.  The
   9899 `flow' pass finds cases where registers are incremented or decremented
   9900 in one instruction and used as an address shortly before or after;
   9901 these cases are then transformed to use pre- or post-increment or
   9902 -decrement.
   9903 
   9904  If a register used as the operand of these expressions is used in
   9905 another address in an insn, the original value of the register is used.
   9906 Uses of the register outside of an address are not permitted within the
   9907 same insn as a use in an embedded side effect expression because such
   9908 insns behave differently on different machines and hence must be treated
   9909 as ambiguous and disallowed.
   9910 
   9911  An instruction that can be represented with an embedded side effect
   9912 could also be represented using `parallel' containing an additional
   9913 `set' to describe how the address register is altered.  This is not
   9914 done because machines that allow these operations at all typically
   9915 allow them wherever a memory address is called for.  Describing them as
   9916 additional parallel stores would require doubling the number of entries
   9917 in the machine description.
   9918 
   9919 
   9920 File: gccint.info,  Node: Assembler,  Next: Debug Information,  Prev: Incdec,  Up: RTL
   9921 
   9922 10.17 Assembler Instructions as Expressions
   9923 ===========================================
   9924 
   9925 The RTX code `asm_operands' represents a value produced by a
   9926 user-specified assembler instruction.  It is used to represent an `asm'
   9927 statement with arguments.  An `asm' statement with a single output
   9928 operand, like this:
   9929 
   9930      asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
   9931 
   9932 is represented using a single `asm_operands' RTX which represents the
   9933 value that is stored in `outputvar':
   9934 
   9935      (set RTX-FOR-OUTPUTVAR
   9936           (asm_operands "foo %1,%2,%0" "a" 0
   9937                         [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z]
   9938                         [(asm_input:M1 "g")
   9939                          (asm_input:M2 "di")]))
   9940 
   9941 Here the operands of the `asm_operands' RTX are the assembler template
   9942 string, the output-operand's constraint, the index-number of the output
   9943 operand among the output operands specified, a vector of input operand
   9944 RTX's, and a vector of input-operand modes and constraints.  The mode
   9945 M1 is the mode of the sum `x+y'; M2 is that of `*z'.
   9946 
   9947  When an `asm' statement has multiple output values, its insn has
   9948 several such `set' RTX's inside of a `parallel'.  Each `set' contains
   9949 an `asm_operands'; all of these share the same assembler template and
   9950 vectors, but each contains the constraint for the respective output
   9951 operand.  They are also distinguished by the output-operand index
   9952 number, which is 0, 1, ... for successive output operands.
   9953 
   9954 
   9955 File: gccint.info,  Node: Debug Information,  Next: Insns,  Prev: Assembler,  Up: RTL
   9956 
   9957 10.18 Variable Location Debug Information in RTL
   9958 ================================================
   9959 
   9960 Variable tracking relies on `MEM_EXPR' and `REG_EXPR' annotations to
   9961 determine what user variables memory and register references refer to.
   9962 
   9963  Variable tracking at assignments uses these notes only when they refer
   9964 to variables that live at fixed locations (e.g., addressable variables,
   9965 global non-automatic variables).  For variables whose location may
   9966 vary, it relies on the following types of notes.
   9967 
   9968 `(var_location:MODE VAR EXP STAT)'
   9969      Binds variable `var', a tree, to value EXP, an RTL expression.  It
   9970      appears only in `NOTE_INSN_VAR_LOCATION' and `DEBUG_INSN's, with
   9971      slightly different meanings.  MODE, if present, represents the
   9972      mode of EXP, which is useful if it is a modeless expression.  STAT
   9973      is only meaningful in notes, indicating whether the variable is
   9974      known to be initialized or uninitialized.
   9975 
   9976 `(debug_expr:MODE DECL)'
   9977      Stands for the value bound to the `DEBUG_EXPR_DECL' DECL, that
   9978      points back to it, within value expressions in `VAR_LOCATION'
   9979      nodes.
   9980 
   9981 
   9982 
   9983 File: gccint.info,  Node: Insns,  Next: Calls,  Prev: Debug Information,  Up: RTL
   9984 
   9985 10.19 Insns
   9986 ===========
   9987 
   9988 The RTL representation of the code for a function is a doubly-linked
   9989 chain of objects called "insns".  Insns are expressions with special
   9990 codes that are used for no other purpose.  Some insns are actual
   9991 instructions; others represent dispatch tables for `switch' statements;
   9992 others represent labels to jump to or various sorts of declarative
   9993 information.
   9994 
   9995  In addition to its own specific data, each insn must have a unique
   9996 id-number that distinguishes it from all other insns in the current
   9997 function (after delayed branch scheduling, copies of an insn with the
   9998 same id-number may be present in multiple places in a function, but
   9999 these copies will always be identical and will only appear inside a
   10000 `sequence'), and chain pointers to the preceding and following insns.
   10001 These three fields occupy the same position in every insn, independent
   10002 of the expression code of the insn.  They could be accessed with `XEXP'
   10003 and `XINT', but instead three special macros are always used:
   10004 
   10005 `INSN_UID (I)'
   10006      Accesses the unique id of insn I.
   10007 
   10008 `PREV_INSN (I)'
   10009      Accesses the chain pointer to the insn preceding I.  If I is the
   10010      first insn, this is a null pointer.
   10011 
   10012 `NEXT_INSN (I)'
   10013      Accesses the chain pointer to the insn following I.  If I is the
   10014      last insn, this is a null pointer.
   10015 
   10016  The first insn in the chain is obtained by calling `get_insns'; the
   10017 last insn is the result of calling `get_last_insn'.  Within the chain
   10018 delimited by these insns, the `NEXT_INSN' and `PREV_INSN' pointers must
   10019 always correspond: if INSN is not the first insn,
   10020 
   10021      NEXT_INSN (PREV_INSN (INSN)) == INSN
   10022 
   10023 is always true and if INSN is not the last insn,
   10024 
   10025      PREV_INSN (NEXT_INSN (INSN)) == INSN
   10026 
   10027 is always true.
   10028 
   10029  After delay slot scheduling, some of the insns in the chain might be
   10030 `sequence' expressions, which contain a vector of insns.  The value of
   10031 `NEXT_INSN' in all but the last of these insns is the next insn in the
   10032 vector; the value of `NEXT_INSN' of the last insn in the vector is the
   10033 same as the value of `NEXT_INSN' for the `sequence' in which it is
   10034 contained.  Similar rules apply for `PREV_INSN'.
   10035 
   10036  This means that the above invariants are not necessarily true for insns
   10037 inside `sequence' expressions.  Specifically, if INSN is the first insn
   10038 in a `sequence', `NEXT_INSN (PREV_INSN (INSN))' is the insn containing
   10039 the `sequence' expression, as is the value of `PREV_INSN (NEXT_INSN
   10040 (INSN))' if INSN is the last insn in the `sequence' expression.  You
   10041 can use these expressions to find the containing `sequence' expression.
   10042 
   10043  Every insn has one of the following expression codes:
   10044 
   10045 `insn'
   10046      The expression code `insn' is used for instructions that do not
   10047      jump and do not do function calls.  `sequence' expressions are
   10048      always contained in insns with code `insn' even if one of those
   10049      insns should jump or do function calls.
   10050 
   10051      Insns with code `insn' have four additional fields beyond the three
   10052      mandatory ones listed above.  These four are described in a table
   10053      below.
   10054 
   10055 `jump_insn'
   10056      The expression code `jump_insn' is used for instructions that may
   10057      jump (or, more generally, may contain `label_ref' expressions to
   10058      which `pc' can be set in that instruction).  If there is an
   10059      instruction to return from the current function, it is recorded as
   10060      a `jump_insn'.
   10061 
   10062      `jump_insn' insns have the same extra fields as `insn' insns,
   10063      accessed in the same way and in addition contain a field
   10064      `JUMP_LABEL' which is defined once jump optimization has completed.
   10065 
   10066      For simple conditional and unconditional jumps, this field contains
   10067      the `code_label' to which this insn will (possibly conditionally)
   10068      branch.  In a more complex jump, `JUMP_LABEL' records one of the
   10069      labels that the insn refers to; other jump target labels are
   10070      recorded as `REG_LABEL_TARGET' notes.  The exception is `addr_vec'
   10071      and `addr_diff_vec', where `JUMP_LABEL' is `NULL_RTX' and the only
   10072      way to find the labels is to scan the entire body of the insn.
   10073 
   10074      Return insns count as jumps, but since they do not refer to any
   10075      labels, their `JUMP_LABEL' is `NULL_RTX'.
   10076 
   10077 `call_insn'
   10078      The expression code `call_insn' is used for instructions that may
   10079      do function calls.  It is important to distinguish these
   10080      instructions because they imply that certain registers and memory
   10081      locations may be altered unpredictably.
   10082 
   10083      `call_insn' insns have the same extra fields as `insn' insns,
   10084      accessed in the same way and in addition contain a field
   10085      `CALL_INSN_FUNCTION_USAGE', which contains a list (chain of
   10086      `expr_list' expressions) containing `use' and `clobber'
   10087      expressions that denote hard registers and `MEM's used or
   10088      clobbered by the called function.
   10089 
   10090      A `MEM' generally points to a stack slots in which arguments passed
   10091      to the libcall by reference (*note TARGET_PASS_BY_REFERENCE:
   10092      Register Arguments.) are stored.  If the argument is caller-copied
   10093      (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot
   10094      will be mentioned in `CLOBBER' and `USE' entries; if it's
   10095      callee-copied, only a `USE' will appear, and the `MEM' may point
   10096      to addresses that are not stack slots.
   10097 
   10098      `CLOBBER'ed registers in this list augment registers specified in
   10099      `CALL_USED_REGISTERS' (*note Register Basics::).
   10100 
   10101 `code_label'
   10102      A `code_label' insn represents a label that a jump insn can jump
   10103      to.  It contains two special fields of data in addition to the
   10104      three standard ones.  `CODE_LABEL_NUMBER' is used to hold the
   10105      "label number", a number that identifies this label uniquely among
   10106      all the labels in the compilation (not just in the current
   10107      function).  Ultimately, the label is represented in the assembler
   10108      output as an assembler label, usually of the form `LN' where N is
   10109      the label number.
   10110 
   10111      When a `code_label' appears in an RTL expression, it normally
   10112      appears within a `label_ref' which represents the address of the
   10113      label, as a number.
   10114 
   10115      Besides as a `code_label', a label can also be represented as a
   10116      `note' of type `NOTE_INSN_DELETED_LABEL'.
   10117 
   10118      The field `LABEL_NUSES' is only defined once the jump optimization
   10119      phase is completed.  It contains the number of times this label is
   10120      referenced in the current function.
   10121 
   10122      The field `LABEL_KIND' differentiates four different types of
   10123      labels: `LABEL_NORMAL', `LABEL_STATIC_ENTRY',
   10124      `LABEL_GLOBAL_ENTRY', and `LABEL_WEAK_ENTRY'.  The only labels
   10125      that do not have type `LABEL_NORMAL' are "alternate entry points"
   10126      to the current function.  These may be static (visible only in the
   10127      containing translation unit), global (exposed to all translation
   10128      units), or weak (global, but can be overridden by another symbol
   10129      with the same name).
   10130 
   10131      Much of the compiler treats all four kinds of label identically.
   10132      Some of it needs to know whether or not a label is an alternate
   10133      entry point; for this purpose, the macro `LABEL_ALT_ENTRY_P' is
   10134      provided.  It is equivalent to testing whether `LABEL_KIND (label)
   10135      == LABEL_NORMAL'.  The only place that cares about the distinction
   10136      between static, global, and weak alternate entry points, besides
   10137      the front-end code that creates them, is the function
   10138      `output_alternate_entry_point', in `final.c'.
   10139 
   10140      To set the kind of a label, use the `SET_LABEL_KIND' macro.
   10141 
   10142 `barrier'
   10143      Barriers are placed in the instruction stream when control cannot
   10144      flow past them.  They are placed after unconditional jump
   10145      instructions to indicate that the jumps are unconditional and
   10146      after calls to `volatile' functions, which do not return (e.g.,
   10147      `exit').  They contain no information beyond the three standard
   10148      fields.
   10149 
   10150 `note'
   10151      `note' insns are used to represent additional debugging and
   10152      declarative information.  They contain two nonstandard fields, an
   10153      integer which is accessed with the macro `NOTE_LINE_NUMBER' and a
   10154      string accessed with `NOTE_SOURCE_FILE'.
   10155 
   10156      If `NOTE_LINE_NUMBER' is positive, the note represents the
   10157      position of a source line and `NOTE_SOURCE_FILE' is the source
   10158      file name that the line came from.  These notes control generation
   10159      of line number data in the assembler output.
   10160 
   10161      Otherwise, `NOTE_LINE_NUMBER' is not really a line number but a
   10162      code with one of the following values (and `NOTE_SOURCE_FILE' must
   10163      contain a null pointer):
   10164 
   10165     `NOTE_INSN_DELETED'
   10166           Such a note is completely ignorable.  Some passes of the
   10167           compiler delete insns by altering them into notes of this
   10168           kind.
   10169 
   10170     `NOTE_INSN_DELETED_LABEL'
   10171           This marks what used to be a `code_label', but was not used
   10172           for other purposes than taking its address and was
   10173           transformed to mark that no code jumps to it.
   10174 
   10175     `NOTE_INSN_BLOCK_BEG'
   10176     `NOTE_INSN_BLOCK_END'
   10177           These types of notes indicate the position of the beginning
   10178           and end of a level of scoping of variable names.  They
   10179           control the output of debugging information.
   10180 
   10181     `NOTE_INSN_EH_REGION_BEG'
   10182     `NOTE_INSN_EH_REGION_END'
   10183           These types of notes indicate the position of the beginning
   10184           and end of a level of scoping for exception handling.
   10185           `NOTE_BLOCK_NUMBER' identifies which `CODE_LABEL' or `note'
   10186           of type `NOTE_INSN_DELETED_LABEL' is associated with the
   10187           given region.
   10188 
   10189     `NOTE_INSN_LOOP_BEG'
   10190     `NOTE_INSN_LOOP_END'
   10191           These types of notes indicate the position of the beginning
   10192           and end of a `while' or `for' loop.  They enable the loop
   10193           optimizer to find loops quickly.
   10194 
   10195     `NOTE_INSN_LOOP_CONT'
   10196           Appears at the place in a loop that `continue' statements
   10197           jump to.
   10198 
   10199     `NOTE_INSN_LOOP_VTOP'
   10200           This note indicates the place in a loop where the exit test
   10201           begins for those loops in which the exit test has been
   10202           duplicated.  This position becomes another virtual start of
   10203           the loop when considering loop invariants.
   10204 
   10205     `NOTE_INSN_FUNCTION_BEG'
   10206           Appears at the start of the function body, after the function
   10207           prologue.
   10208 
   10209     `NOTE_INSN_VAR_LOCATION'
   10210           This note is used to generate variable location debugging
   10211           information.  It indicates that the user variable in its
   10212           `VAR_LOCATION' operand is at the location given in the RTL
   10213           expression, or holds a value that can be computed by
   10214           evaluating the RTL expression from that static point in the
   10215           program up to the next such note for the same user variable.
   10216 
   10217 
   10218      These codes are printed symbolically when they appear in debugging
   10219      dumps.
   10220 
   10221 `debug_insn'
   10222      The expression code `debug_insn' is used for pseudo-instructions
   10223      that hold debugging information for variable tracking at
   10224      assignments (see `-fvar-tracking-assignments' option).  They are
   10225      the RTL representation of `GIMPLE_DEBUG' statements (*note
   10226      `GIMPLE_DEBUG'::), with a `VAR_LOCATION' operand that binds a user
   10227      variable tree to an RTL representation of the `value' in the
   10228      corresponding statement.  A `DEBUG_EXPR' in it stands for the
   10229      value bound to the corresponding `DEBUG_EXPR_DECL'.
   10230 
   10231      Throughout optimization passes, binding information is kept in
   10232      pseudo-instruction form, so that, unlike notes, it gets the same
   10233      treatment and adjustments that regular instructions would.  It is
   10234      the variable tracking pass that turns these pseudo-instructions
   10235      into var location notes, analyzing control flow, value
   10236      equivalences and changes to registers and memory referenced in
   10237      value expressions, propagating the values of debug temporaries and
   10238      determining expressions that can be used to compute the value of
   10239      each user variable at as many points (ranges, actually) in the
   10240      program as possible.
   10241 
   10242      Unlike `NOTE_INSN_VAR_LOCATION', the value expression in an
   10243      `INSN_VAR_LOCATION' denotes a value at that specific point in the
   10244      program, rather than an expression that can be evaluated at any
   10245      later point before an overriding `VAR_LOCATION' is encountered.
   10246      E.g., if a user variable is bound to a `REG' and then a subsequent
   10247      insn modifies the `REG', the note location would keep mapping the
   10248      user variable to the register across the insn, whereas the insn
   10249      location would keep the variable bound to the value, so that the
   10250      variable tracking pass would emit another location note for the
   10251      variable at the point in which the register is modified.
   10252 
   10253 
   10254  The machine mode of an insn is normally `VOIDmode', but some phases
   10255 use the mode for various purposes.
   10256 
   10257  The common subexpression elimination pass sets the mode of an insn to
   10258 `QImode' when it is the first insn in a block that has already been
   10259 processed.
   10260 
   10261  The second Haifa scheduling pass, for targets that can multiple issue,
   10262 sets the mode of an insn to `TImode' when it is believed that the
   10263 instruction begins an issue group.  That is, when the instruction
   10264 cannot issue simultaneously with the previous.  This may be relied on
   10265 by later passes, in particular machine-dependent reorg.
   10266 
   10267  Here is a table of the extra fields of `insn', `jump_insn' and
   10268 `call_insn' insns:
   10269 
   10270 `PATTERN (I)'
   10271      An expression for the side effect performed by this insn.  This
   10272      must be one of the following codes: `set', `call', `use',
   10273      `clobber', `return', `asm_input', `asm_output', `addr_vec',
   10274      `addr_diff_vec', `trap_if', `unspec', `unspec_volatile',
   10275      `parallel', `cond_exec', or `sequence'.  If it is a `parallel',
   10276      each element of the `parallel' must be one these codes, except that
   10277      `parallel' expressions cannot be nested and `addr_vec' and
   10278      `addr_diff_vec' are not permitted inside a `parallel' expression.
   10279 
   10280 `INSN_CODE (I)'
   10281      An integer that says which pattern in the machine description
   10282      matches this insn, or -1 if the matching has not yet been
   10283      attempted.
   10284 
   10285      Such matching is never attempted and this field remains -1 on an
   10286      insn whose pattern consists of a single `use', `clobber',
   10287      `asm_input', `addr_vec' or `addr_diff_vec' expression.
   10288 
   10289      Matching is also never attempted on insns that result from an `asm'
   10290      statement.  These contain at least one `asm_operands' expression.
   10291      The function `asm_noperands' returns a non-negative value for such
   10292      insns.
   10293 
   10294      In the debugging output, this field is printed as a number
   10295      followed by a symbolic representation that locates the pattern in
   10296      the `md' file as some small positive or negative offset from a
   10297      named pattern.
   10298 
   10299 `LOG_LINKS (I)'
   10300      A list (chain of `insn_list' expressions) giving information about
   10301      dependencies between instructions within a basic block.  Neither a
   10302      jump nor a label may come between the related insns.  These are
   10303      only used by the schedulers and by combine.  This is a deprecated
   10304      data structure.  Def-use and use-def chains are now preferred.
   10305 
   10306 `REG_NOTES (I)'
   10307      A list (chain of `expr_list' and `insn_list' expressions) giving
   10308      miscellaneous information about the insn.  It is often information
   10309      pertaining to the registers used in this insn.
   10310 
   10311  The `LOG_LINKS' field of an insn is a chain of `insn_list'
   10312 expressions.  Each of these has two operands: the first is an insn, and
   10313 the second is another `insn_list' expression (the next one in the
   10314 chain).  The last `insn_list' in the chain has a null pointer as second
   10315 operand.  The significant thing about the chain is which insns appear
   10316 in it (as first operands of `insn_list' expressions).  Their order is
   10317 not significant.
   10318 
   10319  This list is originally set up by the flow analysis pass; it is a null
   10320 pointer until then.  Flow only adds links for those data dependencies
   10321 which can be used for instruction combination.  For each insn, the flow
   10322 analysis pass adds a link to insns which store into registers values
   10323 that are used for the first time in this insn.
   10324 
   10325  The `REG_NOTES' field of an insn is a chain similar to the `LOG_LINKS'
   10326 field but it includes `expr_list' expressions in addition to
   10327 `insn_list' expressions.  There are several kinds of register notes,
   10328 which are distinguished by the machine mode, which in a register note
   10329 is really understood as being an `enum reg_note'.  The first operand OP
   10330 of the note is data whose meaning depends on the kind of note.
   10331 
   10332  The macro `REG_NOTE_KIND (X)' returns the kind of register note.  Its
   10333 counterpart, the macro `PUT_REG_NOTE_KIND (X, NEWKIND)' sets the
   10334 register note type of X to be NEWKIND.
   10335 
   10336  Register notes are of three classes: They may say something about an
   10337 input to an insn, they may say something about an output of an insn, or
   10338 they may create a linkage between two insns.  There are also a set of
   10339 values that are only used in `LOG_LINKS'.
   10340 
   10341  These register notes annotate inputs to an insn:
   10342 
   10343 `REG_DEAD'
   10344      The value in OP dies in this insn; that is to say, altering the
   10345      value immediately after this insn would not affect the future
   10346      behavior of the program.
   10347 
   10348      It does not follow that the register OP has no useful value after
   10349      this insn since OP is not necessarily modified by this insn.
   10350      Rather, no subsequent instruction uses the contents of OP.
   10351 
   10352 `REG_UNUSED'
   10353      The register OP being set by this insn will not be used in a
   10354      subsequent insn.  This differs from a `REG_DEAD' note, which
   10355      indicates that the value in an input will not be used subsequently.
   10356      These two notes are independent; both may be present for the same
   10357      register.
   10358 
   10359 `REG_INC'
   10360      The register OP is incremented (or decremented; at this level
   10361      there is no distinction) by an embedded side effect inside this
   10362      insn.  This means it appears in a `post_inc', `pre_inc',
   10363      `post_dec' or `pre_dec' expression.
   10364 
   10365 `REG_NONNEG'
   10366      The register OP is known to have a nonnegative value when this
   10367      insn is reached.  This is used so that decrement and branch until
   10368      zero instructions, such as the m68k dbra, can be matched.
   10369 
   10370      The `REG_NONNEG' note is added to insns only if the machine
   10371      description has a `decrement_and_branch_until_zero' pattern.
   10372 
   10373 `REG_LABEL_OPERAND'
   10374      This insn uses OP, a `code_label' or a `note' of type
   10375      `NOTE_INSN_DELETED_LABEL', but is not a `jump_insn', or it is a
   10376      `jump_insn' that refers to the operand as an ordinary operand.
   10377      The label may still eventually be a jump target, but if so in an
   10378      indirect jump in a subsequent insn.  The presence of this note
   10379      allows jump optimization to be aware that OP is, in fact, being
   10380      used, and flow optimization to build an accurate flow graph.
   10381 
   10382 `REG_LABEL_TARGET'
   10383      This insn is a `jump_insn' but not an `addr_vec' or
   10384      `addr_diff_vec'.  It uses OP, a `code_label' as a direct or
   10385      indirect jump target.  Its purpose is similar to that of
   10386      `REG_LABEL_OPERAND'.  This note is only present if the insn has
   10387      multiple targets; the last label in the insn (in the highest
   10388      numbered insn-field) goes into the `JUMP_LABEL' field and does not
   10389      have a `REG_LABEL_TARGET' note.  *Note JUMP_LABEL: Insns.
   10390 
   10391 `REG_CROSSING_JUMP'
   10392      This insn is a branching instruction (either an unconditional jump
   10393      or an indirect jump) which crosses between hot and cold sections,
   10394      which could potentially be very far apart in the executable.  The
   10395      presence of this note indicates to other optimizations that this
   10396      branching instruction should not be "collapsed" into a simpler
   10397      branching construct.  It is used when the optimization to
   10398      partition basic blocks into hot and cold sections is turned on.
   10399 
   10400 `REG_SETJMP'
   10401      Appears attached to each `CALL_INSN' to `setjmp' or a related
   10402      function.
   10403 
   10404  The following notes describe attributes of outputs of an insn:
   10405 
   10406 `REG_EQUIV'
   10407 `REG_EQUAL'
   10408      This note is only valid on an insn that sets only one register and
   10409      indicates that that register will be equal to OP at run time; the
   10410      scope of this equivalence differs between the two types of notes.
   10411      The value which the insn explicitly copies into the register may
   10412      look different from OP, but they will be equal at run time.  If the
   10413      output of the single `set' is a `strict_low_part' expression, the
   10414      note refers to the register that is contained in `SUBREG_REG' of
   10415      the `subreg' expression.
   10416 
   10417      For `REG_EQUIV', the register is equivalent to OP throughout the
   10418      entire function, and could validly be replaced in all its
   10419      occurrences by OP.  ("Validly" here refers to the data flow of the
   10420      program; simple replacement may make some insns invalid.)  For
   10421      example, when a constant is loaded into a register that is never
   10422      assigned any other value, this kind of note is used.
   10423 
   10424      When a parameter is copied into a pseudo-register at entry to a
   10425      function, a note of this kind records that the register is
   10426      equivalent to the stack slot where the parameter was passed.
   10427      Although in this case the register may be set by other insns, it
   10428      is still valid to replace the register by the stack slot
   10429      throughout the function.
   10430 
   10431      A `REG_EQUIV' note is also used on an instruction which copies a
   10432      register parameter into a pseudo-register at entry to a function,
   10433      if there is a stack slot where that parameter could be stored.
   10434      Although other insns may set the pseudo-register, it is valid for
   10435      the compiler to replace the pseudo-register by stack slot
   10436      throughout the function, provided the compiler ensures that the
   10437      stack slot is properly initialized by making the replacement in
   10438      the initial copy instruction as well.  This is used on machines
   10439      for which the calling convention allocates stack space for
   10440      register parameters.  See `REG_PARM_STACK_SPACE' in *note Stack
   10441      Arguments::.
   10442 
   10443      In the case of `REG_EQUAL', the register that is set by this insn
   10444      will be equal to OP at run time at the end of this insn but not
   10445      necessarily elsewhere in the function.  In this case, OP is
   10446      typically an arithmetic expression.  For example, when a sequence
   10447      of insns such as a library call is used to perform an arithmetic
   10448      operation, this kind of note is attached to the insn that produces
   10449      or copies the final value.
   10450 
   10451      These two notes are used in different ways by the compiler passes.
   10452      `REG_EQUAL' is used by passes prior to register allocation (such as
   10453      common subexpression elimination and loop optimization) to tell
   10454      them how to think of that value.  `REG_EQUIV' notes are used by
   10455      register allocation to indicate that there is an available
   10456      substitute expression (either a constant or a `mem' expression for
   10457      the location of a parameter on the stack) that may be used in
   10458      place of a register if insufficient registers are available.
   10459 
   10460      Except for stack homes for parameters, which are indicated by a
   10461      `REG_EQUIV' note and are not useful to the early optimization
   10462      passes and pseudo registers that are equivalent to a memory
   10463      location throughout their entire life, which is not detected until
   10464      later in the compilation, all equivalences are initially indicated
   10465      by an attached `REG_EQUAL' note.  In the early stages of register
   10466      allocation, a `REG_EQUAL' note is changed into a `REG_EQUIV' note
   10467      if OP is a constant and the insn represents the only set of its
   10468      destination register.
   10469 
   10470      Thus, compiler passes prior to register allocation need only check
   10471      for `REG_EQUAL' notes and passes subsequent to register allocation
   10472      need only check for `REG_EQUIV' notes.
   10473 
   10474  These notes describe linkages between insns.  They occur in pairs: one
   10475 insn has one of a pair of notes that points to a second insn, which has
   10476 the inverse note pointing back to the first insn.
   10477 
   10478 `REG_CC_SETTER'
   10479 `REG_CC_USER'
   10480      On machines that use `cc0', the insns which set and use `cc0' set
   10481      and use `cc0' are adjacent.  However, when branch delay slot
   10482      filling is done, this may no longer be true.  In this case a
   10483      `REG_CC_USER' note will be placed on the insn setting `cc0' to
   10484      point to the insn using `cc0' and a `REG_CC_SETTER' note will be
   10485      placed on the insn using `cc0' to point to the insn setting `cc0'.
   10486 
   10487  These values are only used in the `LOG_LINKS' field, and indicate the
   10488 type of dependency that each link represents.  Links which indicate a
   10489 data dependence (a read after write dependence) do not use any code,
   10490 they simply have mode `VOIDmode', and are printed without any
   10491 descriptive text.
   10492 
   10493 `REG_DEP_TRUE'
   10494      This indicates a true dependence (a read after write dependence).
   10495 
   10496 `REG_DEP_OUTPUT'
   10497      This indicates an output dependence (a write after write
   10498      dependence).
   10499 
   10500 `REG_DEP_ANTI'
   10501      This indicates an anti dependence (a write after read dependence).
   10502 
   10503 
   10504  These notes describe information gathered from gcov profile data.  They
   10505 are stored in the `REG_NOTES' field of an insn as an `expr_list'.
   10506 
   10507 `REG_BR_PROB'
   10508      This is used to specify the ratio of branches to non-branches of a
   10509      branch insn according to the profile data.  The value is stored as
   10510      a value between 0 and REG_BR_PROB_BASE; larger values indicate a
   10511      higher probability that the branch will be taken.
   10512 
   10513 `REG_BR_PRED'
   10514      These notes are found in JUMP insns after delayed branch scheduling
   10515      has taken place.  They indicate both the direction and the
   10516      likelihood of the JUMP.  The format is a bitmask of ATTR_FLAG_*
   10517      values.
   10518 
   10519 `REG_FRAME_RELATED_EXPR'
   10520      This is used on an RTX_FRAME_RELATED_P insn wherein the attached
   10521      expression is used in place of the actual insn pattern.  This is
   10522      done in cases where the pattern is either complex or misleading.
   10523 
   10524  For convenience, the machine mode in an `insn_list' or `expr_list' is
   10525 printed using these symbolic codes in debugging dumps.
   10526 
   10527  The only difference between the expression codes `insn_list' and
   10528 `expr_list' is that the first operand of an `insn_list' is assumed to
   10529 be an insn and is printed in debugging dumps as the insn's unique id;
   10530 the first operand of an `expr_list' is printed in the ordinary way as
   10531 an expression.
   10532 
   10533 
   10534 File: gccint.info,  Node: Calls,  Next: Sharing,  Prev: Insns,  Up: RTL
   10535 
   10536 10.20 RTL Representation of Function-Call Insns
   10537 ===============================================
   10538 
   10539 Insns that call subroutines have the RTL expression code `call_insn'.
   10540 These insns must satisfy special rules, and their bodies must use a
   10541 special RTL expression code, `call'.
   10542 
   10543  A `call' expression has two operands, as follows:
   10544 
   10545      (call (mem:FM ADDR) NBYTES)
   10546 
   10547 Here NBYTES is an operand that represents the number of bytes of
   10548 argument data being passed to the subroutine, FM is a machine mode
   10549 (which must equal as the definition of the `FUNCTION_MODE' macro in the
   10550 machine description) and ADDR represents the address of the subroutine.
   10551 
   10552  For a subroutine that returns no value, the `call' expression as shown
   10553 above is the entire body of the insn, except that the insn might also
   10554 contain `use' or `clobber' expressions.
   10555 
   10556  For a subroutine that returns a value whose mode is not `BLKmode', the
   10557 value is returned in a hard register.  If this register's number is R,
   10558 then the body of the call insn looks like this:
   10559 
   10560      (set (reg:M R)
   10561           (call (mem:FM ADDR) NBYTES))
   10562 
   10563 This RTL expression makes it clear (to the optimizer passes) that the
   10564 appropriate register receives a useful value in this insn.
   10565 
   10566  When a subroutine returns a `BLKmode' value, it is handled by passing
   10567 to the subroutine the address of a place to store the value.  So the
   10568 call insn itself does not "return" any value, and it has the same RTL
   10569 form as a call that returns nothing.
   10570 
   10571  On some machines, the call instruction itself clobbers some register,
   10572 for example to contain the return address.  `call_insn' insns on these
   10573 machines should have a body which is a `parallel' that contains both
   10574 the `call' expression and `clobber' expressions that indicate which
   10575 registers are destroyed.  Similarly, if the call instruction requires
   10576 some register other than the stack pointer that is not explicitly
   10577 mentioned in its RTL, a `use' subexpression should mention that
   10578 register.
   10579 
   10580  Functions that are called are assumed to modify all registers listed in
   10581 the configuration macro `CALL_USED_REGISTERS' (*note Register Basics::)
   10582 and, with the exception of `const' functions and library calls, to
   10583 modify all of memory.
   10584 
   10585  Insns containing just `use' expressions directly precede the
   10586 `call_insn' insn to indicate which registers contain inputs to the
   10587 function.  Similarly, if registers other than those in
   10588 `CALL_USED_REGISTERS' are clobbered by the called function, insns
   10589 containing a single `clobber' follow immediately after the call to
   10590 indicate which registers.
   10591 
   10592 
   10593 File: gccint.info,  Node: Sharing,  Next: Reading RTL,  Prev: Calls,  Up: RTL
   10594 
   10595 10.21 Structure Sharing Assumptions
   10596 ===================================
   10597 
   10598 The compiler assumes that certain kinds of RTL expressions are unique;
   10599 there do not exist two distinct objects representing the same value.
   10600 In other cases, it makes an opposite assumption: that no RTL expression
   10601 object of a certain kind appears in more than one place in the
   10602 containing structure.
   10603 
   10604  These assumptions refer to a single function; except for the RTL
   10605 objects that describe global variables and external functions, and a
   10606 few standard objects such as small integer constants, no RTL objects
   10607 are common to two functions.
   10608 
   10609    * Each pseudo-register has only a single `reg' object to represent
   10610      it, and therefore only a single machine mode.
   10611 
   10612    * For any symbolic label, there is only one `symbol_ref' object
   10613      referring to it.
   10614 
   10615    * All `const_int' expressions with equal values are shared.
   10616 
   10617    * There is only one `pc' expression.
   10618 
   10619    * There is only one `cc0' expression.
   10620 
   10621    * There is only one `const_double' expression with value 0 for each
   10622      floating point mode.  Likewise for values 1 and 2.
   10623 
   10624    * There is only one `const_vector' expression with value 0 for each
   10625      vector mode, be it an integer or a double constant vector.
   10626 
   10627    * No `label_ref' or `scratch' appears in more than one place in the
   10628      RTL structure; in other words, it is safe to do a tree-walk of all
   10629      the insns in the function and assume that each time a `label_ref'
   10630      or `scratch' is seen it is distinct from all others that are seen.
   10631 
   10632    * Only one `mem' object is normally created for each static variable
   10633      or stack slot, so these objects are frequently shared in all the
   10634      places they appear.  However, separate but equal objects for these
   10635      variables are occasionally made.
   10636 
   10637    * When a single `asm' statement has multiple output operands, a
   10638      distinct `asm_operands' expression is made for each output operand.
   10639      However, these all share the vector which contains the sequence of
   10640      input operands.  This sharing is used later on to test whether two
   10641      `asm_operands' expressions come from the same statement, so all
   10642      optimizations must carefully preserve the sharing if they copy the
   10643      vector at all.
   10644 
   10645    * No RTL object appears in more than one place in the RTL structure
   10646      except as described above.  Many passes of the compiler rely on
   10647      this by assuming that they can modify RTL objects in place without
   10648      unwanted side-effects on other insns.
   10649 
   10650    * During initial RTL generation, shared structure is freely
   10651      introduced.  After all the RTL for a function has been generated,
   10652      all shared structure is copied by `unshare_all_rtl' in
   10653      `emit-rtl.c', after which the above rules are guaranteed to be
   10654      followed.
   10655 
   10656    * During the combiner pass, shared structure within an insn can exist
   10657      temporarily.  However, the shared structure is copied before the
   10658      combiner is finished with the insn.  This is done by calling
   10659      `copy_rtx_if_shared', which is a subroutine of `unshare_all_rtl'.
   10660 
   10661 
   10662 File: gccint.info,  Node: Reading RTL,  Prev: Sharing,  Up: RTL
   10663 
   10664 10.22 Reading RTL
   10665 =================
   10666 
   10667 To read an RTL object from a file, call `read_rtx'.  It takes one
   10668 argument, a stdio stream, and returns a single RTL object.  This routine
   10669 is defined in `read-rtl.c'.  It is not available in the compiler
   10670 itself, only the various programs that generate the compiler back end
   10671 from the machine description.
   10672 
   10673  People frequently have the idea of using RTL stored as text in a file
   10674 as an interface between a language front end and the bulk of GCC.  This
   10675 idea is not feasible.
   10676 
   10677  GCC was designed to use RTL internally only.  Correct RTL for a given
   10678 program is very dependent on the particular target machine.  And the RTL
   10679 does not contain all the information about the program.
   10680 
   10681  The proper way to interface GCC to a new language front end is with
   10682 the "tree" data structure, described in the files `tree.h' and
   10683 `tree.def'.  The documentation for this structure (*note GENERIC::) is
   10684 incomplete.
   10685 
   10686 
   10687 File: gccint.info,  Node: GENERIC,  Next: GIMPLE,  Prev: Passes,  Up: Top
   10688 
   10689 11 GENERIC
   10690 **********
   10691 
   10692 The purpose of GENERIC is simply to provide a language-independent way
   10693 of representing an entire function in trees.  To this end, it was
   10694 necessary to add a few new tree codes to the back end, but most
   10695 everything was already there.  If you can express it with the codes in
   10696 `gcc/tree.def', it's GENERIC.
   10697 
   10698  Early on, there was a great deal of debate about how to think about
   10699 statements in a tree IL.  In GENERIC, a statement is defined as any
   10700 expression whose value, if any, is ignored.  A statement will always
   10701 have `TREE_SIDE_EFFECTS' set (or it will be discarded), but a
   10702 non-statement expression may also have side effects.  A `CALL_EXPR',
   10703 for instance.
   10704 
   10705  It would be possible for some local optimizations to work on the
   10706 GENERIC form of a function; indeed, the adapted tree inliner works fine
   10707 on GENERIC, but the current compiler performs inlining after lowering
   10708 to GIMPLE (a restricted form described in the next section). Indeed,
   10709 currently the frontends perform this lowering before handing off to
   10710 `tree_rest_of_compilation', but this seems inelegant.
   10711 
   10712 * Menu:
   10713 
   10714 * Deficiencies::                Topics net yet covered in this document.
   10715 * Tree overview::               All about `tree's.
   10716 * Types::                       Fundamental and aggregate types.
   10717 * Declarations::                Type declarations and variables.
   10718 * Attributes::                  Declaration and type attributes.
   10719 * Expressions: Expression trees.            Operating on data.
   10720 * Statements::                  Control flow and related trees.
   10721 * Functions::           	Function bodies, linkage, and other aspects.
   10722 * Language-dependent trees::    Topics and trees specific to language front ends.
   10723 * C and C++ Trees::     	Trees specific to C and C++.
   10724 * Java Trees:: 	                Trees specific to Java.
   10725 
   10726 
   10727 File: gccint.info,  Node: Deficiencies,  Next: Tree overview,  Up: GENERIC
   10728 
   10729 11.1 Deficiencies
   10730 =================
   10731 
   10732 There are many places in which this document is incomplet and incorrekt.
   10733 It is, as of yet, only _preliminary_ documentation.
   10734 
   10735 
   10736 File: gccint.info,  Node: Tree overview,  Next: Types,  Prev: Deficiencies,  Up: GENERIC
   10737 
   10738 11.2 Overview
   10739 =============
   10740 
   10741 The central data structure used by the internal representation is the
   10742 `tree'.  These nodes, while all of the C type `tree', are of many
   10743 varieties.  A `tree' is a pointer type, but the object to which it
   10744 points may be of a variety of types.  From this point forward, we will
   10745 refer to trees in ordinary type, rather than in `this font', except
   10746 when talking about the actual C type `tree'.
   10747 
   10748  You can tell what kind of node a particular tree is by using the
   10749 `TREE_CODE' macro.  Many, many macros take trees as input and return
   10750 trees as output.  However, most macros require a certain kind of tree
   10751 node as input.  In other words, there is a type-system for trees, but
   10752 it is not reflected in the C type-system.
   10753 
   10754  For safety, it is useful to configure GCC with `--enable-checking'.
   10755 Although this results in a significant performance penalty (since all
   10756 tree types are checked at run-time), and is therefore inappropriate in a
   10757 release version, it is extremely helpful during the development process.
   10758 
   10759  Many macros behave as predicates.  Many, although not all, of these
   10760 predicates end in `_P'.  Do not rely on the result type of these macros
   10761 being of any particular type.  You may, however, rely on the fact that
   10762 the type can be compared to `0', so that statements like
   10763      if (TEST_P (t) && !TEST_P (y))
   10764        x = 1;
   10765  and
   10766      int i = (TEST_P (t) != 0);
   10767  are legal.  Macros that return `int' values now may be changed to
   10768 return `tree' values, or other pointers in the future.  Even those that
   10769 continue to return `int' may return multiple nonzero codes where
   10770 previously they returned only zero and one.  Therefore, you should not
   10771 write code like
   10772      if (TEST_P (t) == 1)
   10773  as this code is not guaranteed to work correctly in the future.
   10774 
   10775  You should not take the address of values returned by the macros or
   10776 functions described here.  In particular, no guarantee is given that the
   10777 values are lvalues.
   10778 
   10779  In general, the names of macros are all in uppercase, while the names
   10780 of functions are entirely in lowercase.  There are rare exceptions to
   10781 this rule.  You should assume that any macro or function whose name is
   10782 made up entirely of uppercase letters may evaluate its arguments more
   10783 than once.  You may assume that a macro or function whose name is made
   10784 up entirely of lowercase letters will evaluate its arguments only once.
   10785 
   10786  The `error_mark_node' is a special tree.  Its tree code is
   10787 `ERROR_MARK', but since there is only ever one node with that code, the
   10788 usual practice is to compare the tree against `error_mark_node'.  (This
   10789 test is just a test for pointer equality.)  If an error has occurred
   10790 during front-end processing the flag `errorcount' will be set.  If the
   10791 front end has encountered code it cannot handle, it will issue a
   10792 message to the user and set `sorrycount'.  When these flags are set,
   10793 any macro or function which normally returns a tree of a particular
   10794 kind may instead return the `error_mark_node'.  Thus, if you intend to
   10795 do any processing of erroneous code, you must be prepared to deal with
   10796 the `error_mark_node'.
   10797 
   10798  Occasionally, a particular tree slot (like an operand to an expression,
   10799 or a particular field in a declaration) will be referred to as
   10800 "reserved for the back end".  These slots are used to store RTL when
   10801 the tree is converted to RTL for use by the GCC back end.  However, if
   10802 that process is not taking place (e.g., if the front end is being hooked
   10803 up to an intelligent editor), then those slots may be used by the back
   10804 end presently in use.
   10805 
   10806  If you encounter situations that do not match this documentation, such
   10807 as tree nodes of types not mentioned here, or macros documented to
   10808 return entities of a particular kind that instead return entities of
   10809 some different kind, you have found a bug, either in the front end or in
   10810 the documentation.  Please report these bugs as you would any other bug.
   10811 
   10812 * Menu:
   10813 
   10814 * Macros and Functions::Macros and functions that can be used with all trees.
   10815 * Identifiers::         The names of things.
   10816 * Containers::          Lists and vectors.
   10817 
   10818 
   10819 File: gccint.info,  Node: Macros and Functions,  Next: Identifiers,  Up: Tree overview
   10820 
   10821 11.2.1 Trees
   10822 ------------
   10823 
   10824 All GENERIC trees have two fields in common.  First, `TREE_CHAIN' is a
   10825 pointer that can be used as a singly-linked list to other trees.  The
   10826 other is `TREE_TYPE'.  Many trees store the type of an expression or
   10827 declaration in this field.
   10828 
   10829  These are some other functions for handling trees:
   10830 
   10831 `tree_size'
   10832      Return the number of bytes a tree takes.
   10833 
   10834 `build0'
   10835 `build1'
   10836 `build2'
   10837 `build3'
   10838 `build4'
   10839 `build5'
   10840 `build6'
   10841      These functions build a tree and supply values to put in each
   10842      parameter.  The basic signature is `code, type, [operands]'.
   10843      `code' is the `TREE_CODE', and `type' is a tree representing the
   10844      `TREE_TYPE'.  These are followed by the operands, each of which is
   10845      also a tree.
   10846 
   10847 
   10848 
   10849 File: gccint.info,  Node: Identifiers,  Next: Containers,  Prev: Macros and Functions,  Up: Tree overview
   10850 
   10851 11.2.2 Identifiers
   10852 ------------------
   10853 
   10854 An `IDENTIFIER_NODE' represents a slightly more general concept that
   10855 the standard C or C++ concept of identifier.  In particular, an
   10856 `IDENTIFIER_NODE' may contain a `$', or other extraordinary characters.
   10857 
   10858  There are never two distinct `IDENTIFIER_NODE's representing the same
   10859 identifier.  Therefore, you may use pointer equality to compare
   10860 `IDENTIFIER_NODE's, rather than using a routine like `strcmp'.  Use
   10861 `get_identifier' to obtain the unique `IDENTIFIER_NODE' for a supplied
   10862 string.
   10863 
   10864  You can use the following macros to access identifiers:
   10865 `IDENTIFIER_POINTER'
   10866      The string represented by the identifier, represented as a
   10867      `char*'.  This string is always `NUL'-terminated, and contains no
   10868      embedded `NUL' characters.
   10869 
   10870 `IDENTIFIER_LENGTH'
   10871      The length of the string returned by `IDENTIFIER_POINTER', not
   10872      including the trailing `NUL'.  This value of `IDENTIFIER_LENGTH
   10873      (x)' is always the same as `strlen (IDENTIFIER_POINTER (x))'.
   10874 
   10875 `IDENTIFIER_OPNAME_P'
   10876      This predicate holds if the identifier represents the name of an
   10877      overloaded operator.  In this case, you should not depend on the
   10878      contents of either the `IDENTIFIER_POINTER' or the
   10879      `IDENTIFIER_LENGTH'.
   10880 
   10881 `IDENTIFIER_TYPENAME_P'
   10882      This predicate holds if the identifier represents the name of a
   10883      user-defined conversion operator.  In this case, the `TREE_TYPE' of
   10884      the `IDENTIFIER_NODE' holds the type to which the conversion
   10885      operator converts.
   10886 
   10887 
   10888 
   10889 File: gccint.info,  Node: Containers,  Prev: Identifiers,  Up: Tree overview
   10890 
   10891 11.2.3 Containers
   10892 -----------------
   10893 
   10894 Two common container data structures can be represented directly with
   10895 tree nodes.  A `TREE_LIST' is a singly linked list containing two trees
   10896 per node.  These are the `TREE_PURPOSE' and `TREE_VALUE' of each node.
   10897 (Often, the `TREE_PURPOSE' contains some kind of tag, or additional
   10898 information, while the `TREE_VALUE' contains the majority of the
   10899 payload.  In other cases, the `TREE_PURPOSE' is simply `NULL_TREE',
   10900 while in still others both the `TREE_PURPOSE' and `TREE_VALUE' are of
   10901 equal stature.)  Given one `TREE_LIST' node, the next node is found by
   10902 following the `TREE_CHAIN'.  If the `TREE_CHAIN' is `NULL_TREE', then
   10903 you have reached the end of the list.
   10904 
   10905  A `TREE_VEC' is a simple vector.  The `TREE_VEC_LENGTH' is an integer
   10906 (not a tree) giving the number of nodes in the vector.  The nodes
   10907 themselves are accessed using the `TREE_VEC_ELT' macro, which takes two
   10908 arguments.  The first is the `TREE_VEC' in question; the second is an
   10909 integer indicating which element in the vector is desired.  The
   10910 elements are indexed from zero.
   10911 
   10912 
   10913 File: gccint.info,  Node: Types,  Next: Declarations,  Prev: Tree overview,  Up: GENERIC
   10914 
   10915 11.3 Types
   10916 ==========
   10917 
   10918 All types have corresponding tree nodes.  However, you should not assume
   10919 that there is exactly one tree node corresponding to each type.  There
   10920 are often multiple nodes corresponding to the same type.
   10921 
   10922  For the most part, different kinds of types have different tree codes.
   10923 (For example, pointer types use a `POINTER_TYPE' code while arrays use
   10924 an `ARRAY_TYPE' code.)  However, pointers to member functions use the
   10925 `RECORD_TYPE' code.  Therefore, when writing a `switch' statement that
   10926 depends on the code associated with a particular type, you should take
   10927 care to handle pointers to member functions under the `RECORD_TYPE'
   10928 case label.
   10929 
   10930  The following functions and macros deal with cv-qualification of types:
   10931 `TYPE_MAIN_VARIANT'
   10932      This macro returns the unqualified version of a type.  It may be
   10933      applied to an unqualified type, but it is not always the identity
   10934      function in that case.
   10935 
   10936  A few other macros and functions are usable with all types:
   10937 `TYPE_SIZE'
   10938      The number of bits required to represent the type, represented as
   10939      an `INTEGER_CST'.  For an incomplete type, `TYPE_SIZE' will be
   10940      `NULL_TREE'.
   10941 
   10942 `TYPE_ALIGN'
   10943      The alignment of the type, in bits, represented as an `int'.
   10944 
   10945 `TYPE_NAME'
   10946      This macro returns a declaration (in the form of a `TYPE_DECL') for
   10947      the type.  (Note this macro does _not_ return an
   10948      `IDENTIFIER_NODE', as you might expect, given its name!)  You can
   10949      look at the `DECL_NAME' of the `TYPE_DECL' to obtain the actual
   10950      name of the type.  The `TYPE_NAME' will be `NULL_TREE' for a type
   10951      that is not a built-in type, the result of a typedef, or a named
   10952      class type.
   10953 
   10954 `TYPE_CANONICAL'
   10955      This macro returns the "canonical" type for the given type node.
   10956      Canonical types are used to improve performance in the C++ and
   10957      Objective-C++ front ends by allowing efficient comparison between
   10958      two type nodes in `same_type_p': if the `TYPE_CANONICAL' values of
   10959      the types are equal, the types are equivalent; otherwise, the types
   10960      are not equivalent. The notion of equivalence for canonical types
   10961      is the same as the notion of type equivalence in the language
   10962      itself. For instance,
   10963 
   10964      When `TYPE_CANONICAL' is `NULL_TREE', there is no canonical type
   10965      for the given type node. In this case, comparison between this
   10966      type and any other type requires the compiler to perform a deep,
   10967      "structural" comparison to see if the two type nodes have the same
   10968      form and properties.
   10969 
   10970      The canonical type for a node is always the most fundamental type
   10971      in the equivalence class of types. For instance, `int' is its own
   10972      canonical type. A typedef `I' of `int' will have `int' as its
   10973      canonical type. Similarly, `I*' and a typedef `IP' (defined to
   10974      `I*') will has `int*' as their canonical type. When building a new
   10975      type node, be sure to set `TYPE_CANONICAL' to the appropriate
   10976      canonical type. If the new type is a compound type (built from
   10977      other types), and any of those other types require structural
   10978      equality, use `SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the
   10979      new type also requires structural equality. Finally, if for some
   10980      reason you cannot guarantee that `TYPE_CANONICAL' will point to
   10981      the canonical type, use `SET_TYPE_STRUCTURAL_EQUALITY' to make
   10982      sure that the new type-and any type constructed based on
   10983      it-requires structural equality. If you suspect that the canonical
   10984      type system is miscomparing types, pass `--param
   10985      verify-canonical-types=1' to the compiler or configure with
   10986      `--enable-checking' to force the compiler to verify its
   10987      canonical-type comparisons against the structural comparisons; the
   10988      compiler will then print any warnings if the canonical types
   10989      miscompare.
   10990 
   10991 `TYPE_STRUCTURAL_EQUALITY_P'
   10992      This predicate holds when the node requires structural equality
   10993      checks, e.g., when `TYPE_CANONICAL' is `NULL_TREE'.
   10994 
   10995 `SET_TYPE_STRUCTURAL_EQUALITY'
   10996      This macro states that the type node it is given requires
   10997      structural equality checks, e.g., it sets `TYPE_CANONICAL' to
   10998      `NULL_TREE'.
   10999 
   11000 `same_type_p'
   11001      This predicate takes two types as input, and holds if they are the
   11002      same type.  For example, if one type is a `typedef' for the other,
   11003      or both are `typedef's for the same type.  This predicate also
   11004      holds if the two trees given as input are simply copies of one
   11005      another; i.e., there is no difference between them at the source
   11006      level, but, for whatever reason, a duplicate has been made in the
   11007      representation.  You should never use `==' (pointer equality) to
   11008      compare types; always use `same_type_p' instead.
   11009 
   11010  Detailed below are the various kinds of types, and the macros that can
   11011 be used to access them.  Although other kinds of types are used
   11012 elsewhere in G++, the types described here are the only ones that you
   11013 will encounter while examining the intermediate representation.
   11014 
   11015 `VOID_TYPE'
   11016      Used to represent the `void' type.
   11017 
   11018 `INTEGER_TYPE'
   11019      Used to represent the various integral types, including `char',
   11020      `short', `int', `long', and `long long'.  This code is not used
   11021      for enumeration types, nor for the `bool' type.  The
   11022      `TYPE_PRECISION' is the number of bits used in the representation,
   11023      represented as an `unsigned int'.  (Note that in the general case
   11024      this is not the same value as `TYPE_SIZE'; suppose that there were
   11025      a 24-bit integer type, but that alignment requirements for the ABI
   11026      required 32-bit alignment.  Then, `TYPE_SIZE' would be an
   11027      `INTEGER_CST' for 32, while `TYPE_PRECISION' would be 24.)  The
   11028      integer type is unsigned if `TYPE_UNSIGNED' holds; otherwise, it
   11029      is signed.
   11030 
   11031      The `TYPE_MIN_VALUE' is an `INTEGER_CST' for the smallest integer
   11032      that may be represented by this type.  Similarly, the
   11033      `TYPE_MAX_VALUE' is an `INTEGER_CST' for the largest integer that
   11034      may be represented by this type.
   11035 
   11036 `REAL_TYPE'
   11037      Used to represent the `float', `double', and `long double' types.
   11038      The number of bits in the floating-point representation is given
   11039      by `TYPE_PRECISION', as in the `INTEGER_TYPE' case.
   11040 
   11041 `FIXED_POINT_TYPE'
   11042      Used to represent the `short _Fract', `_Fract', `long _Fract',
   11043      `long long _Fract', `short _Accum', `_Accum', `long _Accum', and
   11044      `long long _Accum' types.  The number of bits in the fixed-point
   11045      representation is given by `TYPE_PRECISION', as in the
   11046      `INTEGER_TYPE' case.  There may be padding bits, fractional bits
   11047      and integral bits.  The number of fractional bits is given by
   11048      `TYPE_FBIT', and the number of integral bits is given by
   11049      `TYPE_IBIT'.  The fixed-point type is unsigned if `TYPE_UNSIGNED'
   11050      holds; otherwise, it is signed.  The fixed-point type is
   11051      saturating if `TYPE_SATURATING' holds; otherwise, it is not
   11052      saturating.
   11053 
   11054 `COMPLEX_TYPE'
   11055      Used to represent GCC built-in `__complex__' data types.  The
   11056      `TREE_TYPE' is the type of the real and imaginary parts.
   11057 
   11058 `ENUMERAL_TYPE'
   11059      Used to represent an enumeration type.  The `TYPE_PRECISION' gives
   11060      (as an `int'), the number of bits used to represent the type.  If
   11061      there are no negative enumeration constants, `TYPE_UNSIGNED' will
   11062      hold.  The minimum and maximum enumeration constants may be
   11063      obtained with `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE', respectively;
   11064      each of these macros returns an `INTEGER_CST'.
   11065 
   11066      The actual enumeration constants themselves may be obtained by
   11067      looking at the `TYPE_VALUES'.  This macro will return a
   11068      `TREE_LIST', containing the constants.  The `TREE_PURPOSE' of each
   11069      node will be an `IDENTIFIER_NODE' giving the name of the constant;
   11070      the `TREE_VALUE' will be an `INTEGER_CST' giving the value
   11071      assigned to that constant.  These constants will appear in the
   11072      order in which they were declared.  The `TREE_TYPE' of each of
   11073      these constants will be the type of enumeration type itself.
   11074 
   11075 `BOOLEAN_TYPE'
   11076      Used to represent the `bool' type.
   11077 
   11078 `POINTER_TYPE'
   11079      Used to represent pointer types, and pointer to data member types.
   11080      The `TREE_TYPE' gives the type to which this type points.
   11081 
   11082 `REFERENCE_TYPE'
   11083      Used to represent reference types.  The `TREE_TYPE' gives the type
   11084      to which this type refers.
   11085 
   11086 `FUNCTION_TYPE'
   11087      Used to represent the type of non-member functions and of static
   11088      member functions.  The `TREE_TYPE' gives the return type of the
   11089      function.  The `TYPE_ARG_TYPES' are a `TREE_LIST' of the argument
   11090      types.  The `TREE_VALUE' of each node in this list is the type of
   11091      the corresponding argument; the `TREE_PURPOSE' is an expression
   11092      for the default argument value, if any.  If the last node in the
   11093      list is `void_list_node' (a `TREE_LIST' node whose `TREE_VALUE' is
   11094      the `void_type_node'), then functions of this type do not take
   11095      variable arguments.  Otherwise, they do take a variable number of
   11096      arguments.
   11097 
   11098      Note that in C (but not in C++) a function declared like `void f()'
   11099      is an unprototyped function taking a variable number of arguments;
   11100      the `TYPE_ARG_TYPES' of such a function will be `NULL'.
   11101 
   11102 `METHOD_TYPE'
   11103      Used to represent the type of a non-static member function.  Like a
   11104      `FUNCTION_TYPE', the return type is given by the `TREE_TYPE'.  The
   11105      type of `*this', i.e., the class of which functions of this type
   11106      are a member, is given by the `TYPE_METHOD_BASETYPE'.  The
   11107      `TYPE_ARG_TYPES' is the parameter list, as for a `FUNCTION_TYPE',
   11108      and includes the `this' argument.
   11109 
   11110 `ARRAY_TYPE'
   11111      Used to represent array types.  The `TREE_TYPE' gives the type of
   11112      the elements in the array.  If the array-bound is present in the
   11113      type, the `TYPE_DOMAIN' is an `INTEGER_TYPE' whose
   11114      `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE' will be the lower and upper
   11115      bounds of the array, respectively.  The `TYPE_MIN_VALUE' will
   11116      always be an `INTEGER_CST' for zero, while the `TYPE_MAX_VALUE'
   11117      will be one less than the number of elements in the array, i.e.,
   11118      the highest value which may be used to index an element in the
   11119      array.
   11120 
   11121 `RECORD_TYPE'
   11122      Used to represent `struct' and `class' types, as well as pointers
   11123      to member functions and similar constructs in other languages.
   11124      `TYPE_FIELDS' contains the items contained in this type, each of
   11125      which can be a `FIELD_DECL', `VAR_DECL', `CONST_DECL', or
   11126      `TYPE_DECL'.  You may not make any assumptions about the ordering
   11127      of the fields in the type or whether one or more of them overlap.
   11128 
   11129 `UNION_TYPE'
   11130      Used to represent `union' types.  Similar to `RECORD_TYPE' except
   11131      that all `FIELD_DECL' nodes in `TYPE_FIELD' start at bit position
   11132      zero.
   11133 
   11134 `QUAL_UNION_TYPE'
   11135      Used to represent part of a variant record in Ada.  Similar to
   11136      `UNION_TYPE' except that each `FIELD_DECL' has a `DECL_QUALIFIER'
   11137      field, which contains a boolean expression that indicates whether
   11138      the field is present in the object.  The type will only have one
   11139      field, so each field's `DECL_QUALIFIER' is only evaluated if none
   11140      of the expressions in the previous fields in `TYPE_FIELDS' are
   11141      nonzero.  Normally these expressions will reference a field in the
   11142      outer object using a `PLACEHOLDER_EXPR'.
   11143 
   11144 `LANG_TYPE'
   11145      This node is used to represent a language-specific type.  The front
   11146      end must handle it.
   11147 
   11148 `OFFSET_TYPE'
   11149      This node is used to represent a pointer-to-data member.  For a
   11150      data member `X::m' the `TYPE_OFFSET_BASETYPE' is `X' and the
   11151      `TREE_TYPE' is the type of `m'.
   11152 
   11153 
   11154  There are variables whose values represent some of the basic types.
   11155 These include:
   11156 `void_type_node'
   11157      A node for `void'.
   11158 
   11159 `integer_type_node'
   11160      A node for `int'.
   11161 
   11162 `unsigned_type_node.'
   11163      A node for `unsigned int'.
   11164 
   11165 `char_type_node.'
   11166      A node for `char'.
   11167  It may sometimes be useful to compare one of these variables with a
   11168 type in hand, using `same_type_p'.
   11169 
   11170 
   11171 File: gccint.info,  Node: Declarations,  Next: Attributes,  Prev: Types,  Up: GENERIC
   11172 
   11173 11.4 Declarations
   11174 =================
   11175 
   11176 This section covers the various kinds of declarations that appear in the
   11177 internal representation, except for declarations of functions
   11178 (represented by `FUNCTION_DECL' nodes), which are described in *note
   11179 Functions::.
   11180 
   11181 * Menu:
   11182 
   11183 * Working with declarations::  Macros and functions that work on
   11184 declarations.
   11185 * Internal structure:: How declaration nodes are represented.
   11186 
   11187 
   11188 File: gccint.info,  Node: Working with declarations,  Next: Internal structure,  Up: Declarations
   11189 
   11190 11.4.1 Working with declarations
   11191 --------------------------------
   11192 
   11193 Some macros can be used with any kind of declaration.  These include:
   11194 `DECL_NAME'
   11195      This macro returns an `IDENTIFIER_NODE' giving the name of the
   11196      entity.
   11197 
   11198 `TREE_TYPE'
   11199      This macro returns the type of the entity declared.
   11200 
   11201 `EXPR_FILENAME'
   11202      This macro returns the name of the file in which the entity was
   11203      declared, as a `char*'.  For an entity declared implicitly by the
   11204      compiler (like `__builtin_memcpy'), this will be the string
   11205      `"<internal>"'.
   11206 
   11207 `EXPR_LINENO'
   11208      This macro returns the line number at which the entity was
   11209      declared, as an `int'.
   11210 
   11211 `DECL_ARTIFICIAL'
   11212      This predicate holds if the declaration was implicitly generated
   11213      by the compiler.  For example, this predicate will hold of an
   11214      implicitly declared member function, or of the `TYPE_DECL'
   11215      implicitly generated for a class type.  Recall that in C++ code
   11216      like:
   11217           struct S {};
   11218      is roughly equivalent to C code like:
   11219           struct S {};
   11220           typedef struct S S;
   11221      The implicitly generated `typedef' declaration is represented by a
   11222      `TYPE_DECL' for which `DECL_ARTIFICIAL' holds.
   11223 
   11224 
   11225  The various kinds of declarations include:
   11226 `LABEL_DECL'
   11227      These nodes are used to represent labels in function bodies.  For
   11228      more information, see *note Functions::.  These nodes only appear
   11229      in block scopes.
   11230 
   11231 `CONST_DECL'
   11232      These nodes are used to represent enumeration constants.  The
   11233      value of the constant is given by `DECL_INITIAL' which will be an
   11234      `INTEGER_CST' with the same type as the `TREE_TYPE' of the
   11235      `CONST_DECL', i.e., an `ENUMERAL_TYPE'.
   11236 
   11237 `RESULT_DECL'
   11238      These nodes represent the value returned by a function.  When a
   11239      value is assigned to a `RESULT_DECL', that indicates that the
   11240      value should be returned, via bitwise copy, by the function.  You
   11241      can use `DECL_SIZE' and `DECL_ALIGN' on a `RESULT_DECL', just as
   11242      with a `VAR_DECL'.
   11243 
   11244 `TYPE_DECL'
   11245      These nodes represent `typedef' declarations.  The `TREE_TYPE' is
   11246      the type declared to have the name given by `DECL_NAME'.  In some
   11247      cases, there is no associated name.
   11248 
   11249 `VAR_DECL'
   11250      These nodes represent variables with namespace or block scope, as
   11251      well as static data members.  The `DECL_SIZE' and `DECL_ALIGN' are
   11252      analogous to `TYPE_SIZE' and `TYPE_ALIGN'.  For a declaration, you
   11253      should always use the `DECL_SIZE' and `DECL_ALIGN' rather than the
   11254      `TYPE_SIZE' and `TYPE_ALIGN' given by the `TREE_TYPE', since
   11255      special attributes may have been applied to the variable to give
   11256      it a particular size and alignment.  You may use the predicates
   11257      `DECL_THIS_STATIC' or `DECL_THIS_EXTERN' to test whether the
   11258      storage class specifiers `static' or `extern' were used to declare
   11259      a variable.
   11260 
   11261      If this variable is initialized (but does not require a
   11262      constructor), the `DECL_INITIAL' will be an expression for the
   11263      initializer.  The initializer should be evaluated, and a bitwise
   11264      copy into the variable performed.  If the `DECL_INITIAL' is the
   11265      `error_mark_node', there is an initializer, but it is given by an
   11266      explicit statement later in the code; no bitwise copy is required.
   11267 
   11268      GCC provides an extension that allows either automatic variables,
   11269      or global variables, to be placed in particular registers.  This
   11270      extension is being used for a particular `VAR_DECL' if
   11271      `DECL_REGISTER' holds for the `VAR_DECL', and if
   11272      `DECL_ASSEMBLER_NAME' is not equal to `DECL_NAME'.  In that case,
   11273      `DECL_ASSEMBLER_NAME' is the name of the register into which the
   11274      variable will be placed.
   11275 
   11276 `PARM_DECL'
   11277      Used to represent a parameter to a function.  Treat these nodes
   11278      similarly to `VAR_DECL' nodes.  These nodes only appear in the
   11279      `DECL_ARGUMENTS' for a `FUNCTION_DECL'.
   11280 
   11281      The `DECL_ARG_TYPE' for a `PARM_DECL' is the type that will
   11282      actually be used when a value is passed to this function.  It may
   11283      be a wider type than the `TREE_TYPE' of the parameter; for
   11284      example, the ordinary type might be `short' while the
   11285      `DECL_ARG_TYPE' is `int'.
   11286 
   11287 `DEBUG_EXPR_DECL'
   11288      Used to represent an anonymous debug-information temporary created
   11289      to hold an expression as it is optimized away, so that its value
   11290      can be referenced in debug bind statements.
   11291 
   11292 `FIELD_DECL'
   11293      These nodes represent non-static data members.  The `DECL_SIZE' and
   11294      `DECL_ALIGN' behave as for `VAR_DECL' nodes.  The position of the
   11295      field within the parent record is specified by a combination of
   11296      three attributes.  `DECL_FIELD_OFFSET' is the position, counting
   11297      in bytes, of the `DECL_OFFSET_ALIGN'-bit sized word containing the
   11298      bit of the field closest to the beginning of the structure.
   11299      `DECL_FIELD_BIT_OFFSET' is the bit offset of the first bit of the
   11300      field within this word; this may be nonzero even for fields that
   11301      are not bit-fields, since `DECL_OFFSET_ALIGN' may be greater than
   11302      the natural alignment of the field's type.
   11303 
   11304      If `DECL_C_BIT_FIELD' holds, this field is a bit-field.  In a
   11305      bit-field, `DECL_BIT_FIELD_TYPE' also contains the type that was
   11306      originally specified for it, while DECL_TYPE may be a modified
   11307      type with lesser precision, according to the size of the bit field.
   11308 
   11309 `NAMESPACE_DECL'
   11310      Namespaces provide a name hierarchy for other declarations.  They
   11311      appear in the `DECL_CONTEXT' of other `_DECL' nodes.
   11312 
   11313 
   11314 
   11315 File: gccint.info,  Node: Internal structure,  Prev: Working with declarations,  Up: Declarations
   11316 
   11317 11.4.2 Internal structure
   11318 -------------------------
   11319 
   11320 `DECL' nodes are represented internally as a hierarchy of structures.
   11321 
   11322 * Menu:
   11323 
   11324 * Current structure hierarchy::  The current DECL node structure
   11325 hierarchy.
   11326 * Adding new DECL node types:: How to add a new DECL node to a
   11327 frontend.
   11328 
   11329 
   11330 File: gccint.info,  Node: Current structure hierarchy,  Next: Adding new DECL node types,  Up: Internal structure
   11331 
   11332 11.4.2.1 Current structure hierarchy
   11333 ....................................
   11334 
   11335 `struct tree_decl_minimal'
   11336      This is the minimal structure to inherit from in order for common
   11337      `DECL' macros to work.  The fields it contains are a unique ID,
   11338      source location, context, and name.
   11339 
   11340 `struct tree_decl_common'
   11341      This structure inherits from `struct tree_decl_minimal'.  It
   11342      contains fields that most `DECL' nodes need, such as a field to
   11343      store alignment, machine mode, size, and attributes.
   11344 
   11345 `struct tree_field_decl'
   11346      This structure inherits from `struct tree_decl_common'.  It is
   11347      used to represent `FIELD_DECL'.
   11348 
   11349 `struct tree_label_decl'
   11350      This structure inherits from `struct tree_decl_common'.  It is
   11351      used to represent `LABEL_DECL'.
   11352 
   11353 `struct tree_translation_unit_decl'
   11354      This structure inherits from `struct tree_decl_common'.  It is
   11355      used to represent `TRANSLATION_UNIT_DECL'.
   11356 
   11357 `struct tree_decl_with_rtl'
   11358      This structure inherits from `struct tree_decl_common'.  It
   11359      contains a field to store the low-level RTL associated with a
   11360      `DECL' node.
   11361 
   11362 `struct tree_result_decl'
   11363      This structure inherits from `struct tree_decl_with_rtl'.  It is
   11364      used to represent `RESULT_DECL'.
   11365 
   11366 `struct tree_const_decl'
   11367      This structure inherits from `struct tree_decl_with_rtl'.  It is
   11368      used to represent `CONST_DECL'.
   11369 
   11370 `struct tree_parm_decl'
   11371      This structure inherits from `struct tree_decl_with_rtl'.  It is
   11372      used to represent `PARM_DECL'.
   11373 
   11374 `struct tree_decl_with_vis'
   11375      This structure inherits from `struct tree_decl_with_rtl'.  It
   11376      contains fields necessary to store visibility information, as well
   11377      as a section name and assembler name.
   11378 
   11379 `struct tree_var_decl'
   11380      This structure inherits from `struct tree_decl_with_vis'.  It is
   11381      used to represent `VAR_DECL'.
   11382 
   11383 `struct tree_function_decl'
   11384      This structure inherits from `struct tree_decl_with_vis'.  It is
   11385      used to represent `FUNCTION_DECL'.
   11386 
   11387 
   11388 
   11389 File: gccint.info,  Node: Adding new DECL node types,  Prev: Current structure hierarchy,  Up: Internal structure
   11390 
   11391 11.4.2.2 Adding new DECL node types
   11392 ...................................
   11393 
   11394 Adding a new `DECL' tree consists of the following steps
   11395 
   11396 Add a new tree code for the `DECL' node
   11397      For language specific `DECL' nodes, there is a `.def' file in each
   11398      frontend directory where the tree code should be added.  For
   11399      `DECL' nodes that are part of the middle-end, the code should be
   11400      added to `tree.def'.
   11401 
   11402 Create a new structure type for the `DECL' node
   11403      These structures should inherit from one of the existing
   11404      structures in the language hierarchy by using that structure as
   11405      the first member.
   11406 
   11407           struct tree_foo_decl
   11408           {
   11409              struct tree_decl_with_vis common;
   11410           }
   11411 
   11412      Would create a structure name `tree_foo_decl' that inherits from
   11413      `struct tree_decl_with_vis'.
   11414 
   11415      For language specific `DECL' nodes, this new structure type should
   11416      go in the appropriate `.h' file.  For `DECL' nodes that are part
   11417      of the middle-end, the structure type should go in `tree.h'.
   11418 
   11419 Add a member to the tree structure enumerator for the node
   11420      For garbage collection and dynamic checking purposes, each `DECL'
   11421      node structure type is required to have a unique enumerator value
   11422      specified with it.  For language specific `DECL' nodes, this new
   11423      enumerator value should go in the appropriate `.def' file.  For
   11424      `DECL' nodes that are part of the middle-end, the enumerator
   11425      values are specified in `treestruct.def'.
   11426 
   11427 Update `union tree_node'
   11428      In order to make your new structure type usable, it must be added
   11429      to `union tree_node'.  For language specific `DECL' nodes, a new
   11430      entry should be added to the appropriate `.h' file of the form
   11431             struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl;
   11432      For `DECL' nodes that are part of the middle-end, the additional
   11433      member goes directly into `union tree_node' in `tree.h'.
   11434 
   11435 Update dynamic checking info
   11436      In order to be able to check whether accessing a named portion of
   11437      `union tree_node' is legal, and whether a certain `DECL' node
   11438      contains one of the enumerated `DECL' node structures in the
   11439      hierarchy, a simple lookup table is used.  This lookup table needs
   11440      to be kept up to date with the tree structure hierarchy, or else
   11441      checking and containment macros will fail inappropriately.
   11442 
   11443      For language specific `DECL' nodes, their is an `init_ts' function
   11444      in an appropriate `.c' file, which initializes the lookup table.
   11445      Code setting up the table for new `DECL' nodes should be added
   11446      there.  For each `DECL' tree code and enumerator value
   11447      representing a member of the inheritance  hierarchy, the table
   11448      should contain 1 if that tree code inherits (directly or
   11449      indirectly) from that member.  Thus, a `FOO_DECL' node derived
   11450      from `struct decl_with_rtl', and enumerator value `TS_FOO_DECL',
   11451      would be set up as follows
   11452           tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1;
   11453           tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1;
   11454           tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1;
   11455           tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1;
   11456 
   11457      For `DECL' nodes that are part of the middle-end, the setup code
   11458      goes into `tree.c'.
   11459 
   11460 Add macros to access any new fields and flags
   11461      Each added field or flag should have a macro that is used to access
   11462      it, that performs appropriate checking to ensure only the right
   11463      type of `DECL' nodes access the field.
   11464 
   11465      These macros generally take the following form
   11466           #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname
   11467      However, if the structure is simply a base class for further
   11468      structures, something like the following should be used
   11469           #define BASE_STRUCT_CHECK(T) CONTAINS_STRUCT_CHECK(T, TS_BASE_STRUCT)
   11470           #define BASE_STRUCT_FIELDNAME(NODE) \
   11471              (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname
   11472 
   11473 
   11474 
   11475 File: gccint.info,  Node: Attributes,  Next: Expression trees,  Prev: Declarations,  Up: GENERIC
   11476 
   11477 11.5 Attributes in trees
   11478 ========================
   11479 
   11480 Attributes, as specified using the `__attribute__' keyword, are
   11481 represented internally as a `TREE_LIST'.  The `TREE_PURPOSE' is the
   11482 name of the attribute, as an `IDENTIFIER_NODE'.  The `TREE_VALUE' is a
   11483 `TREE_LIST' of the arguments of the attribute, if any, or `NULL_TREE'
   11484 if there are no arguments; the arguments are stored as the `TREE_VALUE'
   11485 of successive entries in the list, and may be identifiers or
   11486 expressions.  The `TREE_CHAIN' of the attribute is the next attribute
   11487 in a list of attributes applying to the same declaration or type, or
   11488 `NULL_TREE' if there are no further attributes in the list.
   11489 
   11490  Attributes may be attached to declarations and to types; these
   11491 attributes may be accessed with the following macros.  All attributes
   11492 are stored in this way, and many also cause other changes to the
   11493 declaration or type or to other internal compiler data structures.
   11494 
   11495  -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL)
   11496      This macro returns the attributes on the declaration DECL.
   11497 
   11498  -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE)
   11499      This macro returns the attributes on the type TYPE.
   11500 
   11501 
   11502 File: gccint.info,  Node: Expression trees,  Next: Statements,  Prev: Attributes,  Up: GENERIC
   11503 
   11504 11.6 Expressions
   11505 ================
   11506 
   11507 The internal representation for expressions is for the most part quite
   11508 straightforward.  However, there are a few facts that one must bear in
   11509 mind.  In particular, the expression "tree" is actually a directed
   11510 acyclic graph.  (For example there may be many references to the integer
   11511 constant zero throughout the source program; many of these will be
   11512 represented by the same expression node.)  You should not rely on
   11513 certain kinds of node being shared, nor should you rely on certain
   11514 kinds of nodes being unshared.
   11515 
   11516  The following macros can be used with all expression nodes:
   11517 
   11518 `TREE_TYPE'
   11519      Returns the type of the expression.  This value may not be
   11520      precisely the same type that would be given the expression in the
   11521      original program.
   11522 
   11523  In what follows, some nodes that one might expect to always have type
   11524 `bool' are documented to have either integral or boolean type.  At some
   11525 point in the future, the C front end may also make use of this same
   11526 intermediate representation, and at this point these nodes will
   11527 certainly have integral type.  The previous sentence is not meant to
   11528 imply that the C++ front end does not or will not give these nodes
   11529 integral type.
   11530 
   11531  Below, we list the various kinds of expression nodes.  Except where
   11532 noted otherwise, the operands to an expression are accessed using the
   11533 `TREE_OPERAND' macro.  For example, to access the first operand to a
   11534 binary plus expression `expr', use:
   11535 
   11536      TREE_OPERAND (expr, 0)
   11537  As this example indicates, the operands are zero-indexed.
   11538 
   11539 * Menu:
   11540 
   11541 * Constants: Constant expressions.
   11542 * Storage References::
   11543 * Unary and Binary Expressions::
   11544 * Vectors::
   11545 
   11546 
   11547 File: gccint.info,  Node: Constant expressions,  Next: Storage References,  Up: Expression trees
   11548 
   11549 11.6.1 Constant expressions
   11550 ---------------------------
   11551 
   11552 The table below begins with constants, moves on to unary expressions,
   11553 then proceeds to binary expressions, and concludes with various other
   11554 kinds of expressions:
   11555 
   11556 `INTEGER_CST'
   11557      These nodes represent integer constants.  Note that the type of
   11558      these constants is obtained with `TREE_TYPE'; they are not always
   11559      of type `int'.  In particular, `char' constants are represented
   11560      with `INTEGER_CST' nodes.  The value of the integer constant `e' is
   11561      given by
   11562           ((TREE_INT_CST_HIGH (e) << HOST_BITS_PER_WIDE_INT)
   11563           + TREE_INST_CST_LOW (e))
   11564      HOST_BITS_PER_WIDE_INT is at least thirty-two on all platforms.
   11565      Both `TREE_INT_CST_HIGH' and `TREE_INT_CST_LOW' return a
   11566      `HOST_WIDE_INT'.  The value of an `INTEGER_CST' is interpreted as
   11567      a signed or unsigned quantity depending on the type of the
   11568      constant.  In general, the expression given above will overflow,
   11569      so it should not be used to calculate the value of the constant.
   11570 
   11571      The variable `integer_zero_node' is an integer constant with value
   11572      zero.  Similarly, `integer_one_node' is an integer constant with
   11573      value one.  The `size_zero_node' and `size_one_node' variables are
   11574      analogous, but have type `size_t' rather than `int'.
   11575 
   11576      The function `tree_int_cst_lt' is a predicate which holds if its
   11577      first argument is less than its second.  Both constants are
   11578      assumed to have the same signedness (i.e., either both should be
   11579      signed or both should be unsigned.)  The full width of the
   11580      constant is used when doing the comparison; the usual rules about
   11581      promotions and conversions are ignored.  Similarly,
   11582      `tree_int_cst_equal' holds if the two constants are equal.  The
   11583      `tree_int_cst_sgn' function returns the sign of a constant.  The
   11584      value is `1', `0', or `-1' according on whether the constant is
   11585      greater than, equal to, or less than zero.  Again, the signedness
   11586      of the constant's type is taken into account; an unsigned constant
   11587      is never less than zero, no matter what its bit-pattern.
   11588 
   11589 `REAL_CST'
   11590      FIXME: Talk about how to obtain representations of this constant,
   11591      do comparisons, and so forth.
   11592 
   11593 `FIXED_CST'
   11594      These nodes represent fixed-point constants.  The type of these
   11595      constants is obtained with `TREE_TYPE'.  `TREE_FIXED_CST_PTR'
   11596      points to a `struct fixed_value';  `TREE_FIXED_CST' returns the
   11597      structure itself.  `struct fixed_value' contains `data' with the
   11598      size of two `HOST_BITS_PER_WIDE_INT' and `mode' as the associated
   11599      fixed-point machine mode for `data'.
   11600 
   11601 `COMPLEX_CST'
   11602      These nodes are used to represent complex number constants, that
   11603      is a `__complex__' whose parts are constant nodes.  The
   11604      `TREE_REALPART' and `TREE_IMAGPART' return the real and the
   11605      imaginary parts respectively.
   11606 
   11607 `VECTOR_CST'
   11608      These nodes are used to represent vector constants, whose parts are
   11609      constant nodes.  Each individual constant node is either an
   11610      integer or a double constant node.  The first operand is a
   11611      `TREE_LIST' of the constant nodes and is accessed through
   11612      `TREE_VECTOR_CST_ELTS'.
   11613 
   11614 `STRING_CST'
   11615      These nodes represent string-constants.  The `TREE_STRING_LENGTH'
   11616      returns the length of the string, as an `int'.  The
   11617      `TREE_STRING_POINTER' is a `char*' containing the string itself.
   11618      The string may not be `NUL'-terminated, and it may contain
   11619      embedded `NUL' characters.  Therefore, the `TREE_STRING_LENGTH'
   11620      includes the trailing `NUL' if it is present.
   11621 
   11622      For wide string constants, the `TREE_STRING_LENGTH' is the number
   11623      of bytes in the string, and the `TREE_STRING_POINTER' points to an
   11624      array of the bytes of the string, as represented on the target
   11625      system (that is, as integers in the target endianness).  Wide and
   11626      non-wide string constants are distinguished only by the `TREE_TYPE'
   11627      of the `STRING_CST'.
   11628 
   11629      FIXME: The formats of string constants are not well-defined when
   11630      the target system bytes are not the same width as host system
   11631      bytes.
   11632 
   11633 
   11634 
   11635 File: gccint.info,  Node: Storage References,  Next: Unary and Binary Expressions,  Prev: Constant expressions,  Up: Expression trees
   11636 
   11637 11.6.2 References to storage
   11638 ----------------------------
   11639 
   11640 `ARRAY_REF'
   11641      These nodes represent array accesses.  The first operand is the
   11642      array; the second is the index.  To calculate the address of the
   11643      memory accessed, you must scale the index by the size of the type
   11644      of the array elements.  The type of these expressions must be the
   11645      type of a component of the array.  The third and fourth operands
   11646      are used after gimplification to represent the lower bound and
   11647      component size but should not be used directly; call
   11648      `array_ref_low_bound' and `array_ref_element_size' instead.
   11649 
   11650 `ARRAY_RANGE_REF'
   11651      These nodes represent access to a range (or "slice") of an array.
   11652      The operands are the same as that for `ARRAY_REF' and have the same
   11653      meanings.  The type of these expressions must be an array whose
   11654      component type is the same as that of the first operand.  The
   11655      range of that array type determines the amount of data these
   11656      expressions access.
   11657 
   11658 `TARGET_MEM_REF'
   11659      These nodes represent memory accesses whose address directly map to
   11660      an addressing mode of the target architecture.  The first argument
   11661      is `TMR_SYMBOL' and must be a `VAR_DECL' of an object with a fixed
   11662      address.  The second argument is `TMR_BASE' and the third one is
   11663      `TMR_INDEX'.  The fourth argument is `TMR_STEP' and must be an
   11664      `INTEGER_CST'.  The fifth argument is `TMR_OFFSET' and must be an
   11665      `INTEGER_CST'.  Any of the arguments may be NULL if the
   11666      appropriate component does not appear in the address.  Address of
   11667      the `TARGET_MEM_REF' is determined in the following way.
   11668 
   11669           &TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET
   11670 
   11671      The sixth argument is the reference to the original memory access,
   11672      which is preserved for the purposes of the RTL alias analysis.
   11673      The seventh argument is a tag representing the results of tree
   11674      level alias analysis.
   11675 
   11676 `ADDR_EXPR'
   11677      These nodes are used to represent the address of an object.  (These
   11678      expressions will always have pointer or reference type.)  The
   11679      operand may be another expression, or it may be a declaration.
   11680 
   11681      As an extension, GCC allows users to take the address of a label.
   11682      In this case, the operand of the `ADDR_EXPR' will be a
   11683      `LABEL_DECL'.  The type of such an expression is `void*'.
   11684 
   11685      If the object addressed is not an lvalue, a temporary is created,
   11686      and the address of the temporary is used.
   11687 
   11688 `INDIRECT_REF'
   11689      These nodes are used to represent the object pointed to by a
   11690      pointer.  The operand is the pointer being dereferenced; it will
   11691      always have pointer or reference type.
   11692 
   11693 `MEM_REF'
   11694      These nodes are used to represent the object pointed to by a
   11695      pointer offset by a constant.  The first operand is the pointer
   11696      being dereferenced; it will always have pointer or reference type.
   11697      The second operand is a pointer constant.  Its type is specifying
   11698      the type to be used for type-based alias analysis.
   11699 
   11700 `COMPONENT_REF'
   11701      These nodes represent non-static data member accesses.  The first
   11702      operand is the object (rather than a pointer to it); the second
   11703      operand is the `FIELD_DECL' for the data member.  The third
   11704      operand represents the byte offset of the field, but should not be
   11705      used directly; call `component_ref_field_offset' instead.
   11706 
   11707 
   11708 
   11709 File: gccint.info,  Node: Unary and Binary Expressions,  Next: Vectors,  Prev: Storage References,  Up: Expression trees
   11710 
   11711 11.6.3 Unary and Binary Expressions
   11712 -----------------------------------
   11713 
   11714 `NEGATE_EXPR'
   11715      These nodes represent unary negation of the single operand, for
   11716      both integer and floating-point types.  The type of negation can be
   11717      determined by looking at the type of the expression.
   11718 
   11719      The behavior of this operation on signed arithmetic overflow is
   11720      controlled by the `flag_wrapv' and `flag_trapv' variables.
   11721 
   11722 `ABS_EXPR'
   11723      These nodes represent the absolute value of the single operand, for
   11724      both integer and floating-point types.  This is typically used to
   11725      implement the `abs', `labs' and `llabs' builtins for integer
   11726      types, and the `fabs', `fabsf' and `fabsl' builtins for floating
   11727      point types.  The type of abs operation can be determined by
   11728      looking at the type of the expression.
   11729 
   11730      This node is not used for complex types.  To represent the modulus
   11731      or complex abs of a complex value, use the `BUILT_IN_CABS',
   11732      `BUILT_IN_CABSF' or `BUILT_IN_CABSL' builtins, as used to
   11733      implement the C99 `cabs', `cabsf' and `cabsl' built-in functions.
   11734 
   11735 `BIT_NOT_EXPR'
   11736      These nodes represent bitwise complement, and will always have
   11737      integral type.  The only operand is the value to be complemented.
   11738 
   11739 `TRUTH_NOT_EXPR'
   11740      These nodes represent logical negation, and will always have
   11741      integral (or boolean) type.  The operand is the value being
   11742      negated.  The type of the operand and that of the result are
   11743      always of `BOOLEAN_TYPE' or `INTEGER_TYPE'.
   11744 
   11745 `PREDECREMENT_EXPR'
   11746 `PREINCREMENT_EXPR'
   11747 `POSTDECREMENT_EXPR'
   11748 `POSTINCREMENT_EXPR'
   11749      These nodes represent increment and decrement expressions.  The
   11750      value of the single operand is computed, and the operand
   11751      incremented or decremented.  In the case of `PREDECREMENT_EXPR' and
   11752      `PREINCREMENT_EXPR', the value of the expression is the value
   11753      resulting after the increment or decrement; in the case of
   11754      `POSTDECREMENT_EXPR' and `POSTINCREMENT_EXPR' is the value before
   11755      the increment or decrement occurs.  The type of the operand, like
   11756      that of the result, will be either integral, boolean, or
   11757      floating-point.
   11758 
   11759 `FIX_TRUNC_EXPR'
   11760      These nodes represent conversion of a floating-point value to an
   11761      integer.  The single operand will have a floating-point type, while
   11762      the complete expression will have an integral (or boolean) type.
   11763      The operand is rounded towards zero.
   11764 
   11765 `FLOAT_EXPR'
   11766      These nodes represent conversion of an integral (or boolean) value
   11767      to a floating-point value.  The single operand will have integral
   11768      type, while the complete expression will have a floating-point
   11769      type.
   11770 
   11771      FIXME: How is the operand supposed to be rounded?  Is this
   11772      dependent on `-mieee'?
   11773 
   11774 `COMPLEX_EXPR'
   11775      These nodes are used to represent complex numbers constructed from
   11776      two expressions of the same (integer or real) type.  The first
   11777      operand is the real part and the second operand is the imaginary
   11778      part.
   11779 
   11780 `CONJ_EXPR'
   11781      These nodes represent the conjugate of their operand.
   11782 
   11783 `REALPART_EXPR'
   11784 `IMAGPART_EXPR'
   11785      These nodes represent respectively the real and the imaginary parts
   11786      of complex numbers (their sole argument).
   11787 
   11788 `NON_LVALUE_EXPR'
   11789      These nodes indicate that their one and only operand is not an
   11790      lvalue.  A back end can treat these identically to the single
   11791      operand.
   11792 
   11793 `NOP_EXPR'
   11794      These nodes are used to represent conversions that do not require
   11795      any code-generation.  For example, conversion of a `char*' to an
   11796      `int*' does not require any code be generated; such a conversion is
   11797      represented by a `NOP_EXPR'.  The single operand is the expression
   11798      to be converted.  The conversion from a pointer to a reference is
   11799      also represented with a `NOP_EXPR'.
   11800 
   11801 `CONVERT_EXPR'
   11802      These nodes are similar to `NOP_EXPR's, but are used in those
   11803      situations where code may need to be generated.  For example, if an
   11804      `int*' is converted to an `int' code may need to be generated on
   11805      some platforms.  These nodes are never used for C++-specific
   11806      conversions, like conversions between pointers to different
   11807      classes in an inheritance hierarchy.  Any adjustments that need to
   11808      be made in such cases are always indicated explicitly.  Similarly,
   11809      a user-defined conversion is never represented by a
   11810      `CONVERT_EXPR'; instead, the function calls are made explicit.
   11811 
   11812 `FIXED_CONVERT_EXPR'
   11813      These nodes are used to represent conversions that involve
   11814      fixed-point values.  For example, from a fixed-point value to
   11815      another fixed-point value, from an integer to a fixed-point value,
   11816      from a fixed-point value to an integer, from a floating-point
   11817      value to a fixed-point value, or from a fixed-point value to a
   11818      floating-point value.
   11819 
   11820 `LSHIFT_EXPR'
   11821 `RSHIFT_EXPR'
   11822      These nodes represent left and right shifts, respectively.  The
   11823      first operand is the value to shift; it will always be of integral
   11824      type.  The second operand is an expression for the number of bits
   11825      by which to shift.  Right shift should be treated as arithmetic,
   11826      i.e., the high-order bits should be zero-filled when the
   11827      expression has unsigned type and filled with the sign bit when the
   11828      expression has signed type.  Note that the result is undefined if
   11829      the second operand is larger than or equal to the first operand's
   11830      type size.
   11831 
   11832 `BIT_IOR_EXPR'
   11833 `BIT_XOR_EXPR'
   11834 `BIT_AND_EXPR'
   11835      These nodes represent bitwise inclusive or, bitwise exclusive or,
   11836      and bitwise and, respectively.  Both operands will always have
   11837      integral type.
   11838 
   11839 `TRUTH_ANDIF_EXPR'
   11840 `TRUTH_ORIF_EXPR'
   11841      These nodes represent logical "and" and logical "or", respectively.
   11842      These operators are not strict; i.e., the second operand is
   11843      evaluated only if the value of the expression is not determined by
   11844      evaluation of the first operand.  The type of the operands and
   11845      that of the result are always of `BOOLEAN_TYPE' or `INTEGER_TYPE'.
   11846 
   11847 `TRUTH_AND_EXPR'
   11848 `TRUTH_OR_EXPR'
   11849 `TRUTH_XOR_EXPR'
   11850      These nodes represent logical and, logical or, and logical
   11851      exclusive or.  They are strict; both arguments are always
   11852      evaluated.  There are no corresponding operators in C or C++, but
   11853      the front end will sometimes generate these expressions anyhow, if
   11854      it can tell that strictness does not matter.  The type of the
   11855      operands and that of the result are always of `BOOLEAN_TYPE' or
   11856      `INTEGER_TYPE'.
   11857 
   11858 `POINTER_PLUS_EXPR'
   11859      This node represents pointer arithmetic.  The first operand is
   11860      always a pointer/reference type.  The second operand is always an
   11861      unsigned integer type compatible with sizetype.  This is the only
   11862      binary arithmetic operand that can operate on pointer types.
   11863 
   11864 `PLUS_EXPR'
   11865 `MINUS_EXPR'
   11866 `MULT_EXPR'
   11867      These nodes represent various binary arithmetic operations.
   11868      Respectively, these operations are addition, subtraction (of the
   11869      second operand from the first) and multiplication.  Their operands
   11870      may have either integral or floating type, but there will never be
   11871      case in which one operand is of floating type and the other is of
   11872      integral type.
   11873 
   11874      The behavior of these operations on signed arithmetic overflow is
   11875      controlled by the `flag_wrapv' and `flag_trapv' variables.
   11876 
   11877 `RDIV_EXPR'
   11878      This node represents a floating point division operation.
   11879 
   11880 `TRUNC_DIV_EXPR'
   11881 `FLOOR_DIV_EXPR'
   11882 `CEIL_DIV_EXPR'
   11883 `ROUND_DIV_EXPR'
   11884      These nodes represent integer division operations that return an
   11885      integer result.  `TRUNC_DIV_EXPR' rounds towards zero,
   11886      `FLOOR_DIV_EXPR' rounds towards negative infinity, `CEIL_DIV_EXPR'
   11887      rounds towards positive infinity and `ROUND_DIV_EXPR' rounds to
   11888      the closest integer.  Integer division in C and C++ is truncating,
   11889      i.e. `TRUNC_DIV_EXPR'.
   11890 
   11891      The behavior of these operations on signed arithmetic overflow,
   11892      when dividing the minimum signed integer by minus one, is
   11893      controlled by the `flag_wrapv' and `flag_trapv' variables.
   11894 
   11895 `TRUNC_MOD_EXPR'
   11896 `FLOOR_MOD_EXPR'
   11897 `CEIL_MOD_EXPR'
   11898 `ROUND_MOD_EXPR'
   11899      These nodes represent the integer remainder or modulus operation.
   11900      The integer modulus of two operands `a' and `b' is defined as `a -
   11901      (a/b)*b' where the division calculated using the corresponding
   11902      division operator.  Hence for `TRUNC_MOD_EXPR' this definition
   11903      assumes division using truncation towards zero, i.e.
   11904      `TRUNC_DIV_EXPR'.  Integer remainder in C and C++ uses truncating
   11905      division, i.e. `TRUNC_MOD_EXPR'.
   11906 
   11907 `EXACT_DIV_EXPR'
   11908      The `EXACT_DIV_EXPR' code is used to represent integer divisions
   11909      where the numerator is known to be an exact multiple of the
   11910      denominator.  This allows the backend to choose between the faster
   11911      of `TRUNC_DIV_EXPR', `CEIL_DIV_EXPR' and `FLOOR_DIV_EXPR' for the
   11912      current target.
   11913 
   11914 `LT_EXPR'
   11915 `LE_EXPR'
   11916 `GT_EXPR'
   11917 `GE_EXPR'
   11918 `EQ_EXPR'
   11919 `NE_EXPR'
   11920      These nodes represent the less than, less than or equal to, greater
   11921      than, greater than or equal to, equal, and not equal comparison
   11922      operators.  The first and second operand with either be both of
   11923      integral type or both of floating type.  The result type of these
   11924      expressions will always be of integral or boolean type.  These
   11925      operations return the result type's zero value for false, and the
   11926      result type's one value for true.
   11927 
   11928      For floating point comparisons, if we honor IEEE NaNs and either
   11929      operand is NaN, then `NE_EXPR' always returns true and the
   11930      remaining operators always return false.  On some targets,
   11931      comparisons against an IEEE NaN, other than equality and
   11932      inequality, may generate a floating point exception.
   11933 
   11934 `ORDERED_EXPR'
   11935 `UNORDERED_EXPR'
   11936      These nodes represent non-trapping ordered and unordered comparison
   11937      operators.  These operations take two floating point operands and
   11938      determine whether they are ordered or unordered relative to each
   11939      other.  If either operand is an IEEE NaN, their comparison is
   11940      defined to be unordered, otherwise the comparison is defined to be
   11941      ordered.  The result type of these expressions will always be of
   11942      integral or boolean type.  These operations return the result
   11943      type's zero value for false, and the result type's one value for
   11944      true.
   11945 
   11946 `UNLT_EXPR'
   11947 `UNLE_EXPR'
   11948 `UNGT_EXPR'
   11949 `UNGE_EXPR'
   11950 `UNEQ_EXPR'
   11951 `LTGT_EXPR'
   11952      These nodes represent the unordered comparison operators.  These
   11953      operations take two floating point operands and determine whether
   11954      the operands are unordered or are less than, less than or equal to,
   11955      greater than, greater than or equal to, or equal respectively.  For
   11956      example, `UNLT_EXPR' returns true if either operand is an IEEE NaN
   11957      or the first operand is less than the second.  With the possible
   11958      exception of `LTGT_EXPR', all of these operations are guaranteed
   11959      not to generate a floating point exception.  The result type of
   11960      these expressions will always be of integral or boolean type.
   11961      These operations return the result type's zero value for false,
   11962      and the result type's one value for true.
   11963 
   11964 `MODIFY_EXPR'
   11965      These nodes represent assignment.  The left-hand side is the first
   11966      operand; the right-hand side is the second operand.  The left-hand
   11967      side will be a `VAR_DECL', `INDIRECT_REF', `COMPONENT_REF', or
   11968      other lvalue.
   11969 
   11970      These nodes are used to represent not only assignment with `=' but
   11971      also compound assignments (like `+='), by reduction to `='
   11972      assignment.  In other words, the representation for `i += 3' looks
   11973      just like that for `i = i + 3'.
   11974 
   11975 `INIT_EXPR'
   11976      These nodes are just like `MODIFY_EXPR', but are used only when a
   11977      variable is initialized, rather than assigned to subsequently.
   11978      This means that we can assume that the target of the
   11979      initialization is not used in computing its own value; any
   11980      reference to the lhs in computing the rhs is undefined.
   11981 
   11982 `COMPOUND_EXPR'
   11983      These nodes represent comma-expressions.  The first operand is an
   11984      expression whose value is computed and thrown away prior to the
   11985      evaluation of the second operand.  The value of the entire
   11986      expression is the value of the second operand.
   11987 
   11988 `COND_EXPR'
   11989      These nodes represent `?:' expressions.  The first operand is of
   11990      boolean or integral type.  If it evaluates to a nonzero value, the
   11991      second operand should be evaluated, and returned as the value of
   11992      the expression.  Otherwise, the third operand is evaluated, and
   11993      returned as the value of the expression.
   11994 
   11995      The second operand must have the same type as the entire
   11996      expression, unless it unconditionally throws an exception or calls
   11997      a noreturn function, in which case it should have void type.  The
   11998      same constraints apply to the third operand.  This allows array
   11999      bounds checks to be represented conveniently as `(i >= 0 && i <
   12000      10) ? i : abort()'.
   12001 
   12002      As a GNU extension, the C language front-ends allow the second
   12003      operand of the `?:' operator may be omitted in the source.  For
   12004      example, `x ? : 3' is equivalent to `x ? x : 3', assuming that `x'
   12005      is an expression without side-effects.  In the tree
   12006      representation, however, the second operand is always present,
   12007      possibly protected by `SAVE_EXPR' if the first argument does cause
   12008      side-effects.
   12009 
   12010 `CALL_EXPR'
   12011      These nodes are used to represent calls to functions, including
   12012      non-static member functions.  `CALL_EXPR's are implemented as
   12013      expression nodes with a variable number of operands.  Rather than
   12014      using `TREE_OPERAND' to extract them, it is preferable to use the
   12015      specialized accessor macros and functions that operate
   12016      specifically on `CALL_EXPR' nodes.
   12017 
   12018      `CALL_EXPR_FN' returns a pointer to the function to call; it is
   12019      always an expression whose type is a `POINTER_TYPE'.
   12020 
   12021      The number of arguments to the call is returned by
   12022      `call_expr_nargs', while the arguments themselves can be accessed
   12023      with the `CALL_EXPR_ARG' macro.  The arguments are zero-indexed
   12024      and numbered left-to-right.  You can iterate over the arguments
   12025      using `FOR_EACH_CALL_EXPR_ARG', as in:
   12026 
   12027           tree call, arg;
   12028           call_expr_arg_iterator iter;
   12029           FOR_EACH_CALL_EXPR_ARG (arg, iter, call)
   12030             /* arg is bound to successive arguments of call.  */
   12031             ...;
   12032 
   12033      For non-static member functions, there will be an operand
   12034      corresponding to the `this' pointer.  There will always be
   12035      expressions corresponding to all of the arguments, even if the
   12036      function is declared with default arguments and some arguments are
   12037      not explicitly provided at the call sites.
   12038 
   12039      `CALL_EXPR's also have a `CALL_EXPR_STATIC_CHAIN' operand that is
   12040      used to implement nested functions.  This operand is otherwise
   12041      null.
   12042 
   12043 `CLEANUP_POINT_EXPR'
   12044      These nodes represent full-expressions.  The single operand is an
   12045      expression to evaluate.  Any destructor calls engendered by the
   12046      creation of temporaries during the evaluation of that expression
   12047      should be performed immediately after the expression is evaluated.
   12048 
   12049 `CONSTRUCTOR'
   12050      These nodes represent the brace-enclosed initializers for a
   12051      structure or array.  The first operand is reserved for use by the
   12052      back end.  The second operand is a `TREE_LIST'.  If the
   12053      `TREE_TYPE' of the `CONSTRUCTOR' is a `RECORD_TYPE' or
   12054      `UNION_TYPE', then the `TREE_PURPOSE' of each node in the
   12055      `TREE_LIST' will be a `FIELD_DECL' and the `TREE_VALUE' of each
   12056      node will be the expression used to initialize that field.
   12057 
   12058      If the `TREE_TYPE' of the `CONSTRUCTOR' is an `ARRAY_TYPE', then
   12059      the `TREE_PURPOSE' of each element in the `TREE_LIST' will be an
   12060      `INTEGER_CST' or a `RANGE_EXPR' of two `INTEGER_CST's.  A single
   12061      `INTEGER_CST' indicates which element of the array (indexed from
   12062      zero) is being assigned to.  A `RANGE_EXPR' indicates an inclusive
   12063      range of elements to initialize.  In both cases the `TREE_VALUE'
   12064      is the corresponding initializer.  It is re-evaluated for each
   12065      element of a `RANGE_EXPR'.  If the `TREE_PURPOSE' is `NULL_TREE',
   12066      then the initializer is for the next available array element.
   12067 
   12068      In the front end, you should not depend on the fields appearing in
   12069      any particular order.  However, in the middle end, fields must
   12070      appear in declaration order.  You should not assume that all
   12071      fields will be represented.  Unrepresented fields will be set to
   12072      zero.
   12073 
   12074 `COMPOUND_LITERAL_EXPR'
   12075      These nodes represent ISO C99 compound literals.  The
   12076      `COMPOUND_LITERAL_EXPR_DECL_EXPR' is a `DECL_EXPR' containing an
   12077      anonymous `VAR_DECL' for the unnamed object represented by the
   12078      compound literal; the `DECL_INITIAL' of that `VAR_DECL' is a
   12079      `CONSTRUCTOR' representing the brace-enclosed list of initializers
   12080      in the compound literal.  That anonymous `VAR_DECL' can also be
   12081      accessed directly by the `COMPOUND_LITERAL_EXPR_DECL' macro.
   12082 
   12083 `SAVE_EXPR'
   12084      A `SAVE_EXPR' represents an expression (possibly involving
   12085      side-effects) that is used more than once.  The side-effects should
   12086      occur only the first time the expression is evaluated.  Subsequent
   12087      uses should just reuse the computed value.  The first operand to
   12088      the `SAVE_EXPR' is the expression to evaluate.  The side-effects
   12089      should be executed where the `SAVE_EXPR' is first encountered in a
   12090      depth-first preorder traversal of the expression tree.
   12091 
   12092 `TARGET_EXPR'
   12093      A `TARGET_EXPR' represents a temporary object.  The first operand
   12094      is a `VAR_DECL' for the temporary variable.  The second operand is
   12095      the initializer for the temporary.  The initializer is evaluated
   12096      and, if non-void, copied (bitwise) into the temporary.  If the
   12097      initializer is void, that means that it will perform the
   12098      initialization itself.
   12099 
   12100      Often, a `TARGET_EXPR' occurs on the right-hand side of an
   12101      assignment, or as the second operand to a comma-expression which is
   12102      itself the right-hand side of an assignment, etc.  In this case,
   12103      we say that the `TARGET_EXPR' is "normal"; otherwise, we say it is
   12104      "orphaned".  For a normal `TARGET_EXPR' the temporary variable
   12105      should be treated as an alias for the left-hand side of the
   12106      assignment, rather than as a new temporary variable.
   12107 
   12108      The third operand to the `TARGET_EXPR', if present, is a
   12109      cleanup-expression (i.e., destructor call) for the temporary.  If
   12110      this expression is orphaned, then this expression must be executed
   12111      when the statement containing this expression is complete.  These
   12112      cleanups must always be executed in the order opposite to that in
   12113      which they were encountered.  Note that if a temporary is created
   12114      on one branch of a conditional operator (i.e., in the second or
   12115      third operand to a `COND_EXPR'), the cleanup must be run only if
   12116      that branch is actually executed.
   12117 
   12118 `VA_ARG_EXPR'
   12119      This node is used to implement support for the C/C++ variable
   12120      argument-list mechanism.  It represents expressions like `va_arg
   12121      (ap, type)'.  Its `TREE_TYPE' yields the tree representation for
   12122      `type' and its sole argument yields the representation for `ap'.
   12123 
   12124 
   12125 
   12126 File: gccint.info,  Node: Vectors,  Prev: Unary and Binary Expressions,  Up: Expression trees
   12127 
   12128 11.6.4 Vectors
   12129 --------------
   12130 
   12131 `VEC_LSHIFT_EXPR'
   12132 `VEC_RSHIFT_EXPR'
   12133      These nodes represent whole vector left and right shifts,
   12134      respectively.  The first operand is the vector to shift; it will
   12135      always be of vector type.  The second operand is an expression for
   12136      the number of bits by which to shift.  Note that the result is
   12137      undefined if the second operand is larger than or equal to the
   12138      first operand's type size.
   12139 
   12140 `VEC_WIDEN_MULT_HI_EXPR'
   12141 `VEC_WIDEN_MULT_LO_EXPR'
   12142      These nodes represent widening vector multiplication of the high
   12143      and low parts of the two input vectors, respectively.  Their
   12144      operands are vectors that contain the same number of elements
   12145      (`N') of the same integral type.  The result is a vector that
   12146      contains half as many elements, of an integral type whose size is
   12147      twice as wide.  In the case of `VEC_WIDEN_MULT_HI_EXPR' the high
   12148      `N/2' elements of the two vector are multiplied to produce the
   12149      vector of `N/2' products. In the case of `VEC_WIDEN_MULT_LO_EXPR'
   12150      the low `N/2' elements of the two vector are multiplied to produce
   12151      the vector of `N/2' products.
   12152 
   12153 `VEC_UNPACK_HI_EXPR'
   12154 `VEC_UNPACK_LO_EXPR'
   12155      These nodes represent unpacking of the high and low parts of the
   12156      input vector, respectively.  The single operand is a vector that
   12157      contains `N' elements of the same integral or floating point type.
   12158      The result is a vector that contains half as many elements, of an
   12159      integral or floating point type whose size is twice as wide.  In
   12160      the case of `VEC_UNPACK_HI_EXPR' the high `N/2' elements of the
   12161      vector are extracted and widened (promoted).  In the case of
   12162      `VEC_UNPACK_LO_EXPR' the low `N/2' elements of the vector are
   12163      extracted and widened (promoted).
   12164 
   12165 `VEC_UNPACK_FLOAT_HI_EXPR'
   12166 `VEC_UNPACK_FLOAT_LO_EXPR'
   12167      These nodes represent unpacking of the high and low parts of the
   12168      input vector, where the values are converted from fixed point to
   12169      floating point.  The single operand is a vector that contains `N'
   12170      elements of the same integral type.  The result is a vector that
   12171      contains half as many elements of a floating point type whose size
   12172      is twice as wide.  In the case of `VEC_UNPACK_HI_EXPR' the high
   12173      `N/2' elements of the vector are extracted, converted and widened.
   12174      In the case of `VEC_UNPACK_LO_EXPR' the low `N/2' elements of the
   12175      vector are extracted, converted and widened.
   12176 
   12177 `VEC_PACK_TRUNC_EXPR'
   12178      This node represents packing of truncated elements of the two
   12179      input vectors into the output vector.  Input operands are vectors
   12180      that contain the same number of elements of the same integral or
   12181      floating point type.  The result is a vector that contains twice
   12182      as many elements of an integral or floating point type whose size
   12183      is half as wide. The elements of the two vectors are demoted and
   12184      merged (concatenated) to form the output vector.
   12185 
   12186 `VEC_PACK_SAT_EXPR'
   12187      This node represents packing of elements of the two input vectors
   12188      into the output vector using saturation.  Input operands are
   12189      vectors that contain the same number of elements of the same
   12190      integral type.  The result is a vector that contains twice as many
   12191      elements of an integral type whose size is half as wide.  The
   12192      elements of the two vectors are demoted and merged (concatenated)
   12193      to form the output vector.
   12194 
   12195 `VEC_PACK_FIX_TRUNC_EXPR'
   12196      This node represents packing of elements of the two input vectors
   12197      into the output vector, where the values are converted from
   12198      floating point to fixed point.  Input operands are vectors that
   12199      contain the same number of elements of a floating point type.  The
   12200      result is a vector that contains twice as many elements of an
   12201      integral type whose size is half as wide.  The elements of the two
   12202      vectors are merged (concatenated) to form the output vector.
   12203 
   12204 `VEC_EXTRACT_EVEN_EXPR'
   12205 `VEC_EXTRACT_ODD_EXPR'
   12206      These nodes represent extracting of the even/odd elements of the
   12207      two input vectors, respectively. Their operands and result are
   12208      vectors that contain the same number of elements of the same type.
   12209 
   12210 `VEC_INTERLEAVE_HIGH_EXPR'
   12211 `VEC_INTERLEAVE_LOW_EXPR'
   12212      These nodes represent merging and interleaving of the high/low
   12213      elements of the two input vectors, respectively. The operands and
   12214      the result are vectors that contain the same number of elements
   12215      (`N') of the same type.  In the case of
   12216      `VEC_INTERLEAVE_HIGH_EXPR', the high `N/2' elements of the first
   12217      input vector are interleaved with the high `N/2' elements of the
   12218      second input vector. In the case of `VEC_INTERLEAVE_LOW_EXPR', the
   12219      low `N/2' elements of the first input vector are interleaved with
   12220      the low `N/2' elements of the second input vector.
   12221 
   12222 
   12223 
   12224 File: gccint.info,  Node: Statements,  Next: Functions,  Prev: Expression trees,  Up: GENERIC
   12225 
   12226 11.7 Statements
   12227 ===============
   12228 
   12229 Most statements in GIMPLE are assignment statements, represented by
   12230 `GIMPLE_ASSIGN'.  No other C expressions can appear at statement level;
   12231 a reference to a volatile object is converted into a `GIMPLE_ASSIGN'.
   12232 
   12233  There are also several varieties of complex statements.
   12234 
   12235 * Menu:
   12236 
   12237 * Basic Statements::
   12238 * Blocks::
   12239 * Statement Sequences::
   12240 * Empty Statements::
   12241 * Jumps::
   12242 * Cleanups::
   12243 * OpenMP::
   12244 
   12245 
   12246 File: gccint.info,  Node: Basic Statements,  Next: Blocks,  Up: Statements
   12247 
   12248 11.7.1 Basic Statements
   12249 -----------------------
   12250 
   12251 `ASM_EXPR'
   12252      Used to represent an inline assembly statement.  For an inline
   12253      assembly statement like:
   12254           asm ("mov x, y");
   12255      The `ASM_STRING' macro will return a `STRING_CST' node for `"mov
   12256      x, y"'.  If the original statement made use of the
   12257      extended-assembly syntax, then `ASM_OUTPUTS', `ASM_INPUTS', and
   12258      `ASM_CLOBBERS' will be the outputs, inputs, and clobbers for the
   12259      statement, represented as `STRING_CST' nodes.  The
   12260      extended-assembly syntax looks like:
   12261           asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
   12262      The first string is the `ASM_STRING', containing the instruction
   12263      template.  The next two strings are the output and inputs,
   12264      respectively; this statement has no clobbers.  As this example
   12265      indicates, "plain" assembly statements are merely a special case
   12266      of extended assembly statements; they have no cv-qualifiers,
   12267      outputs, inputs, or clobbers.  All of the strings will be
   12268      `NUL'-terminated, and will contain no embedded `NUL'-characters.
   12269 
   12270      If the assembly statement is declared `volatile', or if the
   12271      statement was not an extended assembly statement, and is therefore
   12272      implicitly volatile, then the predicate `ASM_VOLATILE_P' will hold
   12273      of the `ASM_EXPR'.
   12274 
   12275 `DECL_EXPR'
   12276      Used to represent a local declaration.  The `DECL_EXPR_DECL' macro
   12277      can be used to obtain the entity declared.  This declaration may
   12278      be a `LABEL_DECL', indicating that the label declared is a local
   12279      label.  (As an extension, GCC allows the declaration of labels
   12280      with scope.)  In C, this declaration may be a `FUNCTION_DECL',
   12281      indicating the use of the GCC nested function extension.  For more
   12282      information, *note Functions::.
   12283 
   12284 `LABEL_EXPR'
   12285      Used to represent a label.  The `LABEL_DECL' declared by this
   12286      statement can be obtained with the `LABEL_EXPR_LABEL' macro.  The
   12287      `IDENTIFIER_NODE' giving the name of the label can be obtained from
   12288      the `LABEL_DECL' with `DECL_NAME'.
   12289 
   12290 `GOTO_EXPR'
   12291      Used to represent a `goto' statement.  The `GOTO_DESTINATION' will
   12292      usually be a `LABEL_DECL'.  However, if the "computed goto"
   12293      extension has been used, the `GOTO_DESTINATION' will be an
   12294      arbitrary expression indicating the destination.  This expression
   12295      will always have pointer type.
   12296 
   12297 `RETURN_EXPR'
   12298      Used to represent a `return' statement.  Operand 0 represents the
   12299      value to return.  It should either be the `RESULT_DECL' for the
   12300      containing function, or a `MODIFY_EXPR' or `INIT_EXPR' setting the
   12301      function's `RESULT_DECL'.  It will be `NULL_TREE' if the statement
   12302      was just
   12303           return;
   12304 
   12305 `LOOP_EXPR'
   12306      These nodes represent "infinite" loops.  The `LOOP_EXPR_BODY'
   12307      represents the body of the loop.  It should be executed forever,
   12308      unless an `EXIT_EXPR' is encountered.
   12309 
   12310 `EXIT_EXPR'
   12311      These nodes represent conditional exits from the nearest enclosing
   12312      `LOOP_EXPR'.  The single operand is the condition; if it is
   12313      nonzero, then the loop should be exited.  An `EXIT_EXPR' will only
   12314      appear within a `LOOP_EXPR'.
   12315 
   12316 `SWITCH_STMT'
   12317      Used to represent a `switch' statement.  The `SWITCH_STMT_COND' is
   12318      the expression on which the switch is occurring.  See the
   12319      documentation for an `IF_STMT' for more information on the
   12320      representation used for the condition.  The `SWITCH_STMT_BODY' is
   12321      the body of the switch statement.   The `SWITCH_STMT_TYPE' is the
   12322      original type of switch expression as given in the source, before
   12323      any compiler conversions.
   12324 
   12325 `CASE_LABEL_EXPR'
   12326      Use to represent a `case' label, range of `case' labels, or a
   12327      `default' label.  If `CASE_LOW' is `NULL_TREE', then this is a
   12328      `default' label.  Otherwise, if `CASE_HIGH' is `NULL_TREE', then
   12329      this is an ordinary `case' label.  In this case, `CASE_LOW' is an
   12330      expression giving the value of the label.  Both `CASE_LOW' and
   12331      `CASE_HIGH' are `INTEGER_CST' nodes.  These values will have the
   12332      same type as the condition expression in the switch statement.
   12333 
   12334      Otherwise, if both `CASE_LOW' and `CASE_HIGH' are defined, the
   12335      statement is a range of case labels.  Such statements originate
   12336      with the extension that allows users to write things of the form:
   12337           case 2 ... 5:
   12338      The first value will be `CASE_LOW', while the second will be
   12339      `CASE_HIGH'.
   12340 
   12341 
   12342 
   12343 File: gccint.info,  Node: Blocks,  Next: Statement Sequences,  Prev: Basic Statements,  Up: Statements
   12344 
   12345 11.7.2 Blocks
   12346 -------------
   12347 
   12348 Block scopes and the variables they declare in GENERIC are expressed
   12349 using the `BIND_EXPR' code, which in previous versions of GCC was
   12350 primarily used for the C statement-expression extension.
   12351 
   12352  Variables in a block are collected into `BIND_EXPR_VARS' in
   12353 declaration order through their `TREE_CHAIN' field.  Any runtime
   12354 initialization is moved out of `DECL_INITIAL' and into a statement in
   12355 the controlled block.  When gimplifying from C or C++, this
   12356 initialization replaces the `DECL_STMT'.  These variables will never
   12357 require cleanups.  The scope of these variables is just the body
   12358 
   12359  Variable-length arrays (VLAs) complicate this process, as their size
   12360 often refers to variables initialized earlier in the block.  To handle
   12361 this, we currently split the block at that point, and move the VLA into
   12362 a new, inner `BIND_EXPR'.  This strategy may change in the future.
   12363 
   12364  A C++ program will usually contain more `BIND_EXPR's than there are
   12365 syntactic blocks in the source code, since several C++ constructs have
   12366 implicit scopes associated with them.  On the other hand, although the
   12367 C++ front end uses pseudo-scopes to handle cleanups for objects with
   12368 destructors, these don't translate into the GIMPLE form; multiple
   12369 declarations at the same level use the same `BIND_EXPR'.
   12370 
   12371 
   12372 File: gccint.info,  Node: Statement Sequences,  Next: Empty Statements,  Prev: Blocks,  Up: Statements
   12373 
   12374 11.7.3 Statement Sequences
   12375 --------------------------
   12376 
   12377 Multiple statements at the same nesting level are collected into a
   12378 `STATEMENT_LIST'.  Statement lists are modified and traversed using the
   12379 interface in `tree-iterator.h'.
   12380 
   12381 
   12382 File: gccint.info,  Node: Empty Statements,  Next: Jumps,  Prev: Statement Sequences,  Up: Statements
   12383 
   12384 11.7.4 Empty Statements
   12385 -----------------------
   12386 
   12387 Whenever possible, statements with no effect are discarded.  But if
   12388 they are nested within another construct which cannot be discarded for
   12389 some reason, they are instead replaced with an empty statement,
   12390 generated by `build_empty_stmt'.  Initially, all empty statements were
   12391 shared, after the pattern of the Java front end, but this caused a lot
   12392 of trouble in practice.
   12393 
   12394  An empty statement is represented as `(void)0'.
   12395 
   12396 
   12397 File: gccint.info,  Node: Jumps,  Next: Cleanups,  Prev: Empty Statements,  Up: Statements
   12398 
   12399 11.7.5 Jumps
   12400 ------------
   12401 
   12402 Other jumps are expressed by either `GOTO_EXPR' or `RETURN_EXPR'.
   12403 
   12404  The operand of a `GOTO_EXPR' must be either a label or a variable
   12405 containing the address to jump to.
   12406 
   12407  The operand of a `RETURN_EXPR' is either `NULL_TREE', `RESULT_DECL',
   12408 or a `MODIFY_EXPR' which sets the return value.  It would be nice to
   12409 move the `MODIFY_EXPR' into a separate statement, but the special
   12410 return semantics in `expand_return' make that difficult.  It may still
   12411 happen in the future, perhaps by moving most of that logic into
   12412 `expand_assignment'.
   12413 
   12414 
   12415 File: gccint.info,  Node: Cleanups,  Next: OpenMP,  Prev: Jumps,  Up: Statements
   12416 
   12417 11.7.6 Cleanups
   12418 ---------------
   12419 
   12420 Destructors for local C++ objects and similar dynamic cleanups are
   12421 represented in GIMPLE by a `TRY_FINALLY_EXPR'.  `TRY_FINALLY_EXPR' has
   12422 two operands, both of which are a sequence of statements to execute.
   12423 The first sequence is executed.  When it completes the second sequence
   12424 is executed.
   12425 
   12426  The first sequence may complete in the following ways:
   12427 
   12428   1. Execute the last statement in the sequence and fall off the end.
   12429 
   12430   2. Execute a goto statement (`GOTO_EXPR') to an ordinary label
   12431      outside the sequence.
   12432 
   12433   3. Execute a return statement (`RETURN_EXPR').
   12434 
   12435   4. Throw an exception.  This is currently not explicitly represented
   12436      in GIMPLE.
   12437 
   12438 
   12439  The second sequence is not executed if the first sequence completes by
   12440 calling `setjmp' or `exit' or any other function that does not return.
   12441 The second sequence is also not executed if the first sequence
   12442 completes via a non-local goto or a computed goto (in general the
   12443 compiler does not know whether such a goto statement exits the first
   12444 sequence or not, so we assume that it doesn't).
   12445 
   12446  After the second sequence is executed, if it completes normally by
   12447 falling off the end, execution continues wherever the first sequence
   12448 would have continued, by falling off the end, or doing a goto, etc.
   12449 
   12450  `TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs
   12451 to appear on every edge out of the controlled block; this reduces the
   12452 freedom to move code across these edges.  Therefore, the EH lowering
   12453 pass which runs before most of the optimization passes eliminates these
   12454 expressions by explicitly adding the cleanup to each edge.  Rethrowing
   12455 the exception is represented using `RESX_EXPR'.
   12456 
   12457 
   12458 File: gccint.info,  Node: OpenMP,  Prev: Cleanups,  Up: Statements
   12459 
   12460 11.7.7 OpenMP
   12461 -------------
   12462 
   12463 All the statements starting with `OMP_' represent directives and
   12464 clauses used by the OpenMP API `http://www.openmp.org/'.
   12465 
   12466 `OMP_PARALLEL'
   12467      Represents `#pragma omp parallel [clause1 ... clauseN]'. It has
   12468      four operands:
   12469 
   12470      Operand `OMP_PARALLEL_BODY' is valid while in GENERIC and High
   12471      GIMPLE forms.  It contains the body of code to be executed by all
   12472      the threads.  During GIMPLE lowering, this operand becomes `NULL'
   12473      and the body is emitted linearly after `OMP_PARALLEL'.
   12474 
   12475      Operand `OMP_PARALLEL_CLAUSES' is the list of clauses associated
   12476      with the directive.
   12477 
   12478      Operand `OMP_PARALLEL_FN' is created by `pass_lower_omp', it
   12479      contains the `FUNCTION_DECL' for the function that will contain
   12480      the body of the parallel region.
   12481 
   12482      Operand `OMP_PARALLEL_DATA_ARG' is also created by
   12483      `pass_lower_omp'. If there are shared variables to be communicated
   12484      to the children threads, this operand will contain the `VAR_DECL'
   12485      that contains all the shared values and variables.
   12486 
   12487 `OMP_FOR'
   12488      Represents `#pragma omp for [clause1 ... clauseN]'.  It has 5
   12489      operands:
   12490 
   12491      Operand `OMP_FOR_BODY' contains the loop body.
   12492 
   12493      Operand `OMP_FOR_CLAUSES' is the list of clauses associated with
   12494      the directive.
   12495 
   12496      Operand `OMP_FOR_INIT' is the loop initialization code of the form
   12497      `VAR = N1'.
   12498 
   12499      Operand `OMP_FOR_COND' is the loop conditional expression of the
   12500      form `VAR {<,>,<=,>=} N2'.
   12501 
   12502      Operand `OMP_FOR_INCR' is the loop index increment of the form
   12503      `VAR {+=,-=} INCR'.
   12504 
   12505      Operand `OMP_FOR_PRE_BODY' contains side-effect code from operands
   12506      `OMP_FOR_INIT', `OMP_FOR_COND' and `OMP_FOR_INC'.  These
   12507      side-effects are part of the `OMP_FOR' block but must be evaluated
   12508      before the start of loop body.
   12509 
   12510      The loop index variable `VAR' must be a signed integer variable,
   12511      which is implicitly private to each thread.  Bounds `N1' and `N2'
   12512      and the increment expression `INCR' are required to be loop
   12513      invariant integer expressions that are evaluated without any
   12514      synchronization. The evaluation order, frequency of evaluation and
   12515      side-effects are unspecified by the standard.
   12516 
   12517 `OMP_SECTIONS'
   12518      Represents `#pragma omp sections [clause1 ... clauseN]'.
   12519 
   12520      Operand `OMP_SECTIONS_BODY' contains the sections body, which in
   12521      turn contains a set of `OMP_SECTION' nodes for each of the
   12522      concurrent sections delimited by `#pragma omp section'.
   12523 
   12524      Operand `OMP_SECTIONS_CLAUSES' is the list of clauses associated
   12525      with the directive.
   12526 
   12527 `OMP_SECTION'
   12528      Section delimiter for `OMP_SECTIONS'.
   12529 
   12530 `OMP_SINGLE'
   12531      Represents `#pragma omp single'.
   12532 
   12533      Operand `OMP_SINGLE_BODY' contains the body of code to be executed
   12534      by a single thread.
   12535 
   12536      Operand `OMP_SINGLE_CLAUSES' is the list of clauses associated
   12537      with the directive.
   12538 
   12539 `OMP_MASTER'
   12540      Represents `#pragma omp master'.
   12541 
   12542      Operand `OMP_MASTER_BODY' contains the body of code to be executed
   12543      by the master thread.
   12544 
   12545 `OMP_ORDERED'
   12546      Represents `#pragma omp ordered'.
   12547 
   12548      Operand `OMP_ORDERED_BODY' contains the body of code to be
   12549      executed in the sequential order dictated by the loop index
   12550      variable.
   12551 
   12552 `OMP_CRITICAL'
   12553      Represents `#pragma omp critical [name]'.
   12554 
   12555      Operand `OMP_CRITICAL_BODY' is the critical section.
   12556 
   12557      Operand `OMP_CRITICAL_NAME' is an optional identifier to label the
   12558      critical section.
   12559 
   12560 `OMP_RETURN'
   12561      This does not represent any OpenMP directive, it is an artificial
   12562      marker to indicate the end of the body of an OpenMP. It is used by
   12563      the flow graph (`tree-cfg.c') and OpenMP region building code
   12564      (`omp-low.c').
   12565 
   12566 `OMP_CONTINUE'
   12567      Similarly, this instruction does not represent an OpenMP
   12568      directive, it is used by `OMP_FOR' and `OMP_SECTIONS' to mark the
   12569      place where the code needs to loop to the next iteration (in the
   12570      case of `OMP_FOR') or the next section (in the case of
   12571      `OMP_SECTIONS').
   12572 
   12573      In some cases, `OMP_CONTINUE' is placed right before `OMP_RETURN'.
   12574      But if there are cleanups that need to occur right after the
   12575      looping body, it will be emitted between `OMP_CONTINUE' and
   12576      `OMP_RETURN'.
   12577 
   12578 `OMP_ATOMIC'
   12579      Represents `#pragma omp atomic'.
   12580 
   12581      Operand 0 is the address at which the atomic operation is to be
   12582      performed.
   12583 
   12584      Operand 1 is the expression to evaluate.  The gimplifier tries
   12585      three alternative code generation strategies.  Whenever possible,
   12586      an atomic update built-in is used.  If that fails, a
   12587      compare-and-swap loop is attempted.  If that also fails, a regular
   12588      critical section around the expression is used.
   12589 
   12590 `OMP_CLAUSE'
   12591      Represents clauses associated with one of the `OMP_' directives.
   12592      Clauses are represented by separate sub-codes defined in `tree.h'.
   12593      Clauses codes can be one of: `OMP_CLAUSE_PRIVATE',
   12594      `OMP_CLAUSE_SHARED', `OMP_CLAUSE_FIRSTPRIVATE',
   12595      `OMP_CLAUSE_LASTPRIVATE', `OMP_CLAUSE_COPYIN',
   12596      `OMP_CLAUSE_COPYPRIVATE', `OMP_CLAUSE_IF',
   12597      `OMP_CLAUSE_NUM_THREADS', `OMP_CLAUSE_SCHEDULE',
   12598      `OMP_CLAUSE_NOWAIT', `OMP_CLAUSE_ORDERED', `OMP_CLAUSE_DEFAULT',
   12599      and `OMP_CLAUSE_REDUCTION'.  Each code represents the
   12600      corresponding OpenMP clause.
   12601 
   12602      Clauses associated with the same directive are chained together
   12603      via `OMP_CLAUSE_CHAIN'. Those clauses that accept a list of
   12604      variables are restricted to exactly one, accessed with
   12605      `OMP_CLAUSE_VAR'.  Therefore, multiple variables under the same
   12606      clause `C' need to be represented as multiple `C' clauses chained
   12607      together.  This facilitates adding new clauses during compilation.
   12608 
   12609 
   12610 
   12611 File: gccint.info,  Node: Functions,  Next: Language-dependent trees,  Prev: Statements,  Up: GENERIC
   12612 
   12613 11.8 Functions
   12614 ==============
   12615 
   12616 A function is represented by a `FUNCTION_DECL' node.  It stores the
   12617 basic pieces of the function such as body, parameters, and return type
   12618 as well as information on the surrounding context, visibility, and
   12619 linkage.
   12620 
   12621 * Menu:
   12622 
   12623 * Function Basics::     Function names, body, and parameters.
   12624 * Function Properties:: Context, linkage, etc.
   12625 
   12626 
   12627 File: gccint.info,  Node: Function Basics,  Next: Function Properties,  Up: Functions
   12628 
   12629 11.8.1 Function Basics
   12630 ----------------------
   12631 
   12632 A function has four core parts: the name, the parameters, the result,
   12633 and the body.  The following macros and functions access these parts of
   12634 a `FUNCTION_DECL' as well as other basic features:
   12635 `DECL_NAME'
   12636      This macro returns the unqualified name of the function, as an
   12637      `IDENTIFIER_NODE'.  For an instantiation of a function template,
   12638      the `DECL_NAME' is the unqualified name of the template, not
   12639      something like `f<int>'.  The value of `DECL_NAME' is undefined
   12640      when used on a constructor, destructor, overloaded operator, or
   12641      type-conversion operator, or any function that is implicitly
   12642      generated by the compiler.  See below for macros that can be used
   12643      to distinguish these cases.
   12644 
   12645 `DECL_ASSEMBLER_NAME'
   12646      This macro returns the mangled name of the function, also an
   12647      `IDENTIFIER_NODE'.  This name does not contain leading underscores
   12648      on systems that prefix all identifiers with underscores.  The
   12649      mangled name is computed in the same way on all platforms; if
   12650      special processing is required to deal with the object file format
   12651      used on a particular platform, it is the responsibility of the
   12652      back end to perform those modifications.  (Of course, the back end
   12653      should not modify `DECL_ASSEMBLER_NAME' itself.)
   12654 
   12655      Using `DECL_ASSEMBLER_NAME' will cause additional memory to be
   12656      allocated (for the mangled name of the entity) so it should be used
   12657      only when emitting assembly code.  It should not be used within the
   12658      optimizers to determine whether or not two declarations are the
   12659      same, even though some of the existing optimizers do use it in
   12660      that way.  These uses will be removed over time.
   12661 
   12662 `DECL_ARGUMENTS'
   12663      This macro returns the `PARM_DECL' for the first argument to the
   12664      function.  Subsequent `PARM_DECL' nodes can be obtained by
   12665      following the `TREE_CHAIN' links.
   12666 
   12667 `DECL_RESULT'
   12668      This macro returns the `RESULT_DECL' for the function.
   12669 
   12670 `DECL_SAVED_TREE'
   12671      This macro returns the complete body of the function.
   12672 
   12673 `TREE_TYPE'
   12674      This macro returns the `FUNCTION_TYPE' or `METHOD_TYPE' for the
   12675      function.
   12676 
   12677 `DECL_INITIAL'
   12678      A function that has a definition in the current translation unit
   12679      will have a non-`NULL' `DECL_INITIAL'.  However, back ends should
   12680      not make use of the particular value given by `DECL_INITIAL'.
   12681 
   12682      It should contain a tree of `BLOCK' nodes that mirrors the scopes
   12683      that variables are bound in the function.  Each block contains a
   12684      list of decls declared in a basic block, a pointer to a chain of
   12685      blocks at the next lower scope level, then a pointer to the next
   12686      block at the same level and a backpointer to the parent `BLOCK' or
   12687      `FUNCTION_DECL'.  So given a function as follows:
   12688 
   12689           void foo()
   12690           {
   12691             int a;
   12692             {
   12693               int b;
   12694             }
   12695             int c;
   12696           }
   12697 
   12698      you would get the following:
   12699 
   12700           tree foo = FUNCTION_DECL;
   12701           tree decl_a = VAR_DECL;
   12702           tree decl_b = VAR_DECL;
   12703           tree decl_c = VAR_DECL;
   12704           tree block_a = BLOCK;
   12705           tree block_b = BLOCK;
   12706           tree block_c = BLOCK;
   12707           BLOCK_VARS(block_a) = decl_a;
   12708           BLOCK_SUBBLOCKS(block_a) = block_b;
   12709           BLOCK_CHAIN(block_a) = block_c;
   12710           BLOCK_SUPERCONTEXT(block_a) = foo;
   12711           BLOCK_VARS(block_b) = decl_b;
   12712           BLOCK_SUPERCONTEXT(block_b) = block_a;
   12713           BLOCK_VARS(block_c) = decl_c;
   12714           BLOCK_SUPERCONTEXT(block_c) = foo;
   12715           DECL_INITIAL(foo) = block_a;
   12716 
   12717 
   12718 
   12719 File: gccint.info,  Node: Function Properties,  Prev: Function Basics,  Up: Functions
   12720 
   12721 11.8.2 Function Properties
   12722 --------------------------
   12723 
   12724 To determine the scope of a function, you can use the `DECL_CONTEXT'
   12725 macro.  This macro will return the class (either a `RECORD_TYPE' or a
   12726 `UNION_TYPE') or namespace (a `NAMESPACE_DECL') of which the function
   12727 is a member.  For a virtual function, this macro returns the class in
   12728 which the function was actually defined, not the base class in which
   12729 the virtual declaration occurred.
   12730 
   12731  In C, the `DECL_CONTEXT' for a function maybe another function.  This
   12732 representation indicates that the GNU nested function extension is in
   12733 use.  For details on the semantics of nested functions, see the GCC
   12734 Manual.  The nested function can refer to local variables in its
   12735 containing function.  Such references are not explicitly marked in the
   12736 tree structure; back ends must look at the `DECL_CONTEXT' for the
   12737 referenced `VAR_DECL'.  If the `DECL_CONTEXT' for the referenced
   12738 `VAR_DECL' is not the same as the function currently being processed,
   12739 and neither `DECL_EXTERNAL' nor `TREE_STATIC' hold, then the reference
   12740 is to a local variable in a containing function, and the back end must
   12741 take appropriate action.
   12742 
   12743 `DECL_EXTERNAL'
   12744      This predicate holds if the function is undefined.
   12745 
   12746 `TREE_PUBLIC'
   12747      This predicate holds if the function has external linkage.
   12748 
   12749 `TREE_STATIC'
   12750      This predicate holds if the function has been defined.
   12751 
   12752 `TREE_THIS_VOLATILE'
   12753      This predicate holds if the function does not return normally.
   12754 
   12755 `TREE_READONLY'
   12756      This predicate holds if the function can only read its arguments.
   12757 
   12758 `DECL_PURE_P'
   12759      This predicate holds if the function can only read its arguments,
   12760      but may also read global memory.
   12761 
   12762 `DECL_VIRTUAL_P'
   12763      This predicate holds if the function is virtual.
   12764 
   12765 `DECL_ARTIFICIAL'
   12766      This macro holds if the function was implicitly generated by the
   12767      compiler, rather than explicitly declared.  In addition to
   12768      implicitly generated class member functions, this macro holds for
   12769      the special functions created to implement static initialization
   12770      and destruction, to compute run-time type information, and so
   12771      forth.
   12772 
   12773 `DECL_FUNCTION_SPECIFIC_TARGET'
   12774      This macro returns a tree node that holds the target options that
   12775      are to be used to compile this particular function or `NULL_TREE'
   12776      if the function is to be compiled with the target options
   12777      specified on the command line.
   12778 
   12779 `DECL_FUNCTION_SPECIFIC_OPTIMIZATION'
   12780      This macro returns a tree node that holds the optimization options
   12781      that are to be used to compile this particular function or
   12782      `NULL_TREE' if the function is to be compiled with the
   12783      optimization options specified on the command line.
   12784 
   12785 
   12786 
   12787 File: gccint.info,  Node: Language-dependent trees,  Next: C and C++ Trees,  Prev: Functions,  Up: GENERIC
   12788 
   12789 11.9 Language-dependent trees
   12790 =============================
   12791 
   12792 Front ends may wish to keep some state associated with various GENERIC
   12793 trees while parsing.  To support this, trees provide a set of flags
   12794 that may be used by the front end.  They are accessed using
   12795 `TREE_LANG_FLAG_n' where `n' is currently 0 through 6.
   12796 
   12797  If necessary, a front end can use some language-dependent tree codes
   12798 in its GENERIC representation, so long as it provides a hook for
   12799 converting them to GIMPLE and doesn't expect them to work with any
   12800 (hypothetical) optimizers that run before the conversion to GIMPLE. The
   12801 intermediate representation used while parsing C and C++ looks very
   12802 little like GENERIC, but the C and C++ gimplifier hooks are perfectly
   12803 happy to take it as input and spit out GIMPLE.
   12804 
   12805 
   12806 File: gccint.info,  Node: C and C++ Trees,  Next: Java Trees,  Prev: Language-dependent trees,  Up: GENERIC
   12807 
   12808 11.10 C and C++ Trees
   12809 =====================
   12810 
   12811 This section documents the internal representation used by GCC to
   12812 represent C and C++ source programs.  When presented with a C or C++
   12813 source program, GCC parses the program, performs semantic analysis
   12814 (including the generation of error messages), and then produces the
   12815 internal representation described here.  This representation contains a
   12816 complete representation for the entire translation unit provided as
   12817 input to the front end.  This representation is then typically processed
   12818 by a code-generator in order to produce machine code, but could also be
   12819 used in the creation of source browsers, intelligent editors, automatic
   12820 documentation generators, interpreters, and any other programs needing
   12821 the ability to process C or C++ code.
   12822 
   12823  This section explains the internal representation.  In particular, it
   12824 documents the internal representation for C and C++ source constructs,
   12825 and the macros, functions, and variables that can be used to access
   12826 these constructs.  The C++ representation is largely a superset of the
   12827 representation used in the C front end.  There is only one construct
   12828 used in C that does not appear in the C++ front end and that is the GNU
   12829 "nested function" extension.  Many of the macros documented here do not
   12830 apply in C because the corresponding language constructs do not appear
   12831 in C.
   12832 
   12833  The C and C++ front ends generate a mix of GENERIC trees and ones
   12834 specific to C and C++.  These language-specific trees are higher-level
   12835 constructs than the ones in GENERIC to make the parser's job easier.
   12836 This section describes those trees that aren't part of GENERIC as well
   12837 as aspects of GENERIC trees that are treated in a language-specific
   12838 manner.
   12839 
   12840  If you are developing a "back end", be it is a code-generator or some
   12841 other tool, that uses this representation, you may occasionally find
   12842 that you need to ask questions not easily answered by the functions and
   12843 macros available here.  If that situation occurs, it is quite likely
   12844 that GCC already supports the functionality you desire, but that the
   12845 interface is simply not documented here.  In that case, you should ask
   12846 the GCC maintainers (via mail to <gcc (a] gcc.gnu.org>) about documenting
   12847 the functionality you require.  Similarly, if you find yourself writing
   12848 functions that do not deal directly with your back end, but instead
   12849 might be useful to other people using the GCC front end, you should
   12850 submit your patches for inclusion in GCC.
   12851 
   12852 * Menu:
   12853 
   12854 * Types for C++::               Fundamental and aggregate types.
   12855 * Namespaces::                  Namespaces.
   12856 * Classes::                     Classes.
   12857 * Functions for C++::           Overloading and accessors for C++.
   12858 * Statements for C++::          Statements specific to C and C++.
   12859 * C++ Expressions::    From `typeid' to `throw'.
   12860 
   12861 
   12862 File: gccint.info,  Node: Types for C++,  Next: Namespaces,  Up: C and C++ Trees
   12863 
   12864 11.10.1 Types for C++
   12865 ---------------------
   12866 
   12867 In C++, an array type is not qualified; rather the type of the array
   12868 elements is qualified.  This situation is reflected in the intermediate
   12869 representation.  The macros described here will always examine the
   12870 qualification of the underlying element type when applied to an array
   12871 type.  (If the element type is itself an array, then the recursion
   12872 continues until a non-array type is found, and the qualification of this
   12873 type is examined.)  So, for example, `CP_TYPE_CONST_P' will hold of the
   12874 type `const int ()[7]', denoting an array of seven `int's.
   12875 
   12876  The following functions and macros deal with cv-qualification of types:
   12877 `CP_TYPE_QUALS'
   12878      This macro returns the set of type qualifiers applied to this type.
   12879      This value is `TYPE_UNQUALIFIED' if no qualifiers have been
   12880      applied.  The `TYPE_QUAL_CONST' bit is set if the type is
   12881      `const'-qualified.  The `TYPE_QUAL_VOLATILE' bit is set if the
   12882      type is `volatile'-qualified.  The `TYPE_QUAL_RESTRICT' bit is set
   12883      if the type is `restrict'-qualified.
   12884 
   12885 `CP_TYPE_CONST_P'
   12886      This macro holds if the type is `const'-qualified.
   12887 
   12888 `CP_TYPE_VOLATILE_P'
   12889      This macro holds if the type is `volatile'-qualified.
   12890 
   12891 `CP_TYPE_RESTRICT_P'
   12892      This macro holds if the type is `restrict'-qualified.
   12893 
   12894 `CP_TYPE_CONST_NON_VOLATILE_P'
   12895      This predicate holds for a type that is `const'-qualified, but
   12896      _not_ `volatile'-qualified; other cv-qualifiers are ignored as
   12897      well: only the `const'-ness is tested.
   12898 
   12899 
   12900  A few other macros and functions are usable with all types:
   12901 `TYPE_SIZE'
   12902      The number of bits required to represent the type, represented as
   12903      an `INTEGER_CST'.  For an incomplete type, `TYPE_SIZE' will be
   12904      `NULL_TREE'.
   12905 
   12906 `TYPE_ALIGN'
   12907      The alignment of the type, in bits, represented as an `int'.
   12908 
   12909 `TYPE_NAME'
   12910      This macro returns a declaration (in the form of a `TYPE_DECL') for
   12911      the type.  (Note this macro does _not_ return an
   12912      `IDENTIFIER_NODE', as you might expect, given its name!)  You can
   12913      look at the `DECL_NAME' of the `TYPE_DECL' to obtain the actual
   12914      name of the type.  The `TYPE_NAME' will be `NULL_TREE' for a type
   12915      that is not a built-in type, the result of a typedef, or a named
   12916      class type.
   12917 
   12918 `CP_INTEGRAL_TYPE'
   12919      This predicate holds if the type is an integral type.  Notice that
   12920      in C++, enumerations are _not_ integral types.
   12921 
   12922 `ARITHMETIC_TYPE_P'
   12923      This predicate holds if the type is an integral type (in the C++
   12924      sense) or a floating point type.
   12925 
   12926 `CLASS_TYPE_P'
   12927      This predicate holds for a class-type.
   12928 
   12929 `TYPE_BUILT_IN'
   12930      This predicate holds for a built-in type.
   12931 
   12932 `TYPE_PTRMEM_P'
   12933      This predicate holds if the type is a pointer to data member.
   12934 
   12935 `TYPE_PTR_P'
   12936      This predicate holds if the type is a pointer type, and the
   12937      pointee is not a data member.
   12938 
   12939 `TYPE_PTRFN_P'
   12940      This predicate holds for a pointer to function type.
   12941 
   12942 `TYPE_PTROB_P'
   12943      This predicate holds for a pointer to object type.  Note however
   12944      that it does not hold for the generic pointer to object type `void
   12945      *'.  You may use `TYPE_PTROBV_P' to test for a pointer to object
   12946      type as well as `void *'.
   12947 
   12948 
   12949  The table below describes types specific to C and C++ as well as
   12950 language-dependent info about GENERIC types.
   12951 
   12952 `POINTER_TYPE'
   12953      Used to represent pointer types, and pointer to data member types.
   12954      If `TREE_TYPE' is a pointer to data member type, then
   12955      `TYPE_PTRMEM_P' will hold.  For a pointer to data member type of
   12956      the form `T X::*', `TYPE_PTRMEM_CLASS_TYPE' will be the type `X',
   12957      while `TYPE_PTRMEM_POINTED_TO_TYPE' will be the type `T'.
   12958 
   12959 `RECORD_TYPE'
   12960      Used to represent `struct' and `class' types in C and C++.  If
   12961      `TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member
   12962      type.  In that case, the `TYPE_PTRMEMFUNC_FN_TYPE' is a
   12963      `POINTER_TYPE' pointing to a `METHOD_TYPE'.  The `METHOD_TYPE' is
   12964      the type of a function pointed to by the pointer-to-member
   12965      function.  If `TYPE_PTRMEMFUNC_P' does not hold, this type is a
   12966      class type.  For more information, *note Classes::.
   12967 
   12968 `UNKNOWN_TYPE'
   12969      This node is used to represent a type the knowledge of which is
   12970      insufficient for a sound processing.
   12971 
   12972 `TYPENAME_TYPE'
   12973      Used to represent a construct of the form `typename T::A'.  The
   12974      `TYPE_CONTEXT' is `T'; the `TYPE_NAME' is an `IDENTIFIER_NODE' for
   12975      `A'.  If the type is specified via a template-id, then
   12976      `TYPENAME_TYPE_FULLNAME' yields a `TEMPLATE_ID_EXPR'.  The
   12977      `TREE_TYPE' is non-`NULL' if the node is implicitly generated in
   12978      support for the implicit typename extension; in which case the
   12979      `TREE_TYPE' is a type node for the base-class.
   12980 
   12981 `TYPEOF_TYPE'
   12982      Used to represent the `__typeof__' extension.  The `TYPE_FIELDS'
   12983      is the expression the type of which is being represented.
   12984 
   12985 
   12986 
   12987 File: gccint.info,  Node: Namespaces,  Next: Classes,  Prev: Types for C++,  Up: C and C++ Trees
   12988 
   12989 11.10.2 Namespaces
   12990 ------------------
   12991 
   12992 The root of the entire intermediate representation is the variable
   12993 `global_namespace'.  This is the namespace specified with `::' in C++
   12994 source code.  All other namespaces, types, variables, functions, and so
   12995 forth can be found starting with this namespace.
   12996 
   12997  However, except for the fact that it is distinguished as the root of
   12998 the representation, the global namespace is no different from any other
   12999 namespace.  Thus, in what follows, we describe namespaces generally,
   13000 rather than the global namespace in particular.
   13001 
   13002  A namespace is represented by a `NAMESPACE_DECL' node.
   13003 
   13004  The following macros and functions can be used on a `NAMESPACE_DECL':
   13005 
   13006 `DECL_NAME'
   13007      This macro is used to obtain the `IDENTIFIER_NODE' corresponding to
   13008      the unqualified name of the name of the namespace (*note
   13009      Identifiers::).  The name of the global namespace is `::', even
   13010      though in C++ the global namespace is unnamed.  However, you
   13011      should use comparison with `global_namespace', rather than
   13012      `DECL_NAME' to determine whether or not a namespace is the global
   13013      one.  An unnamed namespace will have a `DECL_NAME' equal to
   13014      `anonymous_namespace_name'.  Within a single translation unit, all
   13015      unnamed namespaces will have the same name.
   13016 
   13017 `DECL_CONTEXT'
   13018      This macro returns the enclosing namespace.  The `DECL_CONTEXT' for
   13019      the `global_namespace' is `NULL_TREE'.
   13020 
   13021 `DECL_NAMESPACE_ALIAS'
   13022      If this declaration is for a namespace alias, then
   13023      `DECL_NAMESPACE_ALIAS' is the namespace for which this one is an
   13024      alias.
   13025 
   13026      Do not attempt to use `cp_namespace_decls' for a namespace which is
   13027      an alias.  Instead, follow `DECL_NAMESPACE_ALIAS' links until you
   13028      reach an ordinary, non-alias, namespace, and call
   13029      `cp_namespace_decls' there.
   13030 
   13031 `DECL_NAMESPACE_STD_P'
   13032      This predicate holds if the namespace is the special `::std'
   13033      namespace.
   13034 
   13035 `cp_namespace_decls'
   13036      This function will return the declarations contained in the
   13037      namespace, including types, overloaded functions, other
   13038      namespaces, and so forth.  If there are no declarations, this
   13039      function will return `NULL_TREE'.  The declarations are connected
   13040      through their `TREE_CHAIN' fields.
   13041 
   13042      Although most entries on this list will be declarations,
   13043      `TREE_LIST' nodes may also appear.  In this case, the `TREE_VALUE'
   13044      will be an `OVERLOAD'.  The value of the `TREE_PURPOSE' is
   13045      unspecified; back ends should ignore this value.  As with the
   13046      other kinds of declarations returned by `cp_namespace_decls', the
   13047      `TREE_CHAIN' will point to the next declaration in this list.
   13048 
   13049      For more information on the kinds of declarations that can occur
   13050      on this list, *Note Declarations::.  Some declarations will not
   13051      appear on this list.  In particular, no `FIELD_DECL',
   13052      `LABEL_DECL', or `PARM_DECL' nodes will appear here.
   13053 
   13054      This function cannot be used with namespaces that have
   13055      `DECL_NAMESPACE_ALIAS' set.
   13056 
   13057 
   13058 
   13059 File: gccint.info,  Node: Classes,  Next: Functions for C++,  Prev: Namespaces,  Up: C and C++ Trees
   13060 
   13061 11.10.3 Classes
   13062 ---------------
   13063 
   13064 Besides namespaces, the other high-level scoping construct in C++ is the
   13065 class.  (Throughout this manual the term "class" is used to mean the
   13066 types referred to in the ANSI/ISO C++ Standard as classes; these include
   13067 types defined with the `class', `struct', and `union' keywords.)
   13068 
   13069  A class type is represented by either a `RECORD_TYPE' or a
   13070 `UNION_TYPE'.  A class declared with the `union' tag is represented by
   13071 a `UNION_TYPE', while classes declared with either the `struct' or the
   13072 `class' tag are represented by `RECORD_TYPE's.  You can use the
   13073 `CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular
   13074 type is a `class' as opposed to a `struct'.  This macro will be true
   13075 only for classes declared with the `class' tag.
   13076 
   13077  Almost all non-function members are available on the `TYPE_FIELDS'
   13078 list.  Given one member, the next can be found by following the
   13079 `TREE_CHAIN'.  You should not depend in any way on the order in which
   13080 fields appear on this list.  All nodes on this list will be `DECL'
   13081 nodes.  A `FIELD_DECL' is used to represent a non-static data member, a
   13082 `VAR_DECL' is used to represent a static data member, and a `TYPE_DECL'
   13083 is used to represent a type.  Note that the `CONST_DECL' for an
   13084 enumeration constant will appear on this list, if the enumeration type
   13085 was declared in the class.  (Of course, the `TYPE_DECL' for the
   13086 enumeration type will appear here as well.)  There are no entries for
   13087 base classes on this list.  In particular, there is no `FIELD_DECL' for
   13088 the "base-class portion" of an object.
   13089 
   13090  The `TYPE_VFIELD' is a compiler-generated field used to point to
   13091 virtual function tables.  It may or may not appear on the `TYPE_FIELDS'
   13092 list.  However, back ends should handle the `TYPE_VFIELD' just like all
   13093 the entries on the `TYPE_FIELDS' list.
   13094 
   13095  The function members are available on the `TYPE_METHODS' list.  Again,
   13096 subsequent members are found by following the `TREE_CHAIN' field.  If a
   13097 function is overloaded, each of the overloaded functions appears; no
   13098 `OVERLOAD' nodes appear on the `TYPE_METHODS' list.  Implicitly
   13099 declared functions (including default constructors, copy constructors,
   13100 assignment operators, and destructors) will appear on this list as well.
   13101 
   13102  Every class has an associated "binfo", which can be obtained with
   13103 `TYPE_BINFO'.  Binfos are used to represent base-classes.  The binfo
   13104 given by `TYPE_BINFO' is the degenerate case, whereby every class is
   13105 considered to be its own base-class.  The base binfos for a particular
   13106 binfo are held in a vector, whose length is obtained with
   13107 `BINFO_N_BASE_BINFOS'.  The base binfos themselves are obtained with
   13108 `BINFO_BASE_BINFO' and `BINFO_BASE_ITERATE'.  To add a new binfo, use
   13109 `BINFO_BASE_APPEND'.  The vector of base binfos can be obtained with
   13110 `BINFO_BASE_BINFOS', but normally you do not need to use that.  The
   13111 class type associated with a binfo is given by `BINFO_TYPE'.  It is not
   13112 always the case that `BINFO_TYPE (TYPE_BINFO (x))', because of typedefs
   13113 and qualified types.  Neither is it the case that `TYPE_BINFO
   13114 (BINFO_TYPE (y))' is the same binfo as `y'.  The reason is that if `y'
   13115 is a binfo representing a base-class `B' of a derived class `D', then
   13116 `BINFO_TYPE (y)' will be `B', and `TYPE_BINFO (BINFO_TYPE (y))' will be
   13117 `B' as its own base-class, rather than as a base-class of `D'.
   13118 
   13119  The access to a base type can be found with `BINFO_BASE_ACCESS'.  This
   13120 will produce `access_public_node', `access_private_node' or
   13121 `access_protected_node'.  If bases are always public,
   13122 `BINFO_BASE_ACCESSES' may be `NULL'.
   13123 
   13124  `BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited
   13125 virtually or not.  The other flags, `BINFO_MARKED_P' and `BINFO_FLAG_1'
   13126 to `BINFO_FLAG_6' can be used for language specific use.
   13127 
   13128  The following macros can be used on a tree node representing a
   13129 class-type.
   13130 
   13131 `LOCAL_CLASS_P'
   13132      This predicate holds if the class is local class _i.e._ declared
   13133      inside a function body.
   13134 
   13135 `TYPE_POLYMORPHIC_P'
   13136      This predicate holds if the class has at least one virtual function
   13137      (declared or inherited).
   13138 
   13139 `TYPE_HAS_DEFAULT_CONSTRUCTOR'
   13140      This predicate holds whenever its argument represents a class-type
   13141      with default constructor.
   13142 
   13143 `CLASSTYPE_HAS_MUTABLE'
   13144 `TYPE_HAS_MUTABLE_P'
   13145      These predicates hold for a class-type having a mutable data
   13146      member.
   13147 
   13148 `CLASSTYPE_NON_POD_P'
   13149      This predicate holds only for class-types that are not PODs.
   13150 
   13151 `TYPE_HAS_NEW_OPERATOR'
   13152      This predicate holds for a class-type that defines `operator new'.
   13153 
   13154 `TYPE_HAS_ARRAY_NEW_OPERATOR'
   13155      This predicate holds for a class-type for which `operator new[]'
   13156      is defined.
   13157 
   13158 `TYPE_OVERLOADS_CALL_EXPR'
   13159      This predicate holds for class-type for which the function call
   13160      `operator()' is overloaded.
   13161 
   13162 `TYPE_OVERLOADS_ARRAY_REF'
   13163      This predicate holds for a class-type that overloads `operator[]'
   13164 
   13165 `TYPE_OVERLOADS_ARROW'
   13166      This predicate holds for a class-type for which `operator->' is
   13167      overloaded.
   13168 
   13169 
   13170 
   13171 File: gccint.info,  Node: Functions for C++,  Next: Statements for C++,  Prev: Classes,  Up: C and C++ Trees
   13172 
   13173 11.10.4 Functions for C++
   13174 -------------------------
   13175 
   13176 A function is represented by a `FUNCTION_DECL' node.  A set of
   13177 overloaded functions is sometimes represented by an `OVERLOAD' node.
   13178 
   13179  An `OVERLOAD' node is not a declaration, so none of the `DECL_' macros
   13180 should be used on an `OVERLOAD'.  An `OVERLOAD' node is similar to a
   13181 `TREE_LIST'.  Use `OVL_CURRENT' to get the function associated with an
   13182 `OVERLOAD' node; use `OVL_NEXT' to get the next `OVERLOAD' node in the
   13183 list of overloaded functions.  The macros `OVL_CURRENT' and `OVL_NEXT'
   13184 are actually polymorphic; you can use them to work with `FUNCTION_DECL'
   13185 nodes as well as with overloads.  In the case of a `FUNCTION_DECL',
   13186 `OVL_CURRENT' will always return the function itself, and `OVL_NEXT'
   13187 will always be `NULL_TREE'.
   13188 
   13189  To determine the scope of a function, you can use the `DECL_CONTEXT'
   13190 macro.  This macro will return the class (either a `RECORD_TYPE' or a
   13191 `UNION_TYPE') or namespace (a `NAMESPACE_DECL') of which the function
   13192 is a member.  For a virtual function, this macro returns the class in
   13193 which the function was actually defined, not the base class in which
   13194 the virtual declaration occurred.
   13195 
   13196  If a friend function is defined in a class scope, the
   13197 `DECL_FRIEND_CONTEXT' macro can be used to determine the class in which
   13198 it was defined.  For example, in
   13199      class C { friend void f() {} };
   13200  the `DECL_CONTEXT' for `f' will be the `global_namespace', but the
   13201 `DECL_FRIEND_CONTEXT' will be the `RECORD_TYPE' for `C'.
   13202 
   13203  The following macros and functions can be used on a `FUNCTION_DECL':
   13204 `DECL_MAIN_P'
   13205      This predicate holds for a function that is the program entry point
   13206      `::code'.
   13207 
   13208 `DECL_LOCAL_FUNCTION_P'
   13209      This predicate holds if the function was declared at block scope,
   13210      even though it has a global scope.
   13211 
   13212 `DECL_ANTICIPATED'
   13213      This predicate holds if the function is a built-in function but its
   13214      prototype is not yet explicitly declared.
   13215 
   13216 `DECL_EXTERN_C_FUNCTION_P'
   13217      This predicate holds if the function is declared as an ``extern
   13218      "C"'' function.
   13219 
   13220 `DECL_LINKONCE_P'
   13221      This macro holds if multiple copies of this function may be
   13222      emitted in various translation units.  It is the responsibility of
   13223      the linker to merge the various copies.  Template instantiations
   13224      are the most common example of functions for which
   13225      `DECL_LINKONCE_P' holds; G++ instantiates needed templates in all
   13226      translation units which require them, and then relies on the
   13227      linker to remove duplicate instantiations.
   13228 
   13229      FIXME: This macro is not yet implemented.
   13230 
   13231 `DECL_FUNCTION_MEMBER_P'
   13232      This macro holds if the function is a member of a class, rather
   13233      than a member of a namespace.
   13234 
   13235 `DECL_STATIC_FUNCTION_P'
   13236      This predicate holds if the function a static member function.
   13237 
   13238 `DECL_NONSTATIC_MEMBER_FUNCTION_P'
   13239      This macro holds for a non-static member function.
   13240 
   13241 `DECL_CONST_MEMFUNC_P'
   13242      This predicate holds for a `const'-member function.
   13243 
   13244 `DECL_VOLATILE_MEMFUNC_P'
   13245      This predicate holds for a `volatile'-member function.
   13246 
   13247 `DECL_CONSTRUCTOR_P'
   13248      This macro holds if the function is a constructor.
   13249 
   13250 `DECL_NONCONVERTING_P'
   13251      This predicate holds if the constructor is a non-converting
   13252      constructor.
   13253 
   13254 `DECL_COMPLETE_CONSTRUCTOR_P'
   13255      This predicate holds for a function which is a constructor for an
   13256      object of a complete type.
   13257 
   13258 `DECL_BASE_CONSTRUCTOR_P'
   13259      This predicate holds for a function which is a constructor for a
   13260      base class sub-object.
   13261 
   13262 `DECL_COPY_CONSTRUCTOR_P'
   13263      This predicate holds for a function which is a copy-constructor.
   13264 
   13265 `DECL_DESTRUCTOR_P'
   13266      This macro holds if the function is a destructor.
   13267 
   13268 `DECL_COMPLETE_DESTRUCTOR_P'
   13269      This predicate holds if the function is the destructor for an
   13270      object a complete type.
   13271 
   13272 `DECL_OVERLOADED_OPERATOR_P'
   13273      This macro holds if the function is an overloaded operator.
   13274 
   13275 `DECL_CONV_FN_P'
   13276      This macro holds if the function is a type-conversion operator.
   13277 
   13278 `DECL_GLOBAL_CTOR_P'
   13279      This predicate holds if the function is a file-scope initialization
   13280      function.
   13281 
   13282 `DECL_GLOBAL_DTOR_P'
   13283      This predicate holds if the function is a file-scope finalization
   13284      function.
   13285 
   13286 `DECL_THUNK_P'
   13287      This predicate holds if the function is a thunk.
   13288 
   13289      These functions represent stub code that adjusts the `this' pointer
   13290      and then jumps to another function.  When the jumped-to function
   13291      returns, control is transferred directly to the caller, without
   13292      returning to the thunk.  The first parameter to the thunk is
   13293      always the `this' pointer; the thunk should add `THUNK_DELTA' to
   13294      this value.  (The `THUNK_DELTA' is an `int', not an `INTEGER_CST'.)
   13295 
   13296      Then, if `THUNK_VCALL_OFFSET' (an `INTEGER_CST') is nonzero the
   13297      adjusted `this' pointer must be adjusted again.  The complete
   13298      calculation is given by the following pseudo-code:
   13299 
   13300           this += THUNK_DELTA
   13301           if (THUNK_VCALL_OFFSET)
   13302             this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET]
   13303 
   13304      Finally, the thunk should jump to the location given by
   13305      `DECL_INITIAL'; this will always be an expression for the address
   13306      of a function.
   13307 
   13308 `DECL_NON_THUNK_FUNCTION_P'
   13309      This predicate holds if the function is _not_ a thunk function.
   13310 
   13311 `GLOBAL_INIT_PRIORITY'
   13312      If either `DECL_GLOBAL_CTOR_P' or `DECL_GLOBAL_DTOR_P' holds, then
   13313      this gives the initialization priority for the function.  The
   13314      linker will arrange that all functions for which
   13315      `DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority
   13316      before `main' is called.  When the program exits, all functions for
   13317      which `DECL_GLOBAL_DTOR_P' holds are run in the reverse order.
   13318 
   13319 `TYPE_RAISES_EXCEPTIONS'
   13320      This macro returns the list of exceptions that a (member-)function
   13321      can raise.  The returned list, if non `NULL', is comprised of nodes
   13322      whose `TREE_VALUE' represents a type.
   13323 
   13324 `TYPE_NOTHROW_P'
   13325      This predicate holds when the exception-specification of its
   13326      arguments is of the form ``()''.
   13327 
   13328 `DECL_ARRAY_DELETE_OPERATOR_P'
   13329      This predicate holds if the function an overloaded `operator
   13330      delete[]'.
   13331 
   13332 
   13333 
   13334 File: gccint.info,  Node: Statements for C++,  Next: C++ Expressions,  Prev: Functions for C++,  Up: C and C++ Trees
   13335 
   13336 11.10.5 Statements for C++
   13337 --------------------------
   13338 
   13339 A function that has a definition in the current translation unit will
   13340 have a non-`NULL' `DECL_INITIAL'.  However, back ends should not make
   13341 use of the particular value given by `DECL_INITIAL'.
   13342 
   13343  The `DECL_SAVED_TREE' macro will give the complete body of the
   13344 function.
   13345 
   13346 11.10.5.1 Statements
   13347 ....................
   13348 
   13349 There are tree nodes corresponding to all of the source-level statement
   13350 constructs, used within the C and C++ frontends.  These are enumerated
   13351 here, together with a list of the various macros that can be used to
   13352 obtain information about them.  There are a few macros that can be used
   13353 with all statements:
   13354 
   13355 `STMT_IS_FULL_EXPR_P'
   13356      In C++, statements normally constitute "full expressions";
   13357      temporaries created during a statement are destroyed when the
   13358      statement is complete.  However, G++ sometimes represents
   13359      expressions by statements; these statements will not have
   13360      `STMT_IS_FULL_EXPR_P' set.  Temporaries created during such
   13361      statements should be destroyed when the innermost enclosing
   13362      statement with `STMT_IS_FULL_EXPR_P' set is exited.
   13363 
   13364 
   13365  Here is the list of the various statement nodes, and the macros used to
   13366 access them.  This documentation describes the use of these nodes in
   13367 non-template functions (including instantiations of template functions).
   13368 In template functions, the same nodes are used, but sometimes in
   13369 slightly different ways.
   13370 
   13371  Many of the statements have substatements.  For example, a `while'
   13372 loop will have a body, which is itself a statement.  If the substatement
   13373 is `NULL_TREE', it is considered equivalent to a statement consisting
   13374 of a single `;', i.e., an expression statement in which the expression
   13375 has been omitted.  A substatement may in fact be a list of statements,
   13376 connected via their `TREE_CHAIN's.  So, you should always process the
   13377 statement tree by looping over substatements, like this:
   13378      void process_stmt (stmt)
   13379           tree stmt;
   13380      {
   13381        while (stmt)
   13382          {
   13383            switch (TREE_CODE (stmt))
   13384              {
   13385              case IF_STMT:
   13386                process_stmt (THEN_CLAUSE (stmt));
   13387                /* More processing here.  */
   13388                break;
   13389 
   13390              ...
   13391              }
   13392 
   13393            stmt = TREE_CHAIN (stmt);
   13394          }
   13395      }
   13396  In other words, while the `then' clause of an `if' statement in C++
   13397 can be only one statement (although that one statement may be a
   13398 compound statement), the intermediate representation will sometimes use
   13399 several statements chained together.
   13400 
   13401 `BREAK_STMT'
   13402      Used to represent a `break' statement.  There are no additional
   13403      fields.
   13404 
   13405 `CLEANUP_STMT'
   13406      Used to represent an action that should take place upon exit from
   13407      the enclosing scope.  Typically, these actions are calls to
   13408      destructors for local objects, but back ends cannot rely on this
   13409      fact.  If these nodes are in fact representing such destructors,
   13410      `CLEANUP_DECL' will be the `VAR_DECL' destroyed.  Otherwise,
   13411      `CLEANUP_DECL' will be `NULL_TREE'.  In any case, the
   13412      `CLEANUP_EXPR' is the expression to execute.  The cleanups
   13413      executed on exit from a scope should be run in the reverse order
   13414      of the order in which the associated `CLEANUP_STMT's were
   13415      encountered.
   13416 
   13417 `CONTINUE_STMT'
   13418      Used to represent a `continue' statement.  There are no additional
   13419      fields.
   13420 
   13421 `CTOR_STMT'
   13422      Used to mark the beginning (if `CTOR_BEGIN_P' holds) or end (if
   13423      `CTOR_END_P' holds of the main body of a constructor.  See also
   13424      `SUBOBJECT' for more information on how to use these nodes.
   13425 
   13426 `DO_STMT'
   13427      Used to represent a `do' loop.  The body of the loop is given by
   13428      `DO_BODY' while the termination condition for the loop is given by
   13429      `DO_COND'.  The condition for a `do'-statement is always an
   13430      expression.
   13431 
   13432 `EMPTY_CLASS_EXPR'
   13433      Used to represent a temporary object of a class with no data whose
   13434      address is never taken.  (All such objects are interchangeable.)
   13435      The `TREE_TYPE' represents the type of the object.
   13436 
   13437 `EXPR_STMT'
   13438      Used to represent an expression statement.  Use `EXPR_STMT_EXPR' to
   13439      obtain the expression.
   13440 
   13441 `FOR_STMT'
   13442      Used to represent a `for' statement.  The `FOR_INIT_STMT' is the
   13443      initialization statement for the loop.  The `FOR_COND' is the
   13444      termination condition.  The `FOR_EXPR' is the expression executed
   13445      right before the `FOR_COND' on each loop iteration; often, this
   13446      expression increments a counter.  The body of the loop is given by
   13447      `FOR_BODY'.  Note that `FOR_INIT_STMT' and `FOR_BODY' return
   13448      statements, while `FOR_COND' and `FOR_EXPR' return expressions.
   13449 
   13450 `HANDLER'
   13451      Used to represent a C++ `catch' block.  The `HANDLER_TYPE' is the
   13452      type of exception that will be caught by this handler; it is equal
   13453      (by pointer equality) to `NULL' if this handler is for all types.
   13454      `HANDLER_PARMS' is the `DECL_STMT' for the catch parameter, and
   13455      `HANDLER_BODY' is the code for the block itself.
   13456 
   13457 `IF_STMT'
   13458      Used to represent an `if' statement.  The `IF_COND' is the
   13459      expression.
   13460 
   13461      If the condition is a `TREE_LIST', then the `TREE_PURPOSE' is a
   13462      statement (usually a `DECL_STMT').  Each time the condition is
   13463      evaluated, the statement should be executed.  Then, the
   13464      `TREE_VALUE' should be used as the conditional expression itself.
   13465      This representation is used to handle C++ code like this:
   13466 
   13467      C++ distinguishes between this and `COND_EXPR' for handling
   13468      templates.
   13469 
   13470           if (int i = 7) ...
   13471 
   13472      where there is a new local variable (or variables) declared within
   13473      the condition.
   13474 
   13475      The `THEN_CLAUSE' represents the statement given by the `then'
   13476      condition, while the `ELSE_CLAUSE' represents the statement given
   13477      by the `else' condition.
   13478 
   13479 `SUBOBJECT'
   13480      In a constructor, these nodes are used to mark the point at which a
   13481      subobject of `this' is fully constructed.  If, after this point, an
   13482      exception is thrown before a `CTOR_STMT' with `CTOR_END_P' set is
   13483      encountered, the `SUBOBJECT_CLEANUP' must be executed.  The
   13484      cleanups must be executed in the reverse order in which they
   13485      appear.
   13486 
   13487 `SWITCH_STMT'
   13488      Used to represent a `switch' statement.  The `SWITCH_STMT_COND' is
   13489      the expression on which the switch is occurring.  See the
   13490      documentation for an `IF_STMT' for more information on the
   13491      representation used for the condition.  The `SWITCH_STMT_BODY' is
   13492      the body of the switch statement.   The `SWITCH_STMT_TYPE' is the
   13493      original type of switch expression as given in the source, before
   13494      any compiler conversions.
   13495 
   13496 `TRY_BLOCK'
   13497      Used to represent a `try' block.  The body of the try block is
   13498      given by `TRY_STMTS'.  Each of the catch blocks is a `HANDLER'
   13499      node.  The first handler is given by `TRY_HANDLERS'.  Subsequent
   13500      handlers are obtained by following the `TREE_CHAIN' link from one
   13501      handler to the next.  The body of the handler is given by
   13502      `HANDLER_BODY'.
   13503 
   13504      If `CLEANUP_P' holds of the `TRY_BLOCK', then the `TRY_HANDLERS'
   13505      will not be a `HANDLER' node.  Instead, it will be an expression
   13506      that should be executed if an exception is thrown in the try
   13507      block.  It must rethrow the exception after executing that code.
   13508      And, if an exception is thrown while the expression is executing,
   13509      `terminate' must be called.
   13510 
   13511 `USING_STMT'
   13512      Used to represent a `using' directive.  The namespace is given by
   13513      `USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL.  This node
   13514      is needed inside template functions, to implement using directives
   13515      during instantiation.
   13516 
   13517 `WHILE_STMT'
   13518      Used to represent a `while' loop.  The `WHILE_COND' is the
   13519      termination condition for the loop.  See the documentation for an
   13520      `IF_STMT' for more information on the representation used for the
   13521      condition.
   13522 
   13523      The `WHILE_BODY' is the body of the loop.
   13524 
   13525 
   13526 
   13527 File: gccint.info,  Node: C++ Expressions,  Prev: Statements for C++,  Up: C and C++ Trees
   13528 
   13529 11.10.6 C++ Expressions
   13530 -----------------------
   13531 
   13532 This section describes expressions specific to the C and C++ front ends.
   13533 
   13534 `TYPEID_EXPR'
   13535      Used to represent a `typeid' expression.
   13536 
   13537 `NEW_EXPR'
   13538 `VEC_NEW_EXPR'
   13539      Used to represent a call to `new' and `new[]' respectively.
   13540 
   13541 `DELETE_EXPR'
   13542 `VEC_DELETE_EXPR'
   13543      Used to represent a call to `delete' and `delete[]' respectively.
   13544 
   13545 `MEMBER_REF'
   13546      Represents a reference to a member of a class.
   13547 
   13548 `THROW_EXPR'
   13549      Represents an instance of `throw' in the program.  Operand 0,
   13550      which is the expression to throw, may be `NULL_TREE'.
   13551 
   13552 `AGGR_INIT_EXPR'
   13553      An `AGGR_INIT_EXPR' represents the initialization as the return
   13554      value of a function call, or as the result of a constructor.  An
   13555      `AGGR_INIT_EXPR' will only appear as a full-expression, or as the
   13556      second operand of a `TARGET_EXPR'.  `AGGR_INIT_EXPR's have a
   13557      representation similar to that of `CALL_EXPR's.  You can use the
   13558      `AGGR_INIT_EXPR_FN' and `AGGR_INIT_EXPR_ARG' macros to access the
   13559      function to call and the arguments to pass.
   13560 
   13561      If `AGGR_INIT_VIA_CTOR_P' holds of the `AGGR_INIT_EXPR', then the
   13562      initialization is via a constructor call.  The address of the
   13563      `AGGR_INIT_EXPR_SLOT' operand, which is always a `VAR_DECL', is
   13564      taken, and this value replaces the first argument in the argument
   13565      list.
   13566 
   13567      In either case, the expression is void.
   13568 
   13569 
   13570 
   13571 File: gccint.info,  Node: Java Trees,  Prev: C and C++ Trees,  Up: GENERIC
   13572 
   13573 11.11 Java Trees
   13574 ================
   13575 
   13576 
   13577 File: gccint.info,  Node: GIMPLE,  Next: Tree SSA,  Prev: GENERIC,  Up: Top
   13578 
   13579 12 GIMPLE
   13580 *********
   13581 
   13582 GIMPLE is a three-address representation derived from GENERIC by
   13583 breaking down GENERIC expressions into tuples of no more than 3
   13584 operands (with some exceptions like function calls).  GIMPLE was
   13585 heavily influenced by the SIMPLE IL used by the McCAT compiler project
   13586 at McGill University, though we have made some different choices.  For
   13587 one thing, SIMPLE doesn't support `goto'.
   13588 
   13589  Temporaries are introduced to hold intermediate values needed to
   13590 compute complex expressions. Additionally, all the control structures
   13591 used in GENERIC are lowered into conditional jumps, lexical scopes are
   13592 removed and exception regions are converted into an on the side
   13593 exception region tree.
   13594 
   13595  The compiler pass which converts GENERIC into GIMPLE is referred to as
   13596 the `gimplifier'.  The gimplifier works recursively, generating GIMPLE
   13597 tuples out of the original GENERIC expressions.
   13598 
   13599  One of the early implementation strategies used for the GIMPLE
   13600 representation was to use the same internal data structures used by
   13601 front ends to represent parse trees. This simplified implementation
   13602 because we could leverage existing functionality and interfaces.
   13603 However, GIMPLE is a much more restrictive representation than abstract
   13604 syntax trees (AST), therefore it does not require the full structural
   13605 complexity provided by the main tree data structure.
   13606 
   13607  The GENERIC representation of a function is stored in the
   13608 `DECL_SAVED_TREE' field of the associated `FUNCTION_DECL' tree node.
   13609 It is converted to GIMPLE by a call to `gimplify_function_tree'.
   13610 
   13611  If a front end wants to include language-specific tree codes in the
   13612 tree representation which it provides to the back end, it must provide a
   13613 definition of `LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the
   13614 front end trees to GIMPLE.  Usually such a hook will involve much of
   13615 the same code for expanding front end trees to RTL.  This function can
   13616 return fully lowered GIMPLE, or it can return GENERIC trees and let the
   13617 main gimplifier lower them the rest of the way; this is often simpler.
   13618 GIMPLE that is not fully lowered is known as "High GIMPLE" and consists
   13619 of the IL before the pass `pass_lower_cf'.  High GIMPLE contains some
   13620 container statements like lexical scopes (represented by `GIMPLE_BIND')
   13621 and nested expressions (e.g., `GIMPLE_TRY'), while "Low GIMPLE" exposes
   13622 all of the implicit jumps for control and exception expressions
   13623 directly in the IL and EH region trees.
   13624 
   13625  The C and C++ front ends currently convert directly from front end
   13626 trees to GIMPLE, and hand that off to the back end rather than first
   13627 converting to GENERIC.  Their gimplifier hooks know about all the
   13628 `_STMT' nodes and how to convert them to GENERIC forms.  There was some
   13629 work done on a genericization pass which would run first, but the
   13630 existence of `STMT_EXPR' meant that in order to convert all of the C
   13631 statements into GENERIC equivalents would involve walking the entire
   13632 tree anyway, so it was simpler to lower all the way.  This might change
   13633 in the future if someone writes an optimization pass which would work
   13634 better with higher-level trees, but currently the optimizers all expect
   13635 GIMPLE.
   13636 
   13637  You can request to dump a C-like representation of the GIMPLE form
   13638 with the flag `-fdump-tree-gimple'.
   13639 
   13640 * Menu:
   13641 
   13642 * Tuple representation::
   13643 * GIMPLE instruction set::
   13644 * GIMPLE Exception Handling::
   13645 * Temporaries::
   13646 * Operands::
   13647 * Manipulating GIMPLE statements::
   13648 * Tuple specific accessors::
   13649 * GIMPLE sequences::
   13650 * Sequence iterators::
   13651 * Adding a new GIMPLE statement code::
   13652 * Statement and operand traversals::
   13653 
   13654 
   13655 File: gccint.info,  Node: Tuple representation,  Next: GIMPLE instruction set,  Up: GIMPLE
   13656 
   13657 12.1 Tuple representation
   13658 =========================
   13659 
   13660 GIMPLE instructions are tuples of variable size divided in two groups:
   13661 a header describing the instruction and its locations, and a variable
   13662 length body with all the operands. Tuples are organized into a
   13663 hierarchy with 3 main classes of tuples.
   13664 
   13665 12.1.1 `gimple_statement_base' (gsbase)
   13666 ---------------------------------------
   13667 
   13668 This is the root of the hierarchy, it holds basic information needed by
   13669 most GIMPLE statements. There are some fields that may not be relevant
   13670 to every GIMPLE statement, but those were moved into the base structure
   13671 to take advantage of holes left by other fields (thus making the
   13672 structure more compact).  The structure takes 4 words (32 bytes) on 64
   13673 bit hosts:
   13674 
   13675 Field                   Size (bits)
   13676 `code'                  8
   13677 `subcode'               16
   13678 `no_warning'            1
   13679 `visited'               1
   13680 `nontemporal_move'      1
   13681 `plf'                   2
   13682 `modified'              1
   13683 `has_volatile_ops'      1
   13684 `references_memory_p'   1
   13685 `uid'                   32
   13686 `location'              32
   13687 `num_ops'               32
   13688 `bb'                    64
   13689 `block'                 63
   13690 Total size              32 bytes
   13691 
   13692    * `code' Main identifier for a GIMPLE instruction.
   13693 
   13694    * `subcode' Used to distinguish different variants of the same basic
   13695      instruction or provide flags applicable to a given code. The
   13696      `subcode' flags field has different uses depending on the code of
   13697      the instruction, but mostly it distinguishes instructions of the
   13698      same family. The most prominent use of this field is in
   13699      assignments, where subcode indicates the operation done on the RHS
   13700      of the assignment. For example, a = b + c is encoded as
   13701      `GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>'.
   13702 
   13703    * `no_warning' Bitflag to indicate whether a warning has already
   13704      been issued on this statement.
   13705 
   13706    * `visited' General purpose "visited" marker. Set and cleared by
   13707      each pass when needed.
   13708 
   13709    * `nontemporal_move' Bitflag used in assignments that represent
   13710      non-temporal moves.  Although this bitflag is only used in
   13711      assignments, it was moved into the base to take advantage of the
   13712      bit holes left by the previous fields.
   13713 
   13714    * `plf' Pass Local Flags. This 2-bit mask can be used as general
   13715      purpose markers by any pass. Passes are responsible for clearing
   13716      and setting these two flags accordingly.
   13717 
   13718    * `modified' Bitflag to indicate whether the statement has been
   13719      modified.  Used mainly by the operand scanner to determine when to
   13720      re-scan a statement for operands.
   13721 
   13722    * `has_volatile_ops' Bitflag to indicate whether this statement
   13723      contains operands that have been marked volatile.
   13724 
   13725    * `references_memory_p' Bitflag to indicate whether this statement
   13726      contains memory references (i.e., its operands are either global
   13727      variables, or pointer dereferences or anything that must reside in
   13728      memory).
   13729 
   13730    * `uid' This is an unsigned integer used by passes that want to
   13731      assign IDs to every statement. These IDs must be assigned and used
   13732      by each pass.
   13733 
   13734    * `location' This is a `location_t' identifier to specify source code
   13735      location for this statement. It is inherited from the front end.
   13736 
   13737    * `num_ops' Number of operands that this statement has. This
   13738      specifies the size of the operand vector embedded in the tuple.
   13739      Only used in some tuples, but it is declared in the base tuple to
   13740      take advantage of the 32-bit hole left by the previous fields.
   13741 
   13742    * `bb' Basic block holding the instruction.
   13743 
   13744    * `block' Lexical block holding this statement.  Also used for debug
   13745      information generation.
   13746 
   13747 12.1.2 `gimple_statement_with_ops'
   13748 ----------------------------------
   13749 
   13750 This tuple is actually split in two: `gimple_statement_with_ops_base'
   13751 and `gimple_statement_with_ops'. This is needed to accommodate the way
   13752 the operand vector is allocated. The operand vector is defined to be an
   13753 array of 1 element. So, to allocate a dynamic number of operands, the
   13754 memory allocator (`gimple_alloc') simply allocates enough memory to
   13755 hold the structure itself plus `N - 1' operands which run "off the end"
   13756 of the structure. For example, to allocate space for a tuple with 3
   13757 operands, `gimple_alloc' reserves `sizeof (struct
   13758 gimple_statement_with_ops) + 2 * sizeof (tree)' bytes.
   13759 
   13760  On the other hand, several fields in this tuple need to be shared with
   13761 the `gimple_statement_with_memory_ops' tuple. So, these common fields
   13762 are placed in `gimple_statement_with_ops_base' which is then inherited
   13763 from the other two tuples.
   13764 
   13765 `gsbase'    256
   13766 `def_ops'   64
   13767 `use_ops'   64
   13768 `op'        `num_ops' * 64
   13769 Total size  48 + 8 * `num_ops' bytes
   13770 
   13771    * `gsbase' Inherited from `struct gimple_statement_base'.
   13772 
   13773    * `def_ops' Array of pointers into the operand array indicating all
   13774      the slots that contain a variable written-to by the statement.
   13775      This array is also used for immediate use chaining. Note that it
   13776      would be possible to not rely on this array, but the changes
   13777      required to implement this are pretty invasive.
   13778 
   13779    * `use_ops' Similar to `def_ops' but for variables read by the
   13780      statement.
   13781 
   13782    * `op' Array of trees with `num_ops' slots.
   13783 
   13784 12.1.3 `gimple_statement_with_memory_ops'
   13785 -----------------------------------------
   13786 
   13787 This tuple is essentially identical to `gimple_statement_with_ops',
   13788 except that it contains 4 additional fields to hold vectors related
   13789 memory stores and loads.  Similar to the previous case, the structure
   13790 is split in two to accommodate for the operand vector
   13791 (`gimple_statement_with_memory_ops_base' and
   13792 `gimple_statement_with_memory_ops').
   13793 
   13794 Field        Size (bits)
   13795 `gsbase'     256
   13796 `def_ops'    64
   13797 `use_ops'    64
   13798 `vdef_ops'   64
   13799 `vuse_ops'   64
   13800 `stores'     64
   13801 `loads'      64
   13802 `op'         `num_ops' * 64
   13803 Total size   80 + 8 * `num_ops' bytes
   13804 
   13805    * `vdef_ops' Similar to `def_ops' but for `VDEF' operators. There is
   13806      one entry per memory symbol written by this statement. This is
   13807      used to maintain the memory SSA use-def and def-def chains.
   13808 
   13809    * `vuse_ops' Similar to `use_ops' but for `VUSE' operators. There is
   13810      one entry per memory symbol loaded by this statement. This is used
   13811      to maintain the memory SSA use-def chains.
   13812 
   13813    * `stores' Bitset with all the UIDs for the symbols written-to by the
   13814      statement.  This is different than `vdef_ops' in that all the
   13815      affected symbols are mentioned in this set.  If memory
   13816      partitioning is enabled, the `vdef_ops' vector will refer to memory
   13817      partitions. Furthermore, no SSA information is stored in this set.
   13818 
   13819    * `loads' Similar to `stores', but for memory loads. (Note that there
   13820      is some amount of redundancy here, it should be possible to reduce
   13821      memory utilization further by removing these sets).
   13822 
   13823  All the other tuples are defined in terms of these three basic ones.
   13824 Each tuple will add some fields. The main gimple type is defined to be
   13825 the union of all these structures (`GTY' markers elided for clarity):
   13826 
   13827      union gimple_statement_d
   13828      {
   13829        struct gimple_statement_base gsbase;
   13830        struct gimple_statement_with_ops gsops;
   13831        struct gimple_statement_with_memory_ops gsmem;
   13832        struct gimple_statement_omp omp;
   13833        struct gimple_statement_bind gimple_bind;
   13834        struct gimple_statement_catch gimple_catch;
   13835        struct gimple_statement_eh_filter gimple_eh_filter;
   13836        struct gimple_statement_phi gimple_phi;
   13837        struct gimple_statement_resx gimple_resx;
   13838        struct gimple_statement_try gimple_try;
   13839        struct gimple_statement_wce gimple_wce;
   13840        struct gimple_statement_asm gimple_asm;
   13841        struct gimple_statement_omp_critical gimple_omp_critical;
   13842        struct gimple_statement_omp_for gimple_omp_for;
   13843        struct gimple_statement_omp_parallel gimple_omp_parallel;
   13844        struct gimple_statement_omp_task gimple_omp_task;
   13845        struct gimple_statement_omp_sections gimple_omp_sections;
   13846        struct gimple_statement_omp_single gimple_omp_single;
   13847        struct gimple_statement_omp_continue gimple_omp_continue;
   13848        struct gimple_statement_omp_atomic_load gimple_omp_atomic_load;
   13849        struct gimple_statement_omp_atomic_store gimple_omp_atomic_store;
   13850      };
   13851 
   13852 
   13853 File: gccint.info,  Node: GIMPLE instruction set,  Next: GIMPLE Exception Handling,  Prev: Tuple representation,  Up: GIMPLE
   13854 
   13855 12.2 GIMPLE instruction set
   13856 ===========================
   13857 
   13858 The following table briefly describes the GIMPLE instruction set.
   13859 
   13860 Instruction                    High GIMPLE   Low GIMPLE
   13861 `GIMPLE_ASM'                   x             x
   13862 `GIMPLE_ASSIGN'                x             x
   13863 `GIMPLE_BIND'                  x             
   13864 `GIMPLE_CALL'                  x             x
   13865 `GIMPLE_CATCH'                 x             
   13866 `GIMPLE_COND'                  x             x
   13867 `GIMPLE_DEBUG'                 x             x
   13868 `GIMPLE_EH_FILTER'             x             
   13869 `GIMPLE_GOTO'                  x             x
   13870 `GIMPLE_LABEL'                 x             x
   13871 `GIMPLE_NOP'                   x             x
   13872 `GIMPLE_OMP_ATOMIC_LOAD'       x             x
   13873 `GIMPLE_OMP_ATOMIC_STORE'      x             x
   13874 `GIMPLE_OMP_CONTINUE'          x             x
   13875 `GIMPLE_OMP_CRITICAL'          x             x
   13876 `GIMPLE_OMP_FOR'               x             x
   13877 `GIMPLE_OMP_MASTER'            x             x
   13878 `GIMPLE_OMP_ORDERED'           x             x
   13879 `GIMPLE_OMP_PARALLEL'          x             x
   13880 `GIMPLE_OMP_RETURN'            x             x
   13881 `GIMPLE_OMP_SECTION'           x             x
   13882 `GIMPLE_OMP_SECTIONS'          x             x
   13883 `GIMPLE_OMP_SECTIONS_SWITCH'   x             x
   13884 `GIMPLE_OMP_SINGLE'            x             x
   13885 `GIMPLE_PHI'                                 x
   13886 `GIMPLE_RESX'                                x
   13887 `GIMPLE_RETURN'                x             x
   13888 `GIMPLE_SWITCH'                x             x
   13889 `GIMPLE_TRY'                   x             
   13890 
   13891 
   13892 File: gccint.info,  Node: GIMPLE Exception Handling,  Next: Temporaries,  Prev: GIMPLE instruction set,  Up: GIMPLE
   13893 
   13894 12.3 Exception Handling
   13895 =======================
   13896 
   13897 Other exception handling constructs are represented using
   13898 `GIMPLE_TRY_CATCH'.  `GIMPLE_TRY_CATCH' has two operands.  The first
   13899 operand is a sequence of statements to execute.  If executing these
   13900 statements does not throw an exception, then the second operand is
   13901 ignored.  Otherwise, if an exception is thrown, then the second operand
   13902 of the `GIMPLE_TRY_CATCH' is checked.  The second operand may have the
   13903 following forms:
   13904 
   13905   1. A sequence of statements to execute.  When an exception occurs,
   13906      these statements are executed, and then the exception is rethrown.
   13907 
   13908   2. A sequence of `GIMPLE_CATCH' statements.  Each `GIMPLE_CATCH' has
   13909      a list of applicable exception types and handler code.  If the
   13910      thrown exception matches one of the caught types, the associated
   13911      handler code is executed.  If the handler code falls off the
   13912      bottom, execution continues after the original `GIMPLE_TRY_CATCH'.
   13913 
   13914   3. A `GIMPLE_EH_FILTER' statement.  This has a list of permitted
   13915      exception types, and code to handle a match failure.  If the
   13916      thrown exception does not match one of the allowed types, the
   13917      associated match failure code is executed.  If the thrown exception
   13918      does match, it continues unwinding the stack looking for the next
   13919      handler.
   13920 
   13921 
   13922  Currently throwing an exception is not directly represented in GIMPLE,
   13923 since it is implemented by calling a function.  At some point in the
   13924 future we will want to add some way to express that the call will throw
   13925 an exception of a known type.
   13926 
   13927  Just before running the optimizers, the compiler lowers the high-level
   13928 EH constructs above into a set of `goto's, magic labels, and EH
   13929 regions.  Continuing to unwind at the end of a cleanup is represented
   13930 with a `GIMPLE_RESX'.
   13931 
   13932 
   13933 File: gccint.info,  Node: Temporaries,  Next: Operands,  Prev: GIMPLE Exception Handling,  Up: GIMPLE
   13934 
   13935 12.4 Temporaries
   13936 ================
   13937 
   13938 When gimplification encounters a subexpression that is too complex, it
   13939 creates a new temporary variable to hold the value of the
   13940 subexpression, and adds a new statement to initialize it before the
   13941 current statement. These special temporaries are known as `expression
   13942 temporaries', and are allocated using `get_formal_tmp_var'.  The
   13943 compiler tries to always evaluate identical expressions into the same
   13944 temporary, to simplify elimination of redundant calculations.
   13945 
   13946  We can only use expression temporaries when we know that it will not
   13947 be reevaluated before its value is used, and that it will not be
   13948 otherwise modified(1). Other temporaries can be allocated using
   13949 `get_initialized_tmp_var' or `create_tmp_var'.
   13950 
   13951  Currently, an expression like `a = b + 5' is not reduced any further.
   13952 We tried converting it to something like
   13953      T1 = b + 5;
   13954      a = T1;
   13955  but this bloated the representation for minimal benefit.  However, a
   13956 variable which must live in memory cannot appear in an expression; its
   13957 value is explicitly loaded into a temporary first.  Similarly, storing
   13958 the value of an expression to a memory variable goes through a
   13959 temporary.
   13960 
   13961  ---------- Footnotes ----------
   13962 
   13963  (1) These restrictions are derived from those in Morgan 4.8.
   13964 
   13965 
   13966 File: gccint.info,  Node: Operands,  Next: Manipulating GIMPLE statements,  Prev: Temporaries,  Up: GIMPLE
   13967 
   13968 12.5 Operands
   13969 =============
   13970 
   13971 In general, expressions in GIMPLE consist of an operation and the
   13972 appropriate number of simple operands; these operands must either be a
   13973 GIMPLE rvalue (`is_gimple_val'), i.e. a constant or a register
   13974 variable.  More complex operands are factored out into temporaries, so
   13975 that
   13976      a = b + c + d
   13977  becomes
   13978      T1 = b + c;
   13979      a = T1 + d;
   13980 
   13981  The same rule holds for arguments to a `GIMPLE_CALL'.
   13982 
   13983  The target of an assignment is usually a variable, but can also be a
   13984 `MEM_REF' or a compound lvalue as described below.
   13985 
   13986 * Menu:
   13987 
   13988 * Compound Expressions::
   13989 * Compound Lvalues::
   13990 * Conditional Expressions::
   13991 * Logical Operators::
   13992 
   13993 
   13994 File: gccint.info,  Node: Compound Expressions,  Next: Compound Lvalues,  Up: Operands
   13995 
   13996 12.5.1 Compound Expressions
   13997 ---------------------------
   13998 
   13999 The left-hand side of a C comma expression is simply moved into a
   14000 separate statement.
   14001 
   14002 
   14003 File: gccint.info,  Node: Compound Lvalues,  Next: Conditional Expressions,  Prev: Compound Expressions,  Up: Operands
   14004 
   14005 12.5.2 Compound Lvalues
   14006 -----------------------
   14007 
   14008 Currently compound lvalues involving array and structure field
   14009 references are not broken down; an expression like `a.b[2] = 42' is not
   14010 reduced any further (though complex array subscripts are).  This
   14011 restriction is a workaround for limitations in later optimizers; if we
   14012 were to convert this to
   14013 
   14014      T1 = &a.b;
   14015      T1[2] = 42;
   14016 
   14017  alias analysis would not remember that the reference to `T1[2]' came
   14018 by way of `a.b', so it would think that the assignment could alias
   14019 another member of `a'; this broke `struct-alias-1.c'.  Future optimizer
   14020 improvements may make this limitation unnecessary.
   14021 
   14022 
   14023 File: gccint.info,  Node: Conditional Expressions,  Next: Logical Operators,  Prev: Compound Lvalues,  Up: Operands
   14024 
   14025 12.5.3 Conditional Expressions
   14026 ------------------------------
   14027 
   14028 A C `?:' expression is converted into an `if' statement with each
   14029 branch assigning to the same temporary.  So,
   14030 
   14031      a = b ? c : d;
   14032  becomes
   14033      if (b == 1)
   14034        T1 = c;
   14035      else
   14036        T1 = d;
   14037      a = T1;
   14038 
   14039  The GIMPLE level if-conversion pass re-introduces `?:' expression, if
   14040 appropriate. It is used to vectorize loops with conditions using vector
   14041 conditional operations.
   14042 
   14043  Note that in GIMPLE, `if' statements are represented using
   14044 `GIMPLE_COND', as described below.
   14045 
   14046 
   14047 File: gccint.info,  Node: Logical Operators,  Prev: Conditional Expressions,  Up: Operands
   14048 
   14049 12.5.4 Logical Operators
   14050 ------------------------
   14051 
   14052 Except when they appear in the condition operand of a `GIMPLE_COND',
   14053 logical `and' and `or' operators are simplified as follows: `a = b &&
   14054 c' becomes
   14055 
   14056      T1 = (bool)b;
   14057      if (T1 == true)
   14058        T1 = (bool)c;
   14059      a = T1;
   14060 
   14061  Note that `T1' in this example cannot be an expression temporary,
   14062 because it has two different assignments.
   14063 
   14064 12.5.5 Manipulating operands
   14065 ----------------------------
   14066 
   14067 All gimple operands are of type `tree'.  But only certain types of
   14068 trees are allowed to be used as operand tuples.  Basic validation is
   14069 controlled by the function `get_gimple_rhs_class', which given a tree
   14070 code, returns an `enum' with the following values of type `enum
   14071 gimple_rhs_class'
   14072 
   14073    * `GIMPLE_INVALID_RHS' The tree cannot be used as a GIMPLE operand.
   14074 
   14075    * `GIMPLE_TERNARY_RHS' The tree is a valid GIMPLE ternary operation.
   14076 
   14077    * `GIMPLE_BINARY_RHS' The tree is a valid GIMPLE binary operation.
   14078 
   14079    * `GIMPLE_UNARY_RHS' The tree is a valid GIMPLE unary operation.
   14080 
   14081    * `GIMPLE_SINGLE_RHS' The tree is a single object, that cannot be
   14082      split into simpler operands (for instance, `SSA_NAME', `VAR_DECL',
   14083      `COMPONENT_REF', etc).
   14084 
   14085      This operand class also acts as an escape hatch for tree nodes
   14086      that may be flattened out into the operand vector, but would need
   14087      more than two slots on the RHS.  For instance, a `COND_EXPR'
   14088      expression of the form `(a op b) ? x : y' could be flattened out
   14089      on the operand vector using 4 slots, but it would also require
   14090      additional processing to distinguish `c = a op b' from `c = a op b
   14091      ? x : y'.  Something similar occurs with `ASSERT_EXPR'.   In time,
   14092      these special case tree expressions should be flattened into the
   14093      operand vector.
   14094 
   14095  For tree nodes in the categories `GIMPLE_TERNARY_RHS',
   14096 `GIMPLE_BINARY_RHS' and `GIMPLE_UNARY_RHS', they cannot be stored
   14097 inside tuples directly.  They first need to be flattened and separated
   14098 into individual components.  For instance, given the GENERIC expression
   14099 
   14100      a = b + c
   14101 
   14102  its tree representation is:
   14103 
   14104      MODIFY_EXPR <VAR_DECL  <a>, PLUS_EXPR <VAR_DECL <b>, VAR_DECL <c>>>
   14105 
   14106  In this case, the GIMPLE form for this statement is logically
   14107 identical to its GENERIC form but in GIMPLE, the `PLUS_EXPR' on the RHS
   14108 of the assignment is not represented as a tree, instead the two
   14109 operands are taken out of the `PLUS_EXPR' sub-tree and flattened into
   14110 the GIMPLE tuple as follows:
   14111 
   14112      GIMPLE_ASSIGN <PLUS_EXPR, VAR_DECL <a>, VAR_DECL <b>, VAR_DECL <c>>
   14113 
   14114 12.5.6 Operand vector allocation
   14115 --------------------------------
   14116 
   14117 The operand vector is stored at the bottom of the three tuple
   14118 structures that accept operands. This means, that depending on the code
   14119 of a given statement, its operand vector will be at different offsets
   14120 from the base of the structure.  To access tuple operands use the
   14121 following accessors
   14122 
   14123  -- GIMPLE function: unsigned gimple_num_ops (gimple g)
   14124      Returns the number of operands in statement G.
   14125 
   14126  -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
   14127      Returns operand `I' from statement `G'.
   14128 
   14129  -- GIMPLE function: tree * gimple_ops (gimple g)
   14130      Returns a pointer into the operand vector for statement `G'.  This
   14131      is computed using an internal table called `gimple_ops_offset_'[].
   14132      This table is indexed by the gimple code of `G'.
   14133 
   14134      When the compiler is built, this table is filled-in using the
   14135      sizes of the structures used by each statement code defined in
   14136      gimple.def.  Since the operand vector is at the bottom of the
   14137      structure, for a gimple code `C' the offset is computed as sizeof
   14138      (struct-of `C') - sizeof (tree).
   14139 
   14140      This mechanism adds one memory indirection to every access when
   14141      using `gimple_op'(), if this becomes a bottleneck, a pass can
   14142      choose to memoize the result from `gimple_ops'() and use that to
   14143      access the operands.
   14144 
   14145 12.5.7 Operand validation
   14146 -------------------------
   14147 
   14148 When adding a new operand to a gimple statement, the operand will be
   14149 validated according to what each tuple accepts in its operand vector.
   14150 These predicates are called by the `gimple_NAME_set_...()'.  Each tuple
   14151 will use one of the following predicates (Note, this list is not
   14152 exhaustive):
   14153 
   14154  -- GIMPLE function: bool is_gimple_val (tree t)
   14155      Returns true if t is a "GIMPLE value", which are all the
   14156      non-addressable stack variables (variables for which
   14157      `is_gimple_reg' returns true) and constants (expressions for which
   14158      `is_gimple_min_invariant' returns true).
   14159 
   14160  -- GIMPLE function: bool is_gimple_addressable (tree t)
   14161      Returns true if t is a symbol or memory reference whose address
   14162      can be taken.
   14163 
   14164  -- GIMPLE function: bool is_gimple_asm_val (tree t)
   14165      Similar to `is_gimple_val' but it also accepts hard registers.
   14166 
   14167  -- GIMPLE function: bool is_gimple_call_addr (tree t)
   14168      Return true if t is a valid expression to use as the function
   14169      called by a `GIMPLE_CALL'.
   14170 
   14171  -- GIMPLE function: bool is_gimple_mem_ref_addr (tree t)
   14172      Return true if t is a valid expression to use as first operand of
   14173      a `MEM_REF' expression.
   14174 
   14175  -- GIMPLE function: bool is_gimple_constant (tree t)
   14176      Return true if t is a valid gimple constant.
   14177 
   14178  -- GIMPLE function: bool is_gimple_min_invariant (tree t)
   14179      Return true if t is a valid minimal invariant.  This is different
   14180      from constants, in that the specific value of t may not be known
   14181      at compile time, but it is known that it doesn't change (e.g., the
   14182      address of a function local variable).
   14183 
   14184  -- GIMPLE function: bool is_gimple_ip_invariant (tree t)
   14185      Return true if t is an interprocedural invariant.  This means that
   14186      t is a valid invariant in all functions (e.g. it can be an address
   14187      of a global variable but not of a local one).
   14188 
   14189  -- GIMPLE function: bool is_gimple_ip_invariant_address (tree t)
   14190      Return true if t is an `ADDR_EXPR' that does not change once the
   14191      program is running (and which is valid in all functions).
   14192 
   14193 12.5.8 Statement validation
   14194 ---------------------------
   14195 
   14196  -- GIMPLE function: bool is_gimple_assign (gimple g)
   14197      Return true if the code of g is `GIMPLE_ASSIGN'.
   14198 
   14199  -- GIMPLE function: bool is_gimple_call (gimple g)
   14200      Return true if the code of g is `GIMPLE_CALL'.
   14201 
   14202  -- GIMPLE function: bool is_gimple_debug (gimple g)
   14203      Return true if the code of g is `GIMPLE_DEBUG'.
   14204 
   14205  -- GIMPLE function: bool gimple_assign_cast_p (gimple g)
   14206      Return true if g is a `GIMPLE_ASSIGN' that performs a type cast
   14207      operation.
   14208 
   14209  -- GIMPLE function: bool gimple_debug_bind_p (gimple g)
   14210      Return true if g is a `GIMPLE_DEBUG' that binds the value of an
   14211      expression to a variable.
   14212 
   14213 
   14214 File: gccint.info,  Node: Manipulating GIMPLE statements,  Next: Tuple specific accessors,  Prev: Operands,  Up: GIMPLE
   14215 
   14216 12.6 Manipulating GIMPLE statements
   14217 ===================================
   14218 
   14219 This section documents all the functions available to handle each of
   14220 the GIMPLE instructions.
   14221 
   14222 12.6.1 Common accessors
   14223 -----------------------
   14224 
   14225 The following are common accessors for gimple statements.
   14226 
   14227  -- GIMPLE function: enum gimple_code gimple_code (gimple g)
   14228      Return the code for statement `G'.
   14229 
   14230  -- GIMPLE function: basic_block gimple_bb (gimple g)
   14231      Return the basic block to which statement `G' belongs to.
   14232 
   14233  -- GIMPLE function: tree gimple_block (gimple g)
   14234      Return the lexical scope block holding statement `G'.
   14235 
   14236  -- GIMPLE function: tree gimple_expr_type (gimple stmt)
   14237      Return the type of the main expression computed by `STMT'. Return
   14238      `void_type_node' if `STMT' computes nothing. This will only return
   14239      something meaningful for `GIMPLE_ASSIGN', `GIMPLE_COND' and
   14240      `GIMPLE_CALL'.  For all other tuple codes, it will return
   14241      `void_type_node'.
   14242 
   14243  -- GIMPLE function: enum tree_code gimple_expr_code (gimple stmt)
   14244      Return the tree code for the expression computed by `STMT'.  This
   14245      is only meaningful for `GIMPLE_CALL', `GIMPLE_ASSIGN' and
   14246      `GIMPLE_COND'.  If `STMT' is `GIMPLE_CALL', it will return
   14247      `CALL_EXPR'.  For `GIMPLE_COND', it returns the code of the
   14248      comparison predicate.  For `GIMPLE_ASSIGN' it returns the code of
   14249      the operation performed by the `RHS' of the assignment.
   14250 
   14251  -- GIMPLE function: void gimple_set_block (gimple g, tree block)
   14252      Set the lexical scope block of `G' to `BLOCK'.
   14253 
   14254  -- GIMPLE function: location_t gimple_locus (gimple g)
   14255      Return locus information for statement `G'.
   14256 
   14257  -- GIMPLE function: void gimple_set_locus (gimple g, location_t locus)
   14258      Set locus information for statement `G'.
   14259 
   14260  -- GIMPLE function: bool gimple_locus_empty_p (gimple g)
   14261      Return true if `G' does not have locus information.
   14262 
   14263  -- GIMPLE function: bool gimple_no_warning_p (gimple stmt)
   14264      Return true if no warnings should be emitted for statement `STMT'.
   14265 
   14266  -- GIMPLE function: void gimple_set_visited (gimple stmt, bool
   14267           visited_p)
   14268      Set the visited status on statement `STMT' to `VISITED_P'.
   14269 
   14270  -- GIMPLE function: bool gimple_visited_p (gimple stmt)
   14271      Return the visited status on statement `STMT'.
   14272 
   14273  -- GIMPLE function: void gimple_set_plf (gimple stmt, enum plf_mask
   14274           plf, bool val_p)
   14275      Set pass local flag `PLF' on statement `STMT' to `VAL_P'.
   14276 
   14277  -- GIMPLE function: unsigned int gimple_plf (gimple stmt, enum
   14278           plf_mask plf)
   14279      Return the value of pass local flag `PLF' on statement `STMT'.
   14280 
   14281  -- GIMPLE function: bool gimple_has_ops (gimple g)
   14282      Return true if statement `G' has register or memory operands.
   14283 
   14284  -- GIMPLE function: bool gimple_has_mem_ops (gimple g)
   14285      Return true if statement `G' has memory operands.
   14286 
   14287  -- GIMPLE function: unsigned gimple_num_ops (gimple g)
   14288      Return the number of operands for statement `G'.
   14289 
   14290  -- GIMPLE function: tree * gimple_ops (gimple g)
   14291      Return the array of operands for statement `G'.
   14292 
   14293  -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
   14294      Return operand `I' for statement `G'.
   14295 
   14296  -- GIMPLE function: tree * gimple_op_ptr (gimple g, unsigned i)
   14297      Return a pointer to operand `I' for statement `G'.
   14298 
   14299  -- GIMPLE function: void gimple_set_op (gimple g, unsigned i, tree op)
   14300      Set operand `I' of statement `G' to `OP'.
   14301 
   14302  -- GIMPLE function: bitmap gimple_addresses_taken (gimple stmt)
   14303      Return the set of symbols that have had their address taken by
   14304      `STMT'.
   14305 
   14306  -- GIMPLE function: struct def_optype_d * gimple_def_ops (gimple g)
   14307      Return the set of `DEF' operands for statement `G'.
   14308 
   14309  -- GIMPLE function: void gimple_set_def_ops (gimple g, struct
   14310           def_optype_d *def)
   14311      Set `DEF' to be the set of `DEF' operands for statement `G'.
   14312 
   14313  -- GIMPLE function: struct use_optype_d * gimple_use_ops (gimple g)
   14314      Return the set of `USE' operands for statement `G'.
   14315 
   14316  -- GIMPLE function: void gimple_set_use_ops (gimple g, struct
   14317           use_optype_d *use)
   14318      Set `USE' to be the set of `USE' operands for statement `G'.
   14319 
   14320  -- GIMPLE function: struct voptype_d * gimple_vuse_ops (gimple g)
   14321      Return the set of `VUSE' operands for statement `G'.
   14322 
   14323  -- GIMPLE function: void gimple_set_vuse_ops (gimple g, struct
   14324           voptype_d *ops)
   14325      Set `OPS' to be the set of `VUSE' operands for statement `G'.
   14326 
   14327  -- GIMPLE function: struct voptype_d * gimple_vdef_ops (gimple g)
   14328      Return the set of `VDEF' operands for statement `G'.
   14329 
   14330  -- GIMPLE function: void gimple_set_vdef_ops (gimple g, struct
   14331           voptype_d *ops)
   14332      Set `OPS' to be the set of `VDEF' operands for statement `G'.
   14333 
   14334  -- GIMPLE function: bitmap gimple_loaded_syms (gimple g)
   14335      Return the set of symbols loaded by statement `G'.  Each element of
   14336      the set is the `DECL_UID' of the corresponding symbol.
   14337 
   14338  -- GIMPLE function: bitmap gimple_stored_syms (gimple g)
   14339      Return the set of symbols stored by statement `G'.  Each element of
   14340      the set is the `DECL_UID' of the corresponding symbol.
   14341 
   14342  -- GIMPLE function: bool gimple_modified_p (gimple g)
   14343      Return true if statement `G' has operands and the modified field
   14344      has been set.
   14345 
   14346  -- GIMPLE function: bool gimple_has_volatile_ops (gimple stmt)
   14347      Return true if statement `STMT' contains volatile operands.
   14348 
   14349  -- GIMPLE function: void gimple_set_has_volatile_ops (gimple stmt,
   14350           bool volatilep)
   14351      Return true if statement `STMT' contains volatile operands.
   14352 
   14353  -- GIMPLE function: void update_stmt (gimple s)
   14354      Mark statement `S' as modified, and update it.
   14355 
   14356  -- GIMPLE function: void update_stmt_if_modified (gimple s)
   14357      Update statement `S' if it has been marked modified.
   14358 
   14359  -- GIMPLE function: gimple gimple_copy (gimple stmt)
   14360      Return a deep copy of statement `STMT'.
   14361 
   14362 
   14363 File: gccint.info,  Node: Tuple specific accessors,  Next: GIMPLE sequences,  Prev: Manipulating GIMPLE statements,  Up: GIMPLE
   14364 
   14365 12.7 Tuple specific accessors
   14366 =============================
   14367 
   14368 * Menu:
   14369 
   14370 * `GIMPLE_ASM'::
   14371 * `GIMPLE_ASSIGN'::
   14372 * `GIMPLE_BIND'::
   14373 * `GIMPLE_CALL'::
   14374 * `GIMPLE_CATCH'::
   14375 * `GIMPLE_COND'::
   14376 * `GIMPLE_DEBUG'::
   14377 * `GIMPLE_EH_FILTER'::
   14378 * `GIMPLE_LABEL'::
   14379 * `GIMPLE_NOP'::
   14380 * `GIMPLE_OMP_ATOMIC_LOAD'::
   14381 * `GIMPLE_OMP_ATOMIC_STORE'::
   14382 * `GIMPLE_OMP_CONTINUE'::
   14383 * `GIMPLE_OMP_CRITICAL'::
   14384 * `GIMPLE_OMP_FOR'::
   14385 * `GIMPLE_OMP_MASTER'::
   14386 * `GIMPLE_OMP_ORDERED'::
   14387 * `GIMPLE_OMP_PARALLEL'::
   14388 * `GIMPLE_OMP_RETURN'::
   14389 * `GIMPLE_OMP_SECTION'::
   14390 * `GIMPLE_OMP_SECTIONS'::
   14391 * `GIMPLE_OMP_SINGLE'::
   14392 * `GIMPLE_PHI'::
   14393 * `GIMPLE_RESX'::
   14394 * `GIMPLE_RETURN'::
   14395 * `GIMPLE_SWITCH'::
   14396 * `GIMPLE_TRY'::
   14397 * `GIMPLE_WITH_CLEANUP_EXPR'::
   14398 
   14399 
   14400 File: gccint.info,  Node: `GIMPLE_ASM',  Next: `GIMPLE_ASSIGN',  Up: Tuple specific accessors
   14401 
   14402 12.7.1 `GIMPLE_ASM'
   14403 -------------------
   14404 
   14405  -- GIMPLE function: gimple gimple_build_asm (const char *string,
   14406           ninputs, noutputs, nclobbers, ...)
   14407      Build a `GIMPLE_ASM' statement.  This statement is used for
   14408      building in-line assembly constructs.  `STRING' is the assembly
   14409      code.  `NINPUT' is the number of register inputs.  `NOUTPUT' is the
   14410      number of register outputs.  `NCLOBBERS' is the number of clobbered
   14411      registers.  The rest of the arguments trees for each input,
   14412      output, and clobbered registers.
   14413 
   14414  -- GIMPLE function: gimple gimple_build_asm_vec (const char *,
   14415           VEC(tree,gc) *, VEC(tree,gc) *, VEC(tree,gc) *)
   14416      Identical to gimple_build_asm, but the arguments are passed in
   14417      VECs.
   14418 
   14419  -- GIMPLE function: unsigned gimple_asm_ninputs (gimple g)
   14420      Return the number of input operands for `GIMPLE_ASM' `G'.
   14421 
   14422  -- GIMPLE function: unsigned gimple_asm_noutputs (gimple g)
   14423      Return the number of output operands for `GIMPLE_ASM' `G'.
   14424 
   14425  -- GIMPLE function: unsigned gimple_asm_nclobbers (gimple g)
   14426      Return the number of clobber operands for `GIMPLE_ASM' `G'.
   14427 
   14428  -- GIMPLE function: tree gimple_asm_input_op (gimple g, unsigned index)
   14429      Return input operand `INDEX' of `GIMPLE_ASM' `G'.
   14430 
   14431  -- GIMPLE function: void gimple_asm_set_input_op (gimple g, unsigned
   14432           index, tree in_op)
   14433      Set `IN_OP' to be input operand `INDEX' in `GIMPLE_ASM' `G'.
   14434 
   14435  -- GIMPLE function: tree gimple_asm_output_op (gimple g, unsigned
   14436           index)
   14437      Return output operand `INDEX' of `GIMPLE_ASM' `G'.
   14438 
   14439  -- GIMPLE function: void gimple_asm_set_output_op (gimple g, unsigned
   14440           index, tree out_op)
   14441      Set `OUT_OP' to be output operand `INDEX' in `GIMPLE_ASM' `G'.
   14442 
   14443  -- GIMPLE function: tree gimple_asm_clobber_op (gimple g, unsigned
   14444           index)
   14445      Return clobber operand `INDEX' of `GIMPLE_ASM' `G'.
   14446 
   14447  -- GIMPLE function: void gimple_asm_set_clobber_op (gimple g, unsigned
   14448           index, tree clobber_op)
   14449      Set `CLOBBER_OP' to be clobber operand `INDEX' in `GIMPLE_ASM' `G'.
   14450 
   14451  -- GIMPLE function: const char * gimple_asm_string (gimple g)
   14452      Return the string representing the assembly instruction in
   14453      `GIMPLE_ASM' `G'.
   14454 
   14455  -- GIMPLE function: bool gimple_asm_volatile_p (gimple g)
   14456      Return true if `G' is an asm statement marked volatile.
   14457 
   14458  -- GIMPLE function: void gimple_asm_set_volatile (gimple g)
   14459      Mark asm statement `G' as volatile.
   14460 
   14461  -- GIMPLE function: void gimple_asm_clear_volatile (gimple g)
   14462      Remove volatile marker from asm statement `G'.
   14463 
   14464 
   14465 File: gccint.info,  Node: `GIMPLE_ASSIGN',  Next: `GIMPLE_BIND',  Prev: `GIMPLE_ASM',  Up: Tuple specific accessors
   14466 
   14467 12.7.2 `GIMPLE_ASSIGN'
   14468 ----------------------
   14469 
   14470  -- GIMPLE function: gimple gimple_build_assign (tree lhs, tree rhs)
   14471      Build a `GIMPLE_ASSIGN' statement.  The left-hand side is an lvalue
   14472      passed in lhs.  The right-hand side can be either a unary or
   14473      binary tree expression.  The expression tree rhs will be flattened
   14474      and its operands assigned to the corresponding operand slots in
   14475      the new statement.  This function is useful when you already have
   14476      a tree expression that you want to convert into a tuple.  However,
   14477      try to avoid building expression trees for the sole purpose of
   14478      calling this function.  If you already have the operands in
   14479      separate trees, it is better to use `gimple_build_assign_with_ops'.
   14480 
   14481  -- GIMPLE function: gimple gimplify_assign (tree dst, tree src,
   14482           gimple_seq *seq_p)
   14483      Build a new `GIMPLE_ASSIGN' tuple and append it to the end of
   14484      `*SEQ_P'.
   14485 
   14486  `DST'/`SRC' are the destination and source respectively.  You can pass
   14487 ungimplified trees in `DST' or `SRC', in which case they will be
   14488 converted to a gimple operand if necessary.
   14489 
   14490  This function returns the newly created `GIMPLE_ASSIGN' tuple.
   14491 
   14492  -- GIMPLE function: gimple gimple_build_assign_with_ops (enum
   14493           tree_code subcode, tree lhs, tree op1, tree op2)
   14494      This function is similar to `gimple_build_assign', but is used to
   14495      build a `GIMPLE_ASSIGN' statement when the operands of the
   14496      right-hand side of the assignment are already split into different
   14497      operands.
   14498 
   14499      The left-hand side is an lvalue passed in lhs.  Subcode is the
   14500      `tree_code' for the right-hand side of the assignment.  Op1 and op2
   14501      are the operands.  If op2 is null, subcode must be a `tree_code'
   14502      for a unary expression.
   14503 
   14504  -- GIMPLE function: enum tree_code gimple_assign_rhs_code (gimple g)
   14505      Return the code of the expression computed on the `RHS' of
   14506      assignment statement `G'.
   14507 
   14508  -- GIMPLE function: enum gimple_rhs_class gimple_assign_rhs_class
   14509           (gimple g)
   14510      Return the gimple rhs class of the code for the expression
   14511      computed on the rhs of assignment statement `G'.  This will never
   14512      return `GIMPLE_INVALID_RHS'.
   14513 
   14514  -- GIMPLE function: tree gimple_assign_lhs (gimple g)
   14515      Return the `LHS' of assignment statement `G'.
   14516 
   14517  -- GIMPLE function: tree * gimple_assign_lhs_ptr (gimple g)
   14518      Return a pointer to the `LHS' of assignment statement `G'.
   14519 
   14520  -- GIMPLE function: tree gimple_assign_rhs1 (gimple g)
   14521      Return the first operand on the `RHS' of assignment statement `G'.
   14522 
   14523  -- GIMPLE function: tree * gimple_assign_rhs1_ptr (gimple g)
   14524      Return the address of the first operand on the `RHS' of assignment
   14525      statement `G'.
   14526 
   14527  -- GIMPLE function: tree gimple_assign_rhs2 (gimple g)
   14528      Return the second operand on the `RHS' of assignment statement `G'.
   14529 
   14530  -- GIMPLE function: tree * gimple_assign_rhs2_ptr (gimple g)
   14531      Return the address of the second operand on the `RHS' of assignment
   14532      statement `G'.
   14533 
   14534  -- GIMPLE function: tree gimple_assign_rhs3 (gimple g)
   14535      Return the third operand on the `RHS' of assignment statement `G'.
   14536 
   14537  -- GIMPLE function: tree * gimple_assign_rhs3_ptr (gimple g)
   14538      Return the address of the third operand on the `RHS' of assignment
   14539      statement `G'.
   14540 
   14541  -- GIMPLE function: void gimple_assign_set_lhs (gimple g, tree lhs)
   14542      Set `LHS' to be the `LHS' operand of assignment statement `G'.
   14543 
   14544  -- GIMPLE function: void gimple_assign_set_rhs1 (gimple g, tree rhs)
   14545      Set `RHS' to be the first operand on the `RHS' of assignment
   14546      statement `G'.
   14547 
   14548  -- GIMPLE function: void gimple_assign_set_rhs2 (gimple g, tree rhs)
   14549      Set `RHS' to be the second operand on the `RHS' of assignment
   14550      statement `G'.
   14551 
   14552  -- GIMPLE function: void gimple_assign_set_rhs3 (gimple g, tree rhs)
   14553      Set `RHS' to be the third operand on the `RHS' of assignment
   14554      statement `G'.
   14555 
   14556  -- GIMPLE function: bool gimple_assign_cast_p (gimple s)
   14557      Return true if `S' is a type-cast assignment.
   14558 
   14559 
   14560 File: gccint.info,  Node: `GIMPLE_BIND',  Next: `GIMPLE_CALL',  Prev: `GIMPLE_ASSIGN',  Up: Tuple specific accessors
   14561 
   14562 12.7.3 `GIMPLE_BIND'
   14563 --------------------
   14564 
   14565  -- GIMPLE function: gimple gimple_build_bind (tree vars, gimple_seq
   14566           body)
   14567      Build a `GIMPLE_BIND' statement with a list of variables in `VARS'
   14568      and a body of statements in sequence `BODY'.
   14569 
   14570  -- GIMPLE function: tree gimple_bind_vars (gimple g)
   14571      Return the variables declared in the `GIMPLE_BIND' statement `G'.
   14572 
   14573  -- GIMPLE function: void gimple_bind_set_vars (gimple g, tree vars)
   14574      Set `VARS' to be the set of variables declared in the `GIMPLE_BIND'
   14575      statement `G'.
   14576 
   14577  -- GIMPLE function: void gimple_bind_append_vars (gimple g, tree vars)
   14578      Append `VARS' to the set of variables declared in the `GIMPLE_BIND'
   14579      statement `G'.
   14580 
   14581  -- GIMPLE function: gimple_seq gimple_bind_body (gimple g)
   14582      Return the GIMPLE sequence contained in the `GIMPLE_BIND' statement
   14583      `G'.
   14584 
   14585  -- GIMPLE function: void gimple_bind_set_body (gimple g, gimple_seq
   14586           seq)
   14587      Set `SEQ' to be sequence contained in the `GIMPLE_BIND' statement
   14588      `G'.
   14589 
   14590  -- GIMPLE function: void gimple_bind_add_stmt (gimple gs, gimple stmt)
   14591      Append a statement to the end of a `GIMPLE_BIND''s body.
   14592 
   14593  -- GIMPLE function: void gimple_bind_add_seq (gimple gs, gimple_seq
   14594           seq)
   14595      Append a sequence of statements to the end of a `GIMPLE_BIND''s
   14596      body.
   14597 
   14598  -- GIMPLE function: tree gimple_bind_block (gimple g)
   14599      Return the `TREE_BLOCK' node associated with `GIMPLE_BIND'
   14600      statement `G'. This is analogous to the `BIND_EXPR_BLOCK' field in
   14601      trees.
   14602 
   14603  -- GIMPLE function: void gimple_bind_set_block (gimple g, tree block)
   14604      Set `BLOCK' to be the `TREE_BLOCK' node associated with
   14605      `GIMPLE_BIND' statement `G'.
   14606 
   14607 
   14608 File: gccint.info,  Node: `GIMPLE_CALL',  Next: `GIMPLE_CATCH',  Prev: `GIMPLE_BIND',  Up: Tuple specific accessors
   14609 
   14610 12.7.4 `GIMPLE_CALL'
   14611 --------------------
   14612 
   14613  -- GIMPLE function: gimple gimple_build_call (tree fn, unsigned nargs,
   14614           ...)
   14615      Build a `GIMPLE_CALL' statement to function `FN'.  The argument
   14616      `FN' must be either a `FUNCTION_DECL' or a gimple call address as
   14617      determined by `is_gimple_call_addr'.  `NARGS' are the number of
   14618      arguments.  The rest of the arguments follow the argument `NARGS',
   14619      and must be trees that are valid as rvalues in gimple (i.e., each
   14620      operand is validated with `is_gimple_operand').
   14621 
   14622  -- GIMPLE function: gimple gimple_build_call_from_tree (tree call_expr)
   14623      Build a `GIMPLE_CALL' from a `CALL_EXPR' node.  The arguments and
   14624      the function are taken from the expression directly.  This routine
   14625      assumes that `call_expr' is already in GIMPLE form.  That is, its
   14626      operands are GIMPLE values and the function call needs no further
   14627      simplification.  All the call flags in `call_expr' are copied over
   14628      to the new `GIMPLE_CALL'.
   14629 
   14630  -- GIMPLE function: gimple gimple_build_call_vec (tree fn, `VEC'(tree,
   14631           heap) *args)
   14632      Identical to `gimple_build_call' but the arguments are stored in a
   14633      `VEC'().
   14634 
   14635  -- GIMPLE function: tree gimple_call_lhs (gimple g)
   14636      Return the `LHS' of call statement `G'.
   14637 
   14638  -- GIMPLE function: tree * gimple_call_lhs_ptr (gimple g)
   14639      Return a pointer to the `LHS' of call statement `G'.
   14640 
   14641  -- GIMPLE function: void gimple_call_set_lhs (gimple g, tree lhs)
   14642      Set `LHS' to be the `LHS' operand of call statement `G'.
   14643 
   14644  -- GIMPLE function: tree gimple_call_fn (gimple g)
   14645      Return the tree node representing the function called by call
   14646      statement `G'.
   14647 
   14648  -- GIMPLE function: void gimple_call_set_fn (gimple g, tree fn)
   14649      Set `FN' to be the function called by call statement `G'.  This has
   14650      to be a gimple value specifying the address of the called function.
   14651 
   14652  -- GIMPLE function: tree gimple_call_fndecl (gimple g)
   14653      If a given `GIMPLE_CALL''s callee is a `FUNCTION_DECL', return it.
   14654      Otherwise return `NULL'.  This function is analogous to
   14655      `get_callee_fndecl' in `GENERIC'.
   14656 
   14657  -- GIMPLE function: tree gimple_call_set_fndecl (gimple g, tree fndecl)
   14658      Set the called function to `FNDECL'.
   14659 
   14660  -- GIMPLE function: tree gimple_call_return_type (gimple g)
   14661      Return the type returned by call statement `G'.
   14662 
   14663  -- GIMPLE function: tree gimple_call_chain (gimple g)
   14664      Return the static chain for call statement `G'.
   14665 
   14666  -- GIMPLE function: void gimple_call_set_chain (gimple g, tree chain)
   14667      Set `CHAIN' to be the static chain for call statement `G'.
   14668 
   14669  -- GIMPLE function: unsigned gimple_call_num_args (gimple g)
   14670      Return the number of arguments used by call statement `G'.
   14671 
   14672  -- GIMPLE function: tree gimple_call_arg (gimple g, unsigned index)
   14673      Return the argument at position `INDEX' for call statement `G'.
   14674      The first argument is 0.
   14675 
   14676  -- GIMPLE function: tree * gimple_call_arg_ptr (gimple g, unsigned
   14677           index)
   14678      Return a pointer to the argument at position `INDEX' for call
   14679      statement `G'.
   14680 
   14681  -- GIMPLE function: void gimple_call_set_arg (gimple g, unsigned
   14682           index, tree arg)
   14683      Set `ARG' to be the argument at position `INDEX' for call statement
   14684      `G'.
   14685 
   14686  -- GIMPLE function: void gimple_call_set_tail (gimple s)
   14687      Mark call statement `S' as being a tail call (i.e., a call just
   14688      before the exit of a function). These calls are candidate for tail
   14689      call optimization.
   14690 
   14691  -- GIMPLE function: bool gimple_call_tail_p (gimple s)
   14692      Return true if `GIMPLE_CALL' `S' is marked as a tail call.
   14693 
   14694  -- GIMPLE function: void gimple_call_mark_uninlinable (gimple s)
   14695      Mark `GIMPLE_CALL' `S' as being uninlinable.
   14696 
   14697  -- GIMPLE function: bool gimple_call_cannot_inline_p (gimple s)
   14698      Return true if `GIMPLE_CALL' `S' cannot be inlined.
   14699 
   14700  -- GIMPLE function: bool gimple_call_noreturn_p (gimple s)
   14701      Return true if `S' is a noreturn call.
   14702 
   14703  -- GIMPLE function: gimple gimple_call_copy_skip_args (gimple stmt,
   14704           bitmap args_to_skip)
   14705      Build a `GIMPLE_CALL' identical to `STMT' but skipping the
   14706      arguments in the positions marked by the set `ARGS_TO_SKIP'.
   14707 
   14708 
   14709 File: gccint.info,  Node: `GIMPLE_CATCH',  Next: `GIMPLE_COND',  Prev: `GIMPLE_CALL',  Up: Tuple specific accessors
   14710 
   14711 12.7.5 `GIMPLE_CATCH'
   14712 ---------------------
   14713 
   14714  -- GIMPLE function: gimple gimple_build_catch (tree types, gimple_seq
   14715           handler)
   14716      Build a `GIMPLE_CATCH' statement.  `TYPES' are the tree types this
   14717      catch handles.  `HANDLER' is a sequence of statements with the code
   14718      for the handler.
   14719 
   14720  -- GIMPLE function: tree gimple_catch_types (gimple g)
   14721      Return the types handled by `GIMPLE_CATCH' statement `G'.
   14722 
   14723  -- GIMPLE function: tree * gimple_catch_types_ptr (gimple g)
   14724      Return a pointer to the types handled by `GIMPLE_CATCH' statement
   14725      `G'.
   14726 
   14727  -- GIMPLE function: gimple_seq gimple_catch_handler (gimple g)
   14728      Return the GIMPLE sequence representing the body of the handler of
   14729      `GIMPLE_CATCH' statement `G'.
   14730 
   14731  -- GIMPLE function: void gimple_catch_set_types (gimple g, tree t)
   14732      Set `T' to be the set of types handled by `GIMPLE_CATCH' `G'.
   14733 
   14734  -- GIMPLE function: void gimple_catch_set_handler (gimple g,
   14735           gimple_seq handler)
   14736      Set `HANDLER' to be the body of `GIMPLE_CATCH' `G'.
   14737 
   14738 
   14739 File: gccint.info,  Node: `GIMPLE_COND',  Next: `GIMPLE_DEBUG',  Prev: `GIMPLE_CATCH',  Up: Tuple specific accessors
   14740 
   14741 12.7.6 `GIMPLE_COND'
   14742 --------------------
   14743 
   14744  -- GIMPLE function: gimple gimple_build_cond (enum tree_code
   14745           pred_code, tree lhs, tree rhs, tree t_label, tree f_label)
   14746      Build a `GIMPLE_COND' statement.  `A' `GIMPLE_COND' statement
   14747      compares `LHS' and `RHS' and if the condition in `PRED_CODE' is
   14748      true, jump to the label in `t_label', otherwise jump to the label
   14749      in `f_label'.  `PRED_CODE' are relational operator tree codes like
   14750      `EQ_EXPR', `LT_EXPR', `LE_EXPR', `NE_EXPR', etc.
   14751 
   14752  -- GIMPLE function: gimple gimple_build_cond_from_tree (tree cond,
   14753           tree t_label, tree f_label)
   14754      Build a `GIMPLE_COND' statement from the conditional expression
   14755      tree `COND'.  `T_LABEL' and `F_LABEL' are as in
   14756      `gimple_build_cond'.
   14757 
   14758  -- GIMPLE function: enum tree_code gimple_cond_code (gimple g)
   14759      Return the code of the predicate computed by conditional statement
   14760      `G'.
   14761 
   14762  -- GIMPLE function: void gimple_cond_set_code (gimple g, enum
   14763           tree_code code)
   14764      Set `CODE' to be the predicate code for the conditional statement
   14765      `G'.
   14766 
   14767  -- GIMPLE function: tree gimple_cond_lhs (gimple g)
   14768      Return the `LHS' of the predicate computed by conditional statement
   14769      `G'.
   14770 
   14771  -- GIMPLE function: void gimple_cond_set_lhs (gimple g, tree lhs)
   14772      Set `LHS' to be the `LHS' operand of the predicate computed by
   14773      conditional statement `G'.
   14774 
   14775  -- GIMPLE function: tree gimple_cond_rhs (gimple g)
   14776      Return the `RHS' operand of the predicate computed by conditional
   14777      `G'.
   14778 
   14779  -- GIMPLE function: void gimple_cond_set_rhs (gimple g, tree rhs)
   14780      Set `RHS' to be the `RHS' operand of the predicate computed by
   14781      conditional statement `G'.
   14782 
   14783  -- GIMPLE function: tree gimple_cond_true_label (gimple g)
   14784      Return the label used by conditional statement `G' when its
   14785      predicate evaluates to true.
   14786 
   14787  -- GIMPLE function: void gimple_cond_set_true_label (gimple g, tree
   14788           label)
   14789      Set `LABEL' to be the label used by conditional statement `G' when
   14790      its predicate evaluates to true.
   14791 
   14792  -- GIMPLE function: void gimple_cond_set_false_label (gimple g, tree
   14793           label)
   14794      Set `LABEL' to be the label used by conditional statement `G' when
   14795      its predicate evaluates to false.
   14796 
   14797  -- GIMPLE function: tree gimple_cond_false_label (gimple g)
   14798      Return the label used by conditional statement `G' when its
   14799      predicate evaluates to false.
   14800 
   14801  -- GIMPLE function: void gimple_cond_make_false (gimple g)
   14802      Set the conditional `COND_STMT' to be of the form 'if (1 == 0)'.
   14803 
   14804  -- GIMPLE function: void gimple_cond_make_true (gimple g)
   14805      Set the conditional `COND_STMT' to be of the form 'if (1 == 1)'.
   14806 
   14807 
   14808 File: gccint.info,  Node: `GIMPLE_DEBUG',  Next: `GIMPLE_EH_FILTER',  Prev: `GIMPLE_COND',  Up: Tuple specific accessors
   14809 
   14810 12.7.7 `GIMPLE_DEBUG'
   14811 ---------------------
   14812 
   14813  -- GIMPLE function: gimple gimple_build_debug_bind (tree var, tree
   14814           value, gimple stmt)
   14815      Build a `GIMPLE_DEBUG' statement with `GIMPLE_DEBUG_BIND' of
   14816      `subcode'.  The effect of this statement is to tell debug
   14817      information generation machinery that the value of user variable
   14818      `var' is given by `value' at that point, and to remain with that
   14819      value until `var' runs out of scope, a dynamically-subsequent
   14820      debug bind statement overrides the binding, or conflicting values
   14821      reach a control flow merge point.  Even if components of the
   14822      `value' expression change afterwards, the variable is supposed to
   14823      retain the same value, though not necessarily the same location.
   14824 
   14825      It is expected that `var' be most often a tree for automatic user
   14826      variables (`VAR_DECL' or `PARM_DECL') that satisfy the
   14827      requirements for gimple registers, but it may also be a tree for a
   14828      scalarized component of a user variable (`ARRAY_REF',
   14829      `COMPONENT_REF'), or a debug temporary (`DEBUG_EXPR_DECL').
   14830 
   14831      As for `value', it can be an arbitrary tree expression, but it is
   14832      recommended that it be in a suitable form for a gimple assignment
   14833      `RHS'.  It is not expected that user variables that could appear
   14834      as `var' ever appear in `value', because in the latter we'd have
   14835      their `SSA_NAME's instead, but even if they were not in SSA form,
   14836      user variables appearing in `value' are to be regarded as part of
   14837      the executable code space, whereas those in `var' are to be
   14838      regarded as part of the source code space.  There is no way to
   14839      refer to the value bound to a user variable within a `value'
   14840      expression.
   14841 
   14842      If `value' is `GIMPLE_DEBUG_BIND_NOVALUE', debug information
   14843      generation machinery is informed that the variable `var' is
   14844      unbound, i.e., that its value is indeterminate, which sometimes
   14845      means it is really unavailable, and other times that the compiler
   14846      could not keep track of it.
   14847 
   14848      Block and location information for the newly-created stmt are
   14849      taken from `stmt', if given.
   14850 
   14851  -- GIMPLE function: tree gimple_debug_bind_get_var (gimple stmt)
   14852      Return the user variable VAR that is bound at `stmt'.
   14853 
   14854  -- GIMPLE function: tree gimple_debug_bind_get_value (gimple stmt)
   14855      Return the value expression that is bound to a user variable at
   14856      `stmt'.
   14857 
   14858  -- GIMPLE function: tree * gimple_debug_bind_get_value_ptr (gimple
   14859           stmt)
   14860      Return a pointer to the value expression that is bound to a user
   14861      variable at `stmt'.
   14862 
   14863  -- GIMPLE function: void gimple_debug_bind_set_var (gimple stmt, tree
   14864           var)
   14865      Modify the user variable bound at `stmt' to VAR.
   14866 
   14867  -- GIMPLE function: void gimple_debug_bind_set_value (gimple stmt,
   14868           tree var)
   14869      Modify the value bound to the user variable bound at `stmt' to
   14870      VALUE.
   14871 
   14872  -- GIMPLE function: void gimple_debug_bind_reset_value (gimple stmt)
   14873      Modify the value bound to the user variable bound at `stmt' so
   14874      that the variable becomes unbound.
   14875 
   14876  -- GIMPLE function: bool gimple_debug_bind_has_value_p (gimple stmt)
   14877      Return `TRUE' if `stmt' binds a user variable to a value, and
   14878      `FALSE' if it unbinds the variable.
   14879 
   14880 
   14881 File: gccint.info,  Node: `GIMPLE_EH_FILTER',  Next: `GIMPLE_LABEL',  Prev: `GIMPLE_DEBUG',  Up: Tuple specific accessors
   14882 
   14883 12.7.8 `GIMPLE_EH_FILTER'
   14884 -------------------------
   14885 
   14886  -- GIMPLE function: gimple gimple_build_eh_filter (tree types,
   14887           gimple_seq failure)
   14888      Build a `GIMPLE_EH_FILTER' statement.  `TYPES' are the filter's
   14889      types.  `FAILURE' is a sequence with the filter's failure action.
   14890 
   14891  -- GIMPLE function: tree gimple_eh_filter_types (gimple g)
   14892      Return the types handled by `GIMPLE_EH_FILTER' statement `G'.
   14893 
   14894  -- GIMPLE function: tree * gimple_eh_filter_types_ptr (gimple g)
   14895      Return a pointer to the types handled by `GIMPLE_EH_FILTER'
   14896      statement `G'.
   14897 
   14898  -- GIMPLE function: gimple_seq gimple_eh_filter_failure (gimple g)
   14899      Return the sequence of statement to execute when `GIMPLE_EH_FILTER'
   14900      statement fails.
   14901 
   14902  -- GIMPLE function: void gimple_eh_filter_set_types (gimple g, tree
   14903           types)
   14904      Set `TYPES' to be the set of types handled by `GIMPLE_EH_FILTER'
   14905      `G'.
   14906 
   14907  -- GIMPLE function: void gimple_eh_filter_set_failure (gimple g,
   14908           gimple_seq failure)
   14909      Set `FAILURE' to be the sequence of statements to execute on
   14910      failure for `GIMPLE_EH_FILTER' `G'.
   14911 
   14912  -- GIMPLE function: bool gimple_eh_filter_must_not_throw (gimple g)
   14913      Return the `EH_FILTER_MUST_NOT_THROW' flag.
   14914 
   14915  -- GIMPLE function: void gimple_eh_filter_set_must_not_throw (gimple
   14916           g, bool mntp)
   14917      Set the `EH_FILTER_MUST_NOT_THROW' flag.
   14918 
   14919 
   14920 File: gccint.info,  Node: `GIMPLE_LABEL',  Next: `GIMPLE_NOP',  Prev: `GIMPLE_EH_FILTER',  Up: Tuple specific accessors
   14921 
   14922 12.7.9 `GIMPLE_LABEL'
   14923 ---------------------
   14924 
   14925  -- GIMPLE function: gimple gimple_build_label (tree label)
   14926      Build a `GIMPLE_LABEL' statement with corresponding to the tree
   14927      label, `LABEL'.
   14928 
   14929  -- GIMPLE function: tree gimple_label_label (gimple g)
   14930      Return the `LABEL_DECL' node used by `GIMPLE_LABEL' statement `G'.
   14931 
   14932  -- GIMPLE function: void gimple_label_set_label (gimple g, tree label)
   14933      Set `LABEL' to be the `LABEL_DECL' node used by `GIMPLE_LABEL'
   14934      statement `G'.
   14935 
   14936  -- GIMPLE function: gimple gimple_build_goto (tree dest)
   14937      Build a `GIMPLE_GOTO' statement to label `DEST'.
   14938 
   14939  -- GIMPLE function: tree gimple_goto_dest (gimple g)
   14940      Return the destination of the unconditional jump `G'.
   14941 
   14942  -- GIMPLE function: void gimple_goto_set_dest (gimple g, tree dest)
   14943      Set `DEST' to be the destination of the unconditional jump `G'.
   14944 
   14945 
   14946 File: gccint.info,  Node: `GIMPLE_NOP',  Next: `GIMPLE_OMP_ATOMIC_LOAD',  Prev: `GIMPLE_LABEL',  Up: Tuple specific accessors
   14947 
   14948 12.7.10 `GIMPLE_NOP'
   14949 --------------------
   14950 
   14951  -- GIMPLE function: gimple gimple_build_nop (void)
   14952      Build a `GIMPLE_NOP' statement.
   14953 
   14954  -- GIMPLE function: bool gimple_nop_p (gimple g)
   14955      Returns `TRUE' if statement `G' is a `GIMPLE_NOP'.
   14956 
   14957 
   14958 File: gccint.info,  Node: `GIMPLE_OMP_ATOMIC_LOAD',  Next: `GIMPLE_OMP_ATOMIC_STORE',  Prev: `GIMPLE_NOP',  Up: Tuple specific accessors
   14959 
   14960 12.7.11 `GIMPLE_OMP_ATOMIC_LOAD'
   14961 --------------------------------
   14962 
   14963  -- GIMPLE function: gimple gimple_build_omp_atomic_load (tree lhs,
   14964           tree rhs)
   14965      Build a `GIMPLE_OMP_ATOMIC_LOAD' statement.  `LHS' is the left-hand
   14966      side of the assignment.  `RHS' is the right-hand side of the
   14967      assignment.
   14968 
   14969  -- GIMPLE function: void gimple_omp_atomic_load_set_lhs (gimple g,
   14970           tree lhs)
   14971      Set the `LHS' of an atomic load.
   14972 
   14973  -- GIMPLE function: tree gimple_omp_atomic_load_lhs (gimple g)
   14974      Get the `LHS' of an atomic load.
   14975 
   14976  -- GIMPLE function: void gimple_omp_atomic_load_set_rhs (gimple g,
   14977           tree rhs)
   14978      Set the `RHS' of an atomic set.
   14979 
   14980  -- GIMPLE function: tree gimple_omp_atomic_load_rhs (gimple g)
   14981      Get the `RHS' of an atomic set.
   14982 
   14983 
   14984 File: gccint.info,  Node: `GIMPLE_OMP_ATOMIC_STORE',  Next: `GIMPLE_OMP_CONTINUE',  Prev: `GIMPLE_OMP_ATOMIC_LOAD',  Up: Tuple specific accessors
   14985 
   14986 12.7.12 `GIMPLE_OMP_ATOMIC_STORE'
   14987 ---------------------------------
   14988 
   14989  -- GIMPLE function: gimple gimple_build_omp_atomic_store (tree val)
   14990      Build a `GIMPLE_OMP_ATOMIC_STORE' statement. `VAL' is the value to
   14991      be stored.
   14992 
   14993  -- GIMPLE function: void gimple_omp_atomic_store_set_val (gimple g,
   14994           tree val)
   14995      Set the value being stored in an atomic store.
   14996 
   14997  -- GIMPLE function: tree gimple_omp_atomic_store_val (gimple g)
   14998      Return the value being stored in an atomic store.
   14999 
   15000 
   15001 File: gccint.info,  Node: `GIMPLE_OMP_CONTINUE',  Next: `GIMPLE_OMP_CRITICAL',  Prev: `GIMPLE_OMP_ATOMIC_STORE',  Up: Tuple specific accessors
   15002 
   15003 12.7.13 `GIMPLE_OMP_CONTINUE'
   15004 -----------------------------
   15005 
   15006  -- GIMPLE function: gimple gimple_build_omp_continue (tree
   15007           control_def, tree control_use)
   15008      Build a `GIMPLE_OMP_CONTINUE' statement.  `CONTROL_DEF' is the
   15009      definition of the control variable.  `CONTROL_USE' is the use of
   15010      the control variable.
   15011 
   15012  -- GIMPLE function: tree gimple_omp_continue_control_def (gimple s)
   15013      Return the definition of the control variable on a
   15014      `GIMPLE_OMP_CONTINUE' in `S'.
   15015 
   15016  -- GIMPLE function: tree gimple_omp_continue_control_def_ptr (gimple s)
   15017      Same as above, but return the pointer.
   15018 
   15019  -- GIMPLE function: tree gimple_omp_continue_set_control_def (gimple s)
   15020      Set the control variable definition for a `GIMPLE_OMP_CONTINUE'
   15021      statement in `S'.
   15022 
   15023  -- GIMPLE function: tree gimple_omp_continue_control_use (gimple s)
   15024      Return the use of the control variable on a `GIMPLE_OMP_CONTINUE'
   15025      in `S'.
   15026 
   15027  -- GIMPLE function: tree gimple_omp_continue_control_use_ptr (gimple s)
   15028      Same as above, but return the pointer.
   15029 
   15030  -- GIMPLE function: tree gimple_omp_continue_set_control_use (gimple s)
   15031      Set the control variable use for a `GIMPLE_OMP_CONTINUE' statement
   15032      in `S'.
   15033 
   15034 
   15035 File: gccint.info,  Node: `GIMPLE_OMP_CRITICAL',  Next: `GIMPLE_OMP_FOR',  Prev: `GIMPLE_OMP_CONTINUE',  Up: Tuple specific accessors
   15036 
   15037 12.7.14 `GIMPLE_OMP_CRITICAL'
   15038 -----------------------------
   15039 
   15040  -- GIMPLE function: gimple gimple_build_omp_critical (gimple_seq body,
   15041           tree name)
   15042      Build a `GIMPLE_OMP_CRITICAL' statement. `BODY' is the sequence of
   15043      statements for which only one thread can execute.  `NAME' is an
   15044      optional identifier for this critical block.
   15045 
   15046  -- GIMPLE function: tree gimple_omp_critical_name (gimple g)
   15047      Return the name associated with `OMP_CRITICAL' statement `G'.
   15048 
   15049  -- GIMPLE function: tree * gimple_omp_critical_name_ptr (gimple g)
   15050      Return a pointer to the name associated with `OMP' critical
   15051      statement `G'.
   15052 
   15053  -- GIMPLE function: void gimple_omp_critical_set_name (gimple g, tree
   15054           name)
   15055      Set `NAME' to be the name associated with `OMP' critical statement
   15056      `G'.
   15057 
   15058 
   15059 File: gccint.info,  Node: `GIMPLE_OMP_FOR',  Next: `GIMPLE_OMP_MASTER',  Prev: `GIMPLE_OMP_CRITICAL',  Up: Tuple specific accessors
   15060 
   15061 12.7.15 `GIMPLE_OMP_FOR'
   15062 ------------------------
   15063 
   15064  -- GIMPLE function: gimple gimple_build_omp_for (gimple_seq body, tree
   15065           clauses, tree index, tree initial, tree final, tree incr,
   15066           gimple_seq pre_body, enum tree_code omp_for_cond)
   15067      Build a `GIMPLE_OMP_FOR' statement. `BODY' is sequence of
   15068      statements inside the for loop.  `CLAUSES', are any of the `OMP'
   15069      loop construct's clauses: private, firstprivate,  lastprivate,
   15070      reductions, ordered, schedule, and nowait.  `PRE_BODY' is the
   15071      sequence of statements that are loop invariant.  `INDEX' is the
   15072      index variable.  `INITIAL' is the initial value of `INDEX'.
   15073      `FINAL' is final value of `INDEX'.  OMP_FOR_COND is the predicate
   15074      used to compare `INDEX' and `FINAL'.  `INCR' is the increment
   15075      expression.
   15076 
   15077  -- GIMPLE function: tree gimple_omp_for_clauses (gimple g)
   15078      Return the clauses associated with `OMP_FOR' `G'.
   15079 
   15080  -- GIMPLE function: tree * gimple_omp_for_clauses_ptr (gimple g)
   15081      Return a pointer to the `OMP_FOR' `G'.
   15082 
   15083  -- GIMPLE function: void gimple_omp_for_set_clauses (gimple g, tree
   15084           clauses)
   15085      Set `CLAUSES' to be the list of clauses associated with `OMP_FOR'
   15086      `G'.
   15087 
   15088  -- GIMPLE function: tree gimple_omp_for_index (gimple g)
   15089      Return the index variable for `OMP_FOR' `G'.
   15090 
   15091  -- GIMPLE function: tree * gimple_omp_for_index_ptr (gimple g)
   15092      Return a pointer to the index variable for `OMP_FOR' `G'.
   15093 
   15094  -- GIMPLE function: void gimple_omp_for_set_index (gimple g, tree
   15095           index)
   15096      Set `INDEX' to be the index variable for `OMP_FOR' `G'.
   15097 
   15098  -- GIMPLE function: tree gimple_omp_for_initial (gimple g)
   15099      Return the initial value for `OMP_FOR' `G'.
   15100 
   15101  -- GIMPLE function: tree * gimple_omp_for_initial_ptr (gimple g)
   15102      Return a pointer to the initial value for `OMP_FOR' `G'.
   15103 
   15104  -- GIMPLE function: void gimple_omp_for_set_initial (gimple g, tree
   15105           initial)
   15106      Set `INITIAL' to be the initial value for `OMP_FOR' `G'.
   15107 
   15108  -- GIMPLE function: tree gimple_omp_for_final (gimple g)
   15109      Return the final value for `OMP_FOR' `G'.
   15110 
   15111  -- GIMPLE function: tree * gimple_omp_for_final_ptr (gimple g)
   15112      turn a pointer to the final value for `OMP_FOR' `G'.
   15113 
   15114  -- GIMPLE function: void gimple_omp_for_set_final (gimple g, tree
   15115           final)
   15116      Set `FINAL' to be the final value for `OMP_FOR' `G'.
   15117 
   15118  -- GIMPLE function: tree gimple_omp_for_incr (gimple g)
   15119      Return the increment value for `OMP_FOR' `G'.
   15120 
   15121  -- GIMPLE function: tree * gimple_omp_for_incr_ptr (gimple g)
   15122      Return a pointer to the increment value for `OMP_FOR' `G'.
   15123 
   15124  -- GIMPLE function: void gimple_omp_for_set_incr (gimple g, tree incr)
   15125      Set `INCR' to be the increment value for `OMP_FOR' `G'.
   15126 
   15127  -- GIMPLE function: gimple_seq gimple_omp_for_pre_body (gimple g)
   15128      Return the sequence of statements to execute before the `OMP_FOR'
   15129      statement `G' starts.
   15130 
   15131  -- GIMPLE function: void gimple_omp_for_set_pre_body (gimple g,
   15132           gimple_seq pre_body)
   15133      Set `PRE_BODY' to be the sequence of statements to execute before
   15134      the `OMP_FOR' statement `G' starts.
   15135 
   15136  -- GIMPLE function: void gimple_omp_for_set_cond (gimple g, enum
   15137           tree_code cond)
   15138      Set `COND' to be the condition code for `OMP_FOR' `G'.
   15139 
   15140  -- GIMPLE function: enum tree_code gimple_omp_for_cond (gimple g)
   15141      Return the condition code associated with `OMP_FOR' `G'.
   15142 
   15143 
   15144 File: gccint.info,  Node: `GIMPLE_OMP_MASTER',  Next: `GIMPLE_OMP_ORDERED',  Prev: `GIMPLE_OMP_FOR',  Up: Tuple specific accessors
   15145 
   15146 12.7.16 `GIMPLE_OMP_MASTER'
   15147 ---------------------------
   15148 
   15149  -- GIMPLE function: gimple gimple_build_omp_master (gimple_seq body)
   15150      Build a `GIMPLE_OMP_MASTER' statement. `BODY' is the sequence of
   15151      statements to be executed by just the master.
   15152 
   15153 
   15154 File: gccint.info,  Node: `GIMPLE_OMP_ORDERED',  Next: `GIMPLE_OMP_PARALLEL',  Prev: `GIMPLE_OMP_MASTER',  Up: Tuple specific accessors
   15155 
   15156 12.7.17 `GIMPLE_OMP_ORDERED'
   15157 ----------------------------
   15158 
   15159  -- GIMPLE function: gimple gimple_build_omp_ordered (gimple_seq body)
   15160      Build a `GIMPLE_OMP_ORDERED' statement.
   15161 
   15162  `BODY' is the sequence of statements inside a loop that will executed
   15163 in sequence.
   15164 
   15165 
   15166 File: gccint.info,  Node: `GIMPLE_OMP_PARALLEL',  Next: `GIMPLE_OMP_RETURN',  Prev: `GIMPLE_OMP_ORDERED',  Up: Tuple specific accessors
   15167 
   15168 12.7.18 `GIMPLE_OMP_PARALLEL'
   15169 -----------------------------
   15170 
   15171  -- GIMPLE function: gimple gimple_build_omp_parallel (gimple_seq body,
   15172           tree clauses, tree child_fn, tree data_arg)
   15173      Build a `GIMPLE_OMP_PARALLEL' statement.
   15174 
   15175  `BODY' is sequence of statements which are executed in parallel.
   15176 `CLAUSES', are the `OMP' parallel construct's clauses.  `CHILD_FN' is
   15177 the function created for the parallel threads to execute.  `DATA_ARG'
   15178 are the shared data argument(s).
   15179 
   15180  -- GIMPLE function: bool gimple_omp_parallel_combined_p (gimple g)
   15181      Return true if `OMP' parallel statement `G' has the
   15182      `GF_OMP_PARALLEL_COMBINED' flag set.
   15183 
   15184  -- GIMPLE function: void gimple_omp_parallel_set_combined_p (gimple g)
   15185      Set the `GF_OMP_PARALLEL_COMBINED' field in `OMP' parallel
   15186      statement `G'.
   15187 
   15188  -- GIMPLE function: gimple_seq gimple_omp_body (gimple g)
   15189      Return the body for the `OMP' statement `G'.
   15190 
   15191  -- GIMPLE function: void gimple_omp_set_body (gimple g, gimple_seq
   15192           body)
   15193      Set `BODY' to be the body for the `OMP' statement `G'.
   15194 
   15195  -- GIMPLE function: tree gimple_omp_parallel_clauses (gimple g)
   15196      Return the clauses associated with `OMP_PARALLEL' `G'.
   15197 
   15198  -- GIMPLE function: tree * gimple_omp_parallel_clauses_ptr (gimple g)
   15199      Return a pointer to the clauses associated with `OMP_PARALLEL' `G'.
   15200 
   15201  -- GIMPLE function: void gimple_omp_parallel_set_clauses (gimple g,
   15202           tree clauses)
   15203      Set `CLAUSES' to be the list of clauses associated with
   15204      `OMP_PARALLEL' `G'.
   15205 
   15206  -- GIMPLE function: tree gimple_omp_parallel_child_fn (gimple g)
   15207      Return the child function used to hold the body of `OMP_PARALLEL'
   15208      `G'.
   15209 
   15210  -- GIMPLE function: tree * gimple_omp_parallel_child_fn_ptr (gimple g)
   15211      Return a pointer to the child function used to hold the body of
   15212      `OMP_PARALLEL' `G'.
   15213 
   15214  -- GIMPLE function: void gimple_omp_parallel_set_child_fn (gimple g,
   15215           tree child_fn)
   15216      Set `CHILD_FN' to be the child function for `OMP_PARALLEL' `G'.
   15217 
   15218  -- GIMPLE function: tree gimple_omp_parallel_data_arg (gimple g)
   15219      Return the artificial argument used to send variables and values
   15220      from the parent to the children threads in `OMP_PARALLEL' `G'.
   15221 
   15222  -- GIMPLE function: tree * gimple_omp_parallel_data_arg_ptr (gimple g)
   15223      Return a pointer to the data argument for `OMP_PARALLEL' `G'.
   15224 
   15225  -- GIMPLE function: void gimple_omp_parallel_set_data_arg (gimple g,
   15226           tree data_arg)
   15227      Set `DATA_ARG' to be the data argument for `OMP_PARALLEL' `G'.
   15228 
   15229  -- GIMPLE function: bool is_gimple_omp (gimple stmt)
   15230      Returns true when the gimple statement `STMT' is any of the OpenMP
   15231      types.
   15232 
   15233 
   15234 File: gccint.info,  Node: `GIMPLE_OMP_RETURN',  Next: `GIMPLE_OMP_SECTION',  Prev: `GIMPLE_OMP_PARALLEL',  Up: Tuple specific accessors
   15235 
   15236 12.7.19 `GIMPLE_OMP_RETURN'
   15237 ---------------------------
   15238 
   15239  -- GIMPLE function: gimple gimple_build_omp_return (bool wait_p)
   15240      Build a `GIMPLE_OMP_RETURN' statement. `WAIT_P' is true if this is
   15241      a non-waiting return.
   15242 
   15243  -- GIMPLE function: void gimple_omp_return_set_nowait (gimple s)
   15244      Set the nowait flag on `GIMPLE_OMP_RETURN' statement `S'.
   15245 
   15246  -- GIMPLE function: bool gimple_omp_return_nowait_p (gimple g)
   15247      Return true if `OMP' return statement `G' has the
   15248      `GF_OMP_RETURN_NOWAIT' flag set.
   15249 
   15250 
   15251 File: gccint.info,  Node: `GIMPLE_OMP_SECTION',  Next: `GIMPLE_OMP_SECTIONS',  Prev: `GIMPLE_OMP_RETURN',  Up: Tuple specific accessors
   15252 
   15253 12.7.20 `GIMPLE_OMP_SECTION'
   15254 ----------------------------
   15255 
   15256  -- GIMPLE function: gimple gimple_build_omp_section (gimple_seq body)
   15257      Build a `GIMPLE_OMP_SECTION' statement for a sections statement.
   15258 
   15259  `BODY' is the sequence of statements in the section.
   15260 
   15261  -- GIMPLE function: bool gimple_omp_section_last_p (gimple g)
   15262      Return true if `OMP' section statement `G' has the
   15263      `GF_OMP_SECTION_LAST' flag set.
   15264 
   15265  -- GIMPLE function: void gimple_omp_section_set_last (gimple g)
   15266      Set the `GF_OMP_SECTION_LAST' flag on `G'.
   15267 
   15268 
   15269 File: gccint.info,  Node: `GIMPLE_OMP_SECTIONS',  Next: `GIMPLE_OMP_SINGLE',  Prev: `GIMPLE_OMP_SECTION',  Up: Tuple specific accessors
   15270 
   15271 12.7.21 `GIMPLE_OMP_SECTIONS'
   15272 -----------------------------
   15273 
   15274  -- GIMPLE function: gimple gimple_build_omp_sections (gimple_seq body,
   15275           tree clauses)
   15276      Build a `GIMPLE_OMP_SECTIONS' statement. `BODY' is a sequence of
   15277      section statements.  `CLAUSES' are any of the `OMP' sections
   15278      construct's clauses: private, firstprivate, lastprivate,
   15279      reduction, and nowait.
   15280 
   15281  -- GIMPLE function: gimple gimple_build_omp_sections_switch (void)
   15282      Build a `GIMPLE_OMP_SECTIONS_SWITCH' statement.
   15283 
   15284  -- GIMPLE function: tree gimple_omp_sections_control (gimple g)
   15285      Return the control variable associated with the
   15286      `GIMPLE_OMP_SECTIONS' in `G'.
   15287 
   15288  -- GIMPLE function: tree * gimple_omp_sections_control_ptr (gimple g)
   15289      Return a pointer to the clauses associated with the
   15290      `GIMPLE_OMP_SECTIONS' in `G'.
   15291 
   15292  -- GIMPLE function: void gimple_omp_sections_set_control (gimple g,
   15293           tree control)
   15294      Set `CONTROL' to be the set of clauses associated with the
   15295      `GIMPLE_OMP_SECTIONS' in `G'.
   15296 
   15297  -- GIMPLE function: tree gimple_omp_sections_clauses (gimple g)
   15298      Return the clauses associated with `OMP_SECTIONS' `G'.
   15299 
   15300  -- GIMPLE function: tree * gimple_omp_sections_clauses_ptr (gimple g)
   15301      Return a pointer to the clauses associated with `OMP_SECTIONS' `G'.
   15302 
   15303  -- GIMPLE function: void gimple_omp_sections_set_clauses (gimple g,
   15304           tree clauses)
   15305      Set `CLAUSES' to be the set of clauses associated with
   15306      `OMP_SECTIONS' `G'.
   15307 
   15308 
   15309 File: gccint.info,  Node: `GIMPLE_OMP_SINGLE',  Next: `GIMPLE_PHI',  Prev: `GIMPLE_OMP_SECTIONS',  Up: Tuple specific accessors
   15310 
   15311 12.7.22 `GIMPLE_OMP_SINGLE'
   15312 ---------------------------
   15313 
   15314  -- GIMPLE function: gimple gimple_build_omp_single (gimple_seq body,
   15315           tree clauses)
   15316      Build a `GIMPLE_OMP_SINGLE' statement. `BODY' is the sequence of
   15317      statements that will be executed once.  `CLAUSES' are any of the
   15318      `OMP' single construct's clauses: private, firstprivate,
   15319      copyprivate, nowait.
   15320 
   15321  -- GIMPLE function: tree gimple_omp_single_clauses (gimple g)
   15322      Return the clauses associated with `OMP_SINGLE' `G'.
   15323 
   15324  -- GIMPLE function: tree * gimple_omp_single_clauses_ptr (gimple g)
   15325      Return a pointer to the clauses associated with `OMP_SINGLE' `G'.
   15326 
   15327  -- GIMPLE function: void gimple_omp_single_set_clauses (gimple g, tree
   15328           clauses)
   15329      Set `CLAUSES' to be the clauses associated with `OMP_SINGLE' `G'.
   15330 
   15331 
   15332 File: gccint.info,  Node: `GIMPLE_PHI',  Next: `GIMPLE_RESX',  Prev: `GIMPLE_OMP_SINGLE',  Up: Tuple specific accessors
   15333 
   15334 12.7.23 `GIMPLE_PHI'
   15335 --------------------
   15336 
   15337  -- GIMPLE function: gimple make_phi_node (tree var, int len)
   15338      Build a `PHI' node with len argument slots for variable var.
   15339 
   15340  -- GIMPLE function: unsigned gimple_phi_capacity (gimple g)
   15341      Return the maximum number of arguments supported by `GIMPLE_PHI'
   15342      `G'.
   15343 
   15344  -- GIMPLE function: unsigned gimple_phi_num_args (gimple g)
   15345      Return the number of arguments in `GIMPLE_PHI' `G'. This must
   15346      always be exactly the number of incoming edges for the basic block
   15347      holding `G'.
   15348 
   15349  -- GIMPLE function: tree gimple_phi_result (gimple g)
   15350      Return the `SSA' name created by `GIMPLE_PHI' `G'.
   15351 
   15352  -- GIMPLE function: tree * gimple_phi_result_ptr (gimple g)
   15353      Return a pointer to the `SSA' name created by `GIMPLE_PHI' `G'.
   15354 
   15355  -- GIMPLE function: void gimple_phi_set_result (gimple g, tree result)
   15356      Set `RESULT' to be the `SSA' name created by `GIMPLE_PHI' `G'.
   15357 
   15358  -- GIMPLE function: struct phi_arg_d * gimple_phi_arg (gimple g, index)
   15359      Return the `PHI' argument corresponding to incoming edge `INDEX'
   15360      for `GIMPLE_PHI' `G'.
   15361 
   15362  -- GIMPLE function: void gimple_phi_set_arg (gimple g, index, struct
   15363           phi_arg_d * phiarg)
   15364      Set `PHIARG' to be the argument corresponding to incoming edge
   15365      `INDEX' for `GIMPLE_PHI' `G'.
   15366 
   15367 
   15368 File: gccint.info,  Node: `GIMPLE_RESX',  Next: `GIMPLE_RETURN',  Prev: `GIMPLE_PHI',  Up: Tuple specific accessors
   15369 
   15370 12.7.24 `GIMPLE_RESX'
   15371 ---------------------
   15372 
   15373  -- GIMPLE function: gimple gimple_build_resx (int region)
   15374      Build a `GIMPLE_RESX' statement which is a statement.  This
   15375      statement is a placeholder for _Unwind_Resume before we know if a
   15376      function call or a branch is needed.  `REGION' is the exception
   15377      region from which control is flowing.
   15378 
   15379  -- GIMPLE function: int gimple_resx_region (gimple g)
   15380      Return the region number for `GIMPLE_RESX' `G'.
   15381 
   15382  -- GIMPLE function: void gimple_resx_set_region (gimple g, int region)
   15383      Set `REGION' to be the region number for `GIMPLE_RESX' `G'.
   15384 
   15385 
   15386 File: gccint.info,  Node: `GIMPLE_RETURN',  Next: `GIMPLE_SWITCH',  Prev: `GIMPLE_RESX',  Up: Tuple specific accessors
   15387 
   15388 12.7.25 `GIMPLE_RETURN'
   15389 -----------------------
   15390 
   15391  -- GIMPLE function: gimple gimple_build_return (tree retval)
   15392      Build a `GIMPLE_RETURN' statement whose return value is retval.
   15393 
   15394  -- GIMPLE function: tree gimple_return_retval (gimple g)
   15395      Return the return value for `GIMPLE_RETURN' `G'.
   15396 
   15397  -- GIMPLE function: void gimple_return_set_retval (gimple g, tree
   15398           retval)
   15399      Set `RETVAL' to be the return value for `GIMPLE_RETURN' `G'.
   15400 
   15401 
   15402 File: gccint.info,  Node: `GIMPLE_SWITCH',  Next: `GIMPLE_TRY',  Prev: `GIMPLE_RETURN',  Up: Tuple specific accessors
   15403 
   15404 12.7.26 `GIMPLE_SWITCH'
   15405 -----------------------
   15406 
   15407  -- GIMPLE function: gimple gimple_build_switch (unsigned nlabels, tree
   15408           index, tree default_label, ...)
   15409      Build a `GIMPLE_SWITCH' statement.  `NLABELS' are the number of
   15410      labels excluding the default label.  The default label is passed
   15411      in `DEFAULT_LABEL'.  The rest of the arguments are trees
   15412      representing the labels.  Each label is a tree of code
   15413      `CASE_LABEL_EXPR'.
   15414 
   15415  -- GIMPLE function: gimple gimple_build_switch_vec (tree index, tree
   15416           default_label, `VEC'(tree,heap) *args)
   15417      This function is an alternate way of building `GIMPLE_SWITCH'
   15418      statements.  `INDEX' and `DEFAULT_LABEL' are as in
   15419      gimple_build_switch.  `ARGS' is a vector of `CASE_LABEL_EXPR' trees
   15420      that contain the labels.
   15421 
   15422  -- GIMPLE function: unsigned gimple_switch_num_labels (gimple g)
   15423      Return the number of labels associated with the switch statement
   15424      `G'.
   15425 
   15426  -- GIMPLE function: void gimple_switch_set_num_labels (gimple g,
   15427           unsigned nlabels)
   15428      Set `NLABELS' to be the number of labels for the switch statement
   15429      `G'.
   15430 
   15431  -- GIMPLE function: tree gimple_switch_index (gimple g)
   15432      Return the index variable used by the switch statement `G'.
   15433 
   15434  -- GIMPLE function: void gimple_switch_set_index (gimple g, tree index)
   15435      Set `INDEX' to be the index variable for switch statement `G'.
   15436 
   15437  -- GIMPLE function: tree gimple_switch_label (gimple g, unsigned index)
   15438      Return the label numbered `INDEX'. The default label is 0, followed
   15439      by any labels in a switch statement.
   15440 
   15441  -- GIMPLE function: void gimple_switch_set_label (gimple g, unsigned
   15442           index, tree label)
   15443      Set the label number `INDEX' to `LABEL'. 0 is always the default
   15444      label.
   15445 
   15446  -- GIMPLE function: tree gimple_switch_default_label (gimple g)
   15447      Return the default label for a switch statement.
   15448 
   15449  -- GIMPLE function: void gimple_switch_set_default_label (gimple g,
   15450           tree label)
   15451      Set the default label for a switch statement.
   15452 
   15453 
   15454 File: gccint.info,  Node: `GIMPLE_TRY',  Next: `GIMPLE_WITH_CLEANUP_EXPR',  Prev: `GIMPLE_SWITCH',  Up: Tuple specific accessors
   15455 
   15456 12.7.27 `GIMPLE_TRY'
   15457 --------------------
   15458 
   15459  -- GIMPLE function: gimple gimple_build_try (gimple_seq eval,
   15460           gimple_seq cleanup, unsigned int kind)
   15461      Build a `GIMPLE_TRY' statement.  `EVAL' is a sequence with the
   15462      expression to evaluate.  `CLEANUP' is a sequence of statements to
   15463      run at clean-up time.  `KIND' is the enumeration value
   15464      `GIMPLE_TRY_CATCH' if this statement denotes a try/catch construct
   15465      or `GIMPLE_TRY_FINALLY' if this statement denotes a try/finally
   15466      construct.
   15467 
   15468  -- GIMPLE function: enum gimple_try_flags gimple_try_kind (gimple g)
   15469      Return the kind of try block represented by `GIMPLE_TRY' `G'. This
   15470      is either `GIMPLE_TRY_CATCH' or `GIMPLE_TRY_FINALLY'.
   15471 
   15472  -- GIMPLE function: bool gimple_try_catch_is_cleanup (gimple g)
   15473      Return the `GIMPLE_TRY_CATCH_IS_CLEANUP' flag.
   15474 
   15475  -- GIMPLE function: gimple_seq gimple_try_eval (gimple g)
   15476      Return the sequence of statements used as the body for `GIMPLE_TRY'
   15477      `G'.
   15478 
   15479  -- GIMPLE function: gimple_seq gimple_try_cleanup (gimple g)
   15480      Return the sequence of statements used as the cleanup body for
   15481      `GIMPLE_TRY' `G'.
   15482 
   15483  -- GIMPLE function: void gimple_try_set_catch_is_cleanup (gimple g,
   15484           bool catch_is_cleanup)
   15485      Set the `GIMPLE_TRY_CATCH_IS_CLEANUP' flag.
   15486 
   15487  -- GIMPLE function: void gimple_try_set_eval (gimple g, gimple_seq
   15488           eval)
   15489      Set `EVAL' to be the sequence of statements to use as the body for
   15490      `GIMPLE_TRY' `G'.
   15491 
   15492  -- GIMPLE function: void gimple_try_set_cleanup (gimple g, gimple_seq
   15493           cleanup)
   15494      Set `CLEANUP' to be the sequence of statements to use as the
   15495      cleanup body for `GIMPLE_TRY' `G'.
   15496 
   15497 
   15498 File: gccint.info,  Node: `GIMPLE_WITH_CLEANUP_EXPR',  Prev: `GIMPLE_TRY',  Up: Tuple specific accessors
   15499 
   15500 12.7.28 `GIMPLE_WITH_CLEANUP_EXPR'
   15501 ----------------------------------
   15502 
   15503  -- GIMPLE function: gimple gimple_build_wce (gimple_seq cleanup)
   15504      Build a `GIMPLE_WITH_CLEANUP_EXPR' statement.  `CLEANUP' is the
   15505      clean-up expression.
   15506 
   15507  -- GIMPLE function: gimple_seq gimple_wce_cleanup (gimple g)
   15508      Return the cleanup sequence for cleanup statement `G'.
   15509 
   15510  -- GIMPLE function: void gimple_wce_set_cleanup (gimple g, gimple_seq
   15511           cleanup)
   15512      Set `CLEANUP' to be the cleanup sequence for `G'.
   15513 
   15514  -- GIMPLE function: bool gimple_wce_cleanup_eh_only (gimple g)
   15515      Return the `CLEANUP_EH_ONLY' flag for a `WCE' tuple.
   15516 
   15517  -- GIMPLE function: void gimple_wce_set_cleanup_eh_only (gimple g,
   15518           bool eh_only_p)
   15519      Set the `CLEANUP_EH_ONLY' flag for a `WCE' tuple.
   15520 
   15521 
   15522 File: gccint.info,  Node: GIMPLE sequences,  Next: Sequence iterators,  Prev: Tuple specific accessors,  Up: GIMPLE
   15523 
   15524 12.8 GIMPLE sequences
   15525 =====================
   15526 
   15527 GIMPLE sequences are the tuple equivalent of `STATEMENT_LIST''s used in
   15528 `GENERIC'.  They are used to chain statements together, and when used
   15529 in conjunction with sequence iterators, provide a framework for
   15530 iterating through statements.
   15531 
   15532  GIMPLE sequences are of type struct `gimple_sequence', but are more
   15533 commonly passed by reference to functions dealing with sequences.  The
   15534 type for a sequence pointer is `gimple_seq' which is the same as struct
   15535 `gimple_sequence' *.  When declaring a local sequence, you can define a
   15536 local variable of type struct `gimple_sequence'.  When declaring a
   15537 sequence allocated on the garbage collected heap, use the function
   15538 `gimple_seq_alloc' documented below.
   15539 
   15540  There are convenience functions for iterating through sequences in the
   15541 section entitled Sequence Iterators.
   15542 
   15543  Below is a list of functions to manipulate and query sequences.
   15544 
   15545  -- GIMPLE function: void gimple_seq_add_stmt (gimple_seq *seq, gimple
   15546           g)
   15547      Link a gimple statement to the end of the sequence *`SEQ' if `G' is
   15548      not `NULL'.  If *`SEQ' is `NULL', allocate a sequence before
   15549      linking.
   15550 
   15551  -- GIMPLE function: void gimple_seq_add_seq (gimple_seq *dest,
   15552           gimple_seq src)
   15553      Append sequence `SRC' to the end of sequence *`DEST' if `SRC' is
   15554      not `NULL'.  If *`DEST' is `NULL', allocate a new sequence before
   15555      appending.
   15556 
   15557  -- GIMPLE function: gimple_seq gimple_seq_deep_copy (gimple_seq src)
   15558      Perform a deep copy of sequence `SRC' and return the result.
   15559 
   15560  -- GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq)
   15561      Reverse the order of the statements in the sequence `SEQ'.  Return
   15562      `SEQ'.
   15563 
   15564  -- GIMPLE function: gimple gimple_seq_first (gimple_seq s)
   15565      Return the first statement in sequence `S'.
   15566 
   15567  -- GIMPLE function: gimple gimple_seq_last (gimple_seq s)
   15568      Return the last statement in sequence `S'.
   15569 
   15570  -- GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple
   15571           last)
   15572      Set the last statement in sequence `S' to the statement in `LAST'.
   15573 
   15574  -- GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple
   15575           first)
   15576      Set the first statement in sequence `S' to the statement in
   15577      `FIRST'.
   15578 
   15579  -- GIMPLE function: void gimple_seq_init (gimple_seq s)
   15580      Initialize sequence `S' to an empty sequence.
   15581 
   15582  -- GIMPLE function: gimple_seq gimple_seq_alloc (void)
   15583      Allocate a new sequence in the garbage collected store and return
   15584      it.
   15585 
   15586  -- GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq
   15587           src)
   15588      Copy the sequence `SRC' into the sequence `DEST'.
   15589 
   15590  -- GIMPLE function: bool gimple_seq_empty_p (gimple_seq s)
   15591      Return true if the sequence `S' is empty.
   15592 
   15593  -- GIMPLE function: gimple_seq bb_seq (basic_block bb)
   15594      Returns the sequence of statements in `BB'.
   15595 
   15596  -- GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq)
   15597      Sets the sequence of statements in `BB' to `SEQ'.
   15598 
   15599  -- GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq)
   15600      Determine whether `SEQ' contains exactly one statement.
   15601 
   15602 
   15603 File: gccint.info,  Node: Sequence iterators,  Next: Adding a new GIMPLE statement code,  Prev: GIMPLE sequences,  Up: GIMPLE
   15604 
   15605 12.9 Sequence iterators
   15606 =======================
   15607 
   15608 Sequence iterators are convenience constructs for iterating through
   15609 statements in a sequence.  Given a sequence `SEQ', here is a typical
   15610 use of gimple sequence iterators:
   15611 
   15612      gimple_stmt_iterator gsi;
   15613 
   15614      for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi))
   15615        {
   15616          gimple g = gsi_stmt (gsi);
   15617          /* Do something with gimple statement `G'.  */
   15618        }
   15619 
   15620  Backward iterations are possible:
   15621 
   15622              for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&gsi))
   15623 
   15624  Forward and backward iterations on basic blocks are possible with
   15625 `gsi_start_bb' and `gsi_last_bb'.
   15626 
   15627  In the documentation below we sometimes refer to enum
   15628 `gsi_iterator_update'.  The valid options for this enumeration are:
   15629 
   15630    * `GSI_NEW_STMT' Only valid when a single statement is added.  Move
   15631      the iterator to it.
   15632 
   15633    * `GSI_SAME_STMT' Leave the iterator at the same statement.
   15634 
   15635    * `GSI_CONTINUE_LINKING' Move iterator to whatever position is
   15636      suitable for linking other statements in the same direction.
   15637 
   15638  Below is a list of the functions used to manipulate and use statement
   15639 iterators.
   15640 
   15641  -- GIMPLE function: gimple_stmt_iterator gsi_start (gimple_seq seq)
   15642      Return a new iterator pointing to the sequence `SEQ''s first
   15643      statement.  If `SEQ' is empty, the iterator's basic block is
   15644      `NULL'.  Use `gsi_start_bb' instead when the iterator needs to
   15645      always have the correct basic block set.
   15646 
   15647  -- GIMPLE function: gimple_stmt_iterator gsi_start_bb (basic_block bb)
   15648      Return a new iterator pointing to the first statement in basic
   15649      block `BB'.
   15650 
   15651  -- GIMPLE function: gimple_stmt_iterator gsi_last (gimple_seq seq)
   15652      Return a new iterator initially pointing to the last statement of
   15653      sequence `SEQ'.  If `SEQ' is empty, the iterator's basic block is
   15654      `NULL'.  Use `gsi_last_bb' instead when the iterator needs to
   15655      always have the correct basic block set.
   15656 
   15657  -- GIMPLE function: gimple_stmt_iterator gsi_last_bb (basic_block bb)
   15658      Return a new iterator pointing to the last statement in basic
   15659      block `BB'.
   15660 
   15661  -- GIMPLE function: bool gsi_end_p (gimple_stmt_iterator i)
   15662      Return `TRUE' if at the end of `I'.
   15663 
   15664  -- GIMPLE function: bool gsi_one_before_end_p (gimple_stmt_iterator i)
   15665      Return `TRUE' if we're one statement before the end of `I'.
   15666 
   15667  -- GIMPLE function: void gsi_next (gimple_stmt_iterator *i)
   15668      Advance the iterator to the next gimple statement.
   15669 
   15670  -- GIMPLE function: void gsi_prev (gimple_stmt_iterator *i)
   15671      Advance the iterator to the previous gimple statement.
   15672 
   15673  -- GIMPLE function: gimple gsi_stmt (gimple_stmt_iterator i)
   15674      Return the current stmt.
   15675 
   15676  -- GIMPLE function: gimple_stmt_iterator gsi_after_labels (basic_block
   15677           bb)
   15678      Return a block statement iterator that points to the first
   15679      non-label statement in block `BB'.
   15680 
   15681  -- GIMPLE function: gimple * gsi_stmt_ptr (gimple_stmt_iterator *i)
   15682      Return a pointer to the current stmt.
   15683 
   15684  -- GIMPLE function: basic_block gsi_bb (gimple_stmt_iterator i)
   15685      Return the basic block associated with this iterator.
   15686 
   15687  -- GIMPLE function: gimple_seq gsi_seq (gimple_stmt_iterator i)
   15688      Return the sequence associated with this iterator.
   15689 
   15690  -- GIMPLE function: void gsi_remove (gimple_stmt_iterator *i, bool
   15691           remove_eh_info)
   15692      Remove the current stmt from the sequence.  The iterator is
   15693      updated to point to the next statement.  When `REMOVE_EH_INFO' is
   15694      true we remove the statement pointed to by iterator `I' from the
   15695      `EH' tables.  Otherwise we do not modify the `EH' tables.
   15696      Generally, `REMOVE_EH_INFO' should be true when the statement is
   15697      going to be removed from the `IL' and not reinserted elsewhere.
   15698 
   15699  -- GIMPLE function: void gsi_link_seq_before (gimple_stmt_iterator *i,
   15700           gimple_seq seq, enum gsi_iterator_update mode)
   15701      Links the sequence of statements `SEQ' before the statement pointed
   15702      by iterator `I'.  `MODE' indicates what to do with the iterator
   15703      after insertion (see `enum gsi_iterator_update' above).
   15704 
   15705  -- GIMPLE function: void gsi_link_before (gimple_stmt_iterator *i,
   15706           gimple g, enum gsi_iterator_update mode)
   15707      Links statement `G' before the statement pointed-to by iterator
   15708      `I'.  Updates iterator `I' according to `MODE'.
   15709 
   15710  -- GIMPLE function: void gsi_link_seq_after (gimple_stmt_iterator *i,
   15711           gimple_seq seq, enum gsi_iterator_update mode)
   15712      Links sequence `SEQ' after the statement pointed-to by iterator
   15713      `I'.  `MODE' is as in `gsi_insert_after'.
   15714 
   15715  -- GIMPLE function: void gsi_link_after (gimple_stmt_iterator *i,
   15716           gimple g, enum gsi_iterator_update mode)
   15717      Links statement `G' after the statement pointed-to by iterator `I'.
   15718      `MODE' is as in `gsi_insert_after'.
   15719 
   15720  -- GIMPLE function: gimple_seq gsi_split_seq_after
   15721           (gimple_stmt_iterator i)
   15722      Move all statements in the sequence after `I' to a new sequence.
   15723      Return this new sequence.
   15724 
   15725  -- GIMPLE function: gimple_seq gsi_split_seq_before
   15726           (gimple_stmt_iterator *i)
   15727      Move all statements in the sequence before `I' to a new sequence.
   15728      Return this new sequence.
   15729 
   15730  -- GIMPLE function: void gsi_replace (gimple_stmt_iterator *i, gimple
   15731           stmt, bool update_eh_info)
   15732      Replace the statement pointed-to by `I' to `STMT'.  If
   15733      `UPDATE_EH_INFO' is true, the exception handling information of
   15734      the original statement is moved to the new statement.
   15735 
   15736  -- GIMPLE function: void gsi_insert_before (gimple_stmt_iterator *i,
   15737           gimple stmt, enum gsi_iterator_update mode)
   15738      Insert statement `STMT' before the statement pointed-to by iterator
   15739      `I', update `STMT''s basic block and scan it for new operands.
   15740      `MODE' specifies how to update iterator `I' after insertion (see
   15741      enum `gsi_iterator_update').
   15742 
   15743  -- GIMPLE function: void gsi_insert_seq_before (gimple_stmt_iterator
   15744           *i, gimple_seq seq, enum gsi_iterator_update mode)
   15745      Like `gsi_insert_before', but for all the statements in `SEQ'.
   15746 
   15747  -- GIMPLE function: void gsi_insert_after (gimple_stmt_iterator *i,
   15748           gimple stmt, enum gsi_iterator_update mode)
   15749      Insert statement `STMT' after the statement pointed-to by iterator
   15750      `I', update `STMT''s basic block and scan it for new operands.
   15751      `MODE' specifies how to update iterator `I' after insertion (see
   15752      enum `gsi_iterator_update').
   15753 
   15754  -- GIMPLE function: void gsi_insert_seq_after (gimple_stmt_iterator
   15755           *i, gimple_seq seq, enum gsi_iterator_update mode)
   15756      Like `gsi_insert_after', but for all the statements in `SEQ'.
   15757 
   15758  -- GIMPLE function: gimple_stmt_iterator gsi_for_stmt (gimple stmt)
   15759      Finds iterator for `STMT'.
   15760 
   15761  -- GIMPLE function: void gsi_move_after (gimple_stmt_iterator *from,
   15762           gimple_stmt_iterator *to)
   15763      Move the statement at `FROM' so it comes right after the statement
   15764      at `TO'.
   15765 
   15766  -- GIMPLE function: void gsi_move_before (gimple_stmt_iterator *from,
   15767           gimple_stmt_iterator *to)
   15768      Move the statement at `FROM' so it comes right before the statement
   15769      at `TO'.
   15770 
   15771  -- GIMPLE function: void gsi_move_to_bb_end (gimple_stmt_iterator
   15772           *from, basic_block bb)
   15773      Move the statement at `FROM' to the end of basic block `BB'.
   15774 
   15775  -- GIMPLE function: void gsi_insert_on_edge (edge e, gimple stmt)
   15776      Add `STMT' to the pending list of edge `E'.  No actual insertion is
   15777      made until a call to `gsi_commit_edge_inserts'() is made.
   15778 
   15779  -- GIMPLE function: void gsi_insert_seq_on_edge (edge e, gimple_seq
   15780           seq)
   15781      Add the sequence of statements in `SEQ' to the pending list of edge
   15782      `E'.  No actual insertion is made until a call to
   15783      `gsi_commit_edge_inserts'() is made.
   15784 
   15785  -- GIMPLE function: basic_block gsi_insert_on_edge_immediate (edge e,
   15786           gimple stmt)
   15787      Similar to `gsi_insert_on_edge'+`gsi_commit_edge_inserts'.  If a
   15788      new block has to be created, it is returned.
   15789 
   15790  -- GIMPLE function: void gsi_commit_one_edge_insert (edge e,
   15791           basic_block *new_bb)
   15792      Commit insertions pending at edge `E'.  If a new block is created,
   15793      set `NEW_BB' to this block, otherwise set it to `NULL'.
   15794 
   15795  -- GIMPLE function: void gsi_commit_edge_inserts (void)
   15796      This routine will commit all pending edge insertions, creating any
   15797      new basic blocks which are necessary.
   15798 
   15799 
   15800 File: gccint.info,  Node: Adding a new GIMPLE statement code,  Next: Statement and operand traversals,  Prev: Sequence iterators,  Up: GIMPLE
   15801 
   15802 12.10 Adding a new GIMPLE statement code
   15803 ========================================
   15804 
   15805 The first step in adding a new GIMPLE statement code, is modifying the
   15806 file `gimple.def', which contains all the GIMPLE codes.  Then you must
   15807 add a corresponding structure, and an entry in `union
   15808 gimple_statement_d', both of which are located in `gimple.h'.  This in
   15809 turn, will require you to add a corresponding `GTY' tag in
   15810 `gsstruct.def', and code to handle this tag in `gss_for_code' which is
   15811 located in `gimple.c'.
   15812 
   15813  In order for the garbage collector to know the size of the structure
   15814 you created in `gimple.h', you need to add a case to handle your new
   15815 GIMPLE statement in `gimple_size' which is located in `gimple.c'.
   15816 
   15817  You will probably want to create a function to build the new gimple
   15818 statement in `gimple.c'.  The function should be called
   15819 `gimple_build_NEW-TUPLE-NAME', and should return the new tuple of type
   15820 gimple.
   15821 
   15822  If your new statement requires accessors for any members or operands
   15823 it may have, put simple inline accessors in `gimple.h' and any
   15824 non-trivial accessors in `gimple.c' with a corresponding prototype in
   15825 `gimple.h'.
   15826 
   15827 
   15828 File: gccint.info,  Node: Statement and operand traversals,  Prev: Adding a new GIMPLE statement code,  Up: GIMPLE
   15829 
   15830 12.11 Statement and operand traversals
   15831 ======================================
   15832 
   15833 There are two functions available for walking statements and sequences:
   15834 `walk_gimple_stmt' and `walk_gimple_seq', accordingly, and a third
   15835 function for walking the operands in a statement: `walk_gimple_op'.
   15836 
   15837  -- GIMPLE function: tree walk_gimple_stmt (gimple_stmt_iterator *gsi,
   15838           walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct
   15839           walk_stmt_info *wi)
   15840      This function is used to walk the current statement in `GSI',
   15841      optionally using traversal state stored in `WI'.  If `WI' is
   15842      `NULL', no state is kept during the traversal.
   15843 
   15844      The callback `CALLBACK_STMT' is called.  If `CALLBACK_STMT' returns
   15845      true, it means that the callback function has handled all the
   15846      operands of the statement and it is not necessary to walk its
   15847      operands.
   15848 
   15849      If `CALLBACK_STMT' is `NULL' or it returns false, `CALLBACK_OP' is
   15850      called on each operand of the statement via `walk_gimple_op'.  If
   15851      `walk_gimple_op' returns non-`NULL' for any operand, the remaining
   15852      operands are not scanned.
   15853 
   15854      The return value is that returned by the last call to
   15855      `walk_gimple_op', or `NULL_TREE' if no `CALLBACK_OP' is specified.
   15856 
   15857  -- GIMPLE function: tree walk_gimple_op (gimple stmt, walk_tree_fn
   15858           callback_op, struct walk_stmt_info *wi)
   15859      Use this function to walk the operands of statement `STMT'.  Every
   15860      operand is walked via `walk_tree' with optional state information
   15861      in `WI'.
   15862 
   15863      `CALLBACK_OP' is called on each operand of `STMT' via `walk_tree'.
   15864      Additional parameters to `walk_tree' must be stored in `WI'.  For
   15865      each operand `OP', `walk_tree' is called as:
   15866 
   15867           walk_tree (&`OP', `CALLBACK_OP', `WI', `PSET')
   15868 
   15869      If `CALLBACK_OP' returns non-`NULL' for an operand, the remaining
   15870      operands are not scanned.  The return value is that returned by
   15871      the last call to `walk_tree', or `NULL_TREE' if no `CALLBACK_OP' is
   15872      specified.
   15873 
   15874  -- GIMPLE function: tree walk_gimple_seq (gimple_seq seq, walk_stmt_fn
   15875           callback_stmt, walk_tree_fn callback_op, struct
   15876           walk_stmt_info *wi)
   15877      This function walks all the statements in the sequence `SEQ'
   15878      calling `walk_gimple_stmt' on each one.  `WI' is as in
   15879      `walk_gimple_stmt'.  If `walk_gimple_stmt' returns non-`NULL', the
   15880      walk is stopped and the value returned.  Otherwise, all the
   15881      statements are walked and `NULL_TREE' returned.
   15882 
   15883 
   15884 File: gccint.info,  Node: Tree SSA,  Next: RTL,  Prev: GIMPLE,  Up: Top
   15885 
   15886 13 Analysis and Optimization of GIMPLE tuples
   15887 *********************************************
   15888 
   15889 GCC uses three main intermediate languages to represent the program
   15890 during compilation: GENERIC, GIMPLE and RTL.  GENERIC is a
   15891 language-independent representation generated by each front end.  It is
   15892 used to serve as an interface between the parser and optimizer.
   15893 GENERIC is a common representation that is able to represent programs
   15894 written in all the languages supported by GCC.
   15895 
   15896  GIMPLE and RTL are used to optimize the program.  GIMPLE is used for
   15897 target and language independent optimizations (e.g., inlining, constant
   15898 propagation, tail call elimination, redundancy elimination, etc).  Much
   15899 like GENERIC, GIMPLE is a language independent, tree based
   15900 representation.  However, it differs from GENERIC in that the GIMPLE
   15901 grammar is more restrictive: expressions contain no more than 3
   15902 operands (except function calls), it has no control flow structures and
   15903 expressions with side-effects are only allowed on the right hand side
   15904 of assignments.  See the chapter describing GENERIC and GIMPLE for more
   15905 details.
   15906 
   15907  This chapter describes the data structures and functions used in the
   15908 GIMPLE optimizers (also known as "tree optimizers" or "middle end").
   15909 In particular, it focuses on all the macros, data structures, functions
   15910 and programming constructs needed to implement optimization passes for
   15911 GIMPLE.
   15912 
   15913 * Menu:
   15914 
   15915 * Annotations::         Attributes for variables.
   15916 * SSA Operands::        SSA names referenced by GIMPLE statements.
   15917 * SSA::                 Static Single Assignment representation.
   15918 * Alias analysis::      Representing aliased loads and stores.
   15919 * Memory model::        Memory model used by the middle-end.
   15920 
   15921 
   15922 File: gccint.info,  Node: Annotations,  Next: SSA Operands,  Up: Tree SSA
   15923 
   15924 13.1 Annotations
   15925 ================
   15926 
   15927 The optimizers need to associate attributes with variables during the
   15928 optimization process.  For instance, we need to know whether a variable
   15929 has aliases.  All these attributes are stored in data structures called
   15930 annotations which are then linked to the field `ann' in `struct
   15931 tree_common'.
   15932 
   15933  Presently, we define annotations for variables (`var_ann_t').
   15934 Annotations are defined and documented in `tree-flow.h'.
   15935 
   15936 
   15937 File: gccint.info,  Node: SSA Operands,  Next: SSA,  Prev: Annotations,  Up: Tree SSA
   15938 
   15939 13.2 SSA Operands
   15940 =================
   15941 
   15942 Almost every GIMPLE statement will contain a reference to a variable or
   15943 memory location.  Since statements come in different shapes and sizes,
   15944 their operands are going to be located at various spots inside the
   15945 statement's tree.  To facilitate access to the statement's operands,
   15946 they are organized into lists associated inside each statement's
   15947 annotation.  Each element in an operand list is a pointer to a
   15948 `VAR_DECL', `PARM_DECL' or `SSA_NAME' tree node.  This provides a very
   15949 convenient way of examining and replacing operands.
   15950 
   15951  Data flow analysis and optimization is done on all tree nodes
   15952 representing variables.  Any node for which `SSA_VAR_P' returns nonzero
   15953 is considered when scanning statement operands.  However, not all
   15954 `SSA_VAR_P' variables are processed in the same way.  For the purposes
   15955 of optimization, we need to distinguish between references to local
   15956 scalar variables and references to globals, statics, structures,
   15957 arrays, aliased variables, etc.  The reason is simple, the compiler can
   15958 gather complete data flow information for a local scalar.  On the other
   15959 hand, a global variable may be modified by a function call, it may not
   15960 be possible to keep track of all the elements of an array or the fields
   15961 of a structure, etc.
   15962 
   15963  The operand scanner gathers two kinds of operands: "real" and
   15964 "virtual".  An operand for which `is_gimple_reg' returns true is
   15965 considered real, otherwise it is a virtual operand.  We also
   15966 distinguish between uses and definitions.  An operand is used if its
   15967 value is loaded by the statement (e.g., the operand at the RHS of an
   15968 assignment).  If the statement assigns a new value to the operand, the
   15969 operand is considered a definition (e.g., the operand at the LHS of an
   15970 assignment).
   15971 
   15972  Virtual and real operands also have very different data flow
   15973 properties.  Real operands are unambiguous references to the full
   15974 object that they represent.  For instance, given
   15975 
   15976      {
   15977        int a, b;
   15978        a = b
   15979      }
   15980 
   15981  Since `a' and `b' are non-aliased locals, the statement `a = b' will
   15982 have one real definition and one real use because variable `a' is
   15983 completely modified with the contents of variable `b'.  Real definition
   15984 are also known as "killing definitions".  Similarly, the use of `b'
   15985 reads all its bits.
   15986 
   15987  In contrast, virtual operands are used with variables that can have a
   15988 partial or ambiguous reference.  This includes structures, arrays,
   15989 globals, and aliased variables.  In these cases, we have two types of
   15990 definitions.  For globals, structures, and arrays, we can determine from
   15991 a statement whether a variable of these types has a killing definition.
   15992 If the variable does, then the statement is marked as having a "must
   15993 definition" of that variable.  However, if a statement is only defining
   15994 a part of the variable (i.e. a field in a structure), or if we know
   15995 that a statement might define the variable but we cannot say for sure,
   15996 then we mark that statement as having a "may definition".  For
   15997 instance, given
   15998 
   15999      {
   16000        int a, b, *p;
   16001 
   16002        if (...)
   16003          p = &a;
   16004        else
   16005          p = &b;
   16006        *p = 5;
   16007        return *p;
   16008      }
   16009 
   16010  The assignment `*p = 5' may be a definition of `a' or `b'.  If we
   16011 cannot determine statically where `p' is pointing to at the time of the
   16012 store operation, we create virtual definitions to mark that statement
   16013 as a potential definition site for `a' and `b'.  Memory loads are
   16014 similarly marked with virtual use operands.  Virtual operands are shown
   16015 in tree dumps right before the statement that contains them.  To
   16016 request a tree dump with virtual operands, use the `-vops' option to
   16017 `-fdump-tree':
   16018 
   16019      {
   16020        int a, b, *p;
   16021 
   16022        if (...)
   16023          p = &a;
   16024        else
   16025          p = &b;
   16026        # a = VDEF <a>
   16027        # b = VDEF <b>
   16028        *p = 5;
   16029 
   16030        # VUSE <a>
   16031        # VUSE <b>
   16032        return *p;
   16033      }
   16034 
   16035  Notice that `VDEF' operands have two copies of the referenced
   16036 variable.  This indicates that this is not a killing definition of that
   16037 variable.  In this case we refer to it as a "may definition" or
   16038 "aliased store".  The presence of the second copy of the variable in
   16039 the `VDEF' operand will become important when the function is converted
   16040 into SSA form.  This will be used to link all the non-killing
   16041 definitions to prevent optimizations from making incorrect assumptions
   16042 about them.
   16043 
   16044  Operands are updated as soon as the statement is finished via a call
   16045 to `update_stmt'.  If statement elements are changed via `SET_USE' or
   16046 `SET_DEF', then no further action is required (i.e., those macros take
   16047 care of updating the statement).  If changes are made by manipulating
   16048 the statement's tree directly, then a call must be made to
   16049 `update_stmt' when complete.  Calling one of the `bsi_insert' routines
   16050 or `bsi_replace' performs an implicit call to `update_stmt'.
   16051 
   16052 13.2.1 Operand Iterators And Access Routines
   16053 --------------------------------------------
   16054 
   16055 Operands are collected by `tree-ssa-operands.c'.  They are stored
   16056 inside each statement's annotation and can be accessed through either
   16057 the operand iterators or an access routine.
   16058 
   16059  The following access routines are available for examining operands:
   16060 
   16061   1. `SINGLE_SSA_{USE,DEF,TREE}_OPERAND': These accessors will return
   16062      NULL unless there is exactly one operand matching the specified
   16063      flags.  If there is exactly one operand, the operand is returned
   16064      as either a `tree', `def_operand_p', or `use_operand_p'.
   16065 
   16066           tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags);
   16067           use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES);
   16068           def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS);
   16069 
   16070   2. `ZERO_SSA_OPERANDS': This macro returns true if there are no
   16071      operands matching the specified flags.
   16072 
   16073           if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS))
   16074             return;
   16075 
   16076   3. `NUM_SSA_OPERANDS': This macro Returns the number of operands
   16077      matching 'flags'.  This actually executes a loop to perform the
   16078      count, so only use this if it is really needed.
   16079 
   16080           int count = NUM_SSA_OPERANDS (stmt, flags)
   16081 
   16082  If you wish to iterate over some or all operands, use the
   16083 `FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND' iterator.  For example, to print
   16084 all the operands for a statement:
   16085 
   16086      void
   16087      print_ops (tree stmt)
   16088      {
   16089        ssa_op_iter;
   16090        tree var;
   16091 
   16092        FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS)
   16093          print_generic_expr (stderr, var, TDF_SLIM);
   16094      }
   16095 
   16096  How to choose the appropriate iterator:
   16097 
   16098   1. Determine whether you are need to see the operand pointers, or
   16099      just the trees, and choose the appropriate macro:
   16100 
   16101           Need            Macro:
   16102           ----            -------
   16103           use_operand_p   FOR_EACH_SSA_USE_OPERAND
   16104           def_operand_p   FOR_EACH_SSA_DEF_OPERAND
   16105           tree            FOR_EACH_SSA_TREE_OPERAND
   16106 
   16107   2. You need to declare a variable of the type you are interested in,
   16108      and an ssa_op_iter structure which serves as the loop controlling
   16109      variable.
   16110 
   16111   3. Determine which operands you wish to use, and specify the flags of
   16112      those you are interested in.  They are documented in
   16113      `tree-ssa-operands.h':
   16114 
   16115           #define SSA_OP_USE              0x01    /* Real USE operands.  */
   16116           #define SSA_OP_DEF              0x02    /* Real DEF operands.  */
   16117           #define SSA_OP_VUSE             0x04    /* VUSE operands.  */
   16118           #define SSA_OP_VMAYUSE          0x08    /* USE portion of VDEFS.  */
   16119           #define SSA_OP_VDEF             0x10    /* DEF portion of VDEFS.  */
   16120 
   16121           /* These are commonly grouped operand flags.  */
   16122           #define SSA_OP_VIRTUAL_USES     (SSA_OP_VUSE | SSA_OP_VMAYUSE)
   16123           #define SSA_OP_VIRTUAL_DEFS     (SSA_OP_VDEF)
   16124           #define SSA_OP_ALL_USES         (SSA_OP_VIRTUAL_USES | SSA_OP_USE)
   16125           #define SSA_OP_ALL_DEFS         (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF)
   16126           #define SSA_OP_ALL_OPERANDS     (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS)
   16127 
   16128  So if you want to look at the use pointers for all the `USE' and
   16129 `VUSE' operands, you would do something like:
   16130 
   16131        use_operand_p use_p;
   16132        ssa_op_iter iter;
   16133 
   16134        FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE))
   16135          {
   16136            process_use_ptr (use_p);
   16137          }
   16138 
   16139  The `TREE' macro is basically the same as the `USE' and `DEF' macros,
   16140 only with the use or def dereferenced via `USE_FROM_PTR (use_p)' and
   16141 `DEF_FROM_PTR (def_p)'.  Since we aren't using operand pointers, use
   16142 and defs flags can be mixed.
   16143 
   16144        tree var;
   16145        ssa_op_iter iter;
   16146 
   16147        FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE)
   16148          {
   16149             print_generic_expr (stderr, var, TDF_SLIM);
   16150          }
   16151 
   16152  `VDEF's are broken into two flags, one for the `DEF' portion
   16153 (`SSA_OP_VDEF') and one for the USE portion (`SSA_OP_VMAYUSE').  If all
   16154 you want to look at are the `VDEF's together, there is a fourth
   16155 iterator macro for this, which returns both a def_operand_p and a
   16156 use_operand_p for each `VDEF' in the statement.  Note that you don't
   16157 need any flags for this one.
   16158 
   16159        use_operand_p use_p;
   16160        def_operand_p def_p;
   16161        ssa_op_iter iter;
   16162 
   16163        FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter)
   16164          {
   16165            my_code;
   16166          }
   16167 
   16168  There are many examples in the code as well, as well as the
   16169 documentation in `tree-ssa-operands.h'.
   16170 
   16171  There are also a couple of variants on the stmt iterators regarding PHI
   16172 nodes.
   16173 
   16174  `FOR_EACH_PHI_ARG' Works exactly like `FOR_EACH_SSA_USE_OPERAND',
   16175 except it works over `PHI' arguments instead of statement operands.
   16176 
   16177      /* Look at every virtual PHI use.  */
   16178      FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES)
   16179      {
   16180         my_code;
   16181      }
   16182 
   16183      /* Look at every real PHI use.  */
   16184      FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_USES)
   16185        my_code;
   16186 
   16187      /* Look at every PHI use.  */
   16188      FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES)
   16189        my_code;
   16190 
   16191  `FOR_EACH_PHI_OR_STMT_{USE,DEF}' works exactly like
   16192 `FOR_EACH_SSA_{USE,DEF}_OPERAND', except it will function on either a
   16193 statement or a `PHI' node.  These should be used when it is appropriate
   16194 but they are not quite as efficient as the individual `FOR_EACH_PHI'
   16195 and `FOR_EACH_SSA' routines.
   16196 
   16197      FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags)
   16198        {
   16199           my_code;
   16200        }
   16201 
   16202      FOR_EACH_PHI_OR_STMT_DEF (def_operand_p, phi, iter, flags)
   16203        {
   16204           my_code;
   16205        }
   16206 
   16207 13.2.2 Immediate Uses
   16208 ---------------------
   16209 
   16210 Immediate use information is now always available.  Using the immediate
   16211 use iterators, you may examine every use of any `SSA_NAME'. For
   16212 instance, to change each use of `ssa_var' to `ssa_var2' and call
   16213 fold_stmt on each stmt after that is done:
   16214 
   16215        use_operand_p imm_use_p;
   16216        imm_use_iterator iterator;
   16217        tree ssa_var, stmt;
   16218 
   16219 
   16220        FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
   16221          {
   16222            FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
   16223              SET_USE (imm_use_p, ssa_var_2);
   16224            fold_stmt (stmt);
   16225          }
   16226 
   16227  There are 2 iterators which can be used. `FOR_EACH_IMM_USE_FAST' is
   16228 used when the immediate uses are not changed, i.e., you are looking at
   16229 the uses, but not setting them.
   16230 
   16231  If they do get changed, then care must be taken that things are not
   16232 changed under the iterators, so use the `FOR_EACH_IMM_USE_STMT' and
   16233 `FOR_EACH_IMM_USE_ON_STMT' iterators.  They attempt to preserve the
   16234 sanity of the use list by moving all the uses for a statement into a
   16235 controlled position, and then iterating over those uses.  Then the
   16236 optimization can manipulate the stmt when all the uses have been
   16237 processed.  This is a little slower than the FAST version since it adds
   16238 a placeholder element and must sort through the list a bit for each
   16239 statement.  This placeholder element must be also be removed if the
   16240 loop is terminated early.  The macro `BREAK_FROM_IMM_USE_SAFE' is
   16241 provided to do this :
   16242 
   16243        FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
   16244          {
   16245            if (stmt == last_stmt)
   16246              BREAK_FROM_SAFE_IMM_USE (iter);
   16247 
   16248            FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
   16249              SET_USE (imm_use_p, ssa_var_2);
   16250            fold_stmt (stmt);
   16251          }
   16252 
   16253  There are checks in `verify_ssa' which verify that the immediate use
   16254 list is up to date, as well as checking that an optimization didn't
   16255 break from the loop without using this macro.  It is safe to simply
   16256 'break'; from a `FOR_EACH_IMM_USE_FAST' traverse.
   16257 
   16258  Some useful functions and macros:
   16259   1. `has_zero_uses (ssa_var)' : Returns true if there are no uses of
   16260      `ssa_var'.
   16261 
   16262   2. `has_single_use (ssa_var)' : Returns true if there is only a
   16263      single use of `ssa_var'.
   16264 
   16265   3. `single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)' :
   16266      Returns true if there is only a single use of `ssa_var', and also
   16267      returns the use pointer and statement it occurs in, in the second
   16268      and third parameters.
   16269 
   16270   4. `num_imm_uses (ssa_var)' : Returns the number of immediate uses of
   16271      `ssa_var'. It is better not to use this if possible since it simply
   16272      utilizes a loop to count the uses.
   16273 
   16274   5. `PHI_ARG_INDEX_FROM_USE (use_p)' : Given a use within a `PHI'
   16275      node, return the index number for the use.  An assert is triggered
   16276      if the use isn't located in a `PHI' node.
   16277 
   16278   6. `USE_STMT (use_p)' : Return the statement a use occurs in.
   16279 
   16280  Note that uses are not put into an immediate use list until their
   16281 statement is actually inserted into the instruction stream via a
   16282 `bsi_*' routine.
   16283 
   16284  It is also still possible to utilize lazy updating of statements, but
   16285 this should be used only when absolutely required.  Both alias analysis
   16286 and the dominator optimizations currently do this.
   16287 
   16288  When lazy updating is being used, the immediate use information is out
   16289 of date and cannot be used reliably.  Lazy updating is achieved by
   16290 simply marking statements modified via calls to `mark_stmt_modified'
   16291 instead of `update_stmt'.  When lazy updating is no longer required,
   16292 all the modified statements must have `update_stmt' called in order to
   16293 bring them up to date.  This must be done before the optimization is
   16294 finished, or `verify_ssa' will trigger an abort.
   16295 
   16296  This is done with a simple loop over the instruction stream:
   16297        block_stmt_iterator bsi;
   16298        basic_block bb;
   16299        FOR_EACH_BB (bb)
   16300          {
   16301            for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
   16302              update_stmt_if_modified (bsi_stmt (bsi));
   16303          }
   16304 
   16305 
   16306 File: gccint.info,  Node: SSA,  Next: Alias analysis,  Prev: SSA Operands,  Up: Tree SSA
   16307 
   16308 13.3 Static Single Assignment
   16309 =============================
   16310 
   16311 Most of the tree optimizers rely on the data flow information provided
   16312 by the Static Single Assignment (SSA) form.  We implement the SSA form
   16313 as described in `R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K.
   16314 Zadeck.  Efficiently Computing Static Single Assignment Form and the
   16315 Control Dependence Graph.  ACM Transactions on Programming Languages
   16316 and Systems, 13(4):451-490, October 1991'.
   16317 
   16318  The SSA form is based on the premise that program variables are
   16319 assigned in exactly one location in the program.  Multiple assignments
   16320 to the same variable create new versions of that variable.  Naturally,
   16321 actual programs are seldom in SSA form initially because variables tend
   16322 to be assigned multiple times.  The compiler modifies the program
   16323 representation so that every time a variable is assigned in the code, a
   16324 new version of the variable is created.  Different versions of the same
   16325 variable are distinguished by subscripting the variable name with its
   16326 version number.  Variables used in the right-hand side of expressions
   16327 are renamed so that their version number matches that of the most
   16328 recent assignment.
   16329 
   16330  We represent variable versions using `SSA_NAME' nodes.  The renaming
   16331 process in `tree-ssa.c' wraps every real and virtual operand with an
   16332 `SSA_NAME' node which contains the version number and the statement
   16333 that created the `SSA_NAME'.  Only definitions and virtual definitions
   16334 may create new `SSA_NAME' nodes.
   16335 
   16336  Sometimes, flow of control makes it impossible to determine the most
   16337 recent version of a variable.  In these cases, the compiler inserts an
   16338 artificial definition for that variable called "PHI function" or "PHI
   16339 node".  This new definition merges all the incoming versions of the
   16340 variable to create a new name for it.  For instance,
   16341 
   16342      if (...)
   16343        a_1 = 5;
   16344      else if (...)
   16345        a_2 = 2;
   16346      else
   16347        a_3 = 13;
   16348 
   16349      # a_4 = PHI <a_1, a_2, a_3>
   16350      return a_4;
   16351 
   16352  Since it is not possible to determine which of the three branches will
   16353 be taken at runtime, we don't know which of `a_1', `a_2' or `a_3' to
   16354 use at the return statement.  So, the SSA renamer creates a new version
   16355 `a_4' which is assigned the result of "merging" `a_1', `a_2' and `a_3'.
   16356 Hence, PHI nodes mean "one of these operands.  I don't know which".
   16357 
   16358  The following macros can be used to examine PHI nodes
   16359 
   16360  -- Macro: PHI_RESULT (PHI)
   16361      Returns the `SSA_NAME' created by PHI node PHI (i.e., PHI's LHS).
   16362 
   16363  -- Macro: PHI_NUM_ARGS (PHI)
   16364      Returns the number of arguments in PHI.  This number is exactly
   16365      the number of incoming edges to the basic block holding PHI.
   16366 
   16367  -- Macro: PHI_ARG_ELT (PHI, I)
   16368      Returns a tuple representing the Ith argument of PHI.  Each
   16369      element of this tuple contains an `SSA_NAME' VAR and the incoming
   16370      edge through which VAR flows.
   16371 
   16372  -- Macro: PHI_ARG_EDGE (PHI, I)
   16373      Returns the incoming edge for the Ith argument of PHI.
   16374 
   16375  -- Macro: PHI_ARG_DEF (PHI, I)
   16376      Returns the `SSA_NAME' for the Ith argument of PHI.
   16377 
   16378 13.3.1 Preserving the SSA form
   16379 ------------------------------
   16380 
   16381 Some optimization passes make changes to the function that invalidate
   16382 the SSA property.  This can happen when a pass has added new symbols or
   16383 changed the program so that variables that were previously aliased
   16384 aren't anymore.  Whenever something like this happens, the affected
   16385 symbols must be renamed into SSA form again.  Transformations that emit
   16386 new code or replicate existing statements will also need to update the
   16387 SSA form.
   16388 
   16389  Since GCC implements two different SSA forms for register and virtual
   16390 variables, keeping the SSA form up to date depends on whether you are
   16391 updating register or virtual names.  In both cases, the general idea
   16392 behind incremental SSA updates is similar: when new SSA names are
   16393 created, they typically are meant to replace other existing names in
   16394 the program.
   16395 
   16396  For instance, given the following code:
   16397 
   16398           1  L0:
   16399           2  x_1 = PHI (0, x_5)
   16400           3  if (x_1 < 10)
   16401           4    if (x_1 > 7)
   16402           5      y_2 = 0
   16403           6    else
   16404           7      y_3 = x_1 + x_7
   16405           8    endif
   16406           9    x_5 = x_1 + 1
   16407           10   goto L0;
   16408           11 endif
   16409 
   16410  Suppose that we insert new names `x_10' and `x_11' (lines `4' and `8').
   16411 
   16412           1  L0:
   16413           2  x_1 = PHI (0, x_5)
   16414           3  if (x_1 < 10)
   16415           4    x_10 = ...
   16416           5    if (x_1 > 7)
   16417           6      y_2 = 0
   16418           7    else
   16419           8      x_11 = ...
   16420           9      y_3 = x_1 + x_7
   16421           10   endif
   16422           11   x_5 = x_1 + 1
   16423           12   goto L0;
   16424           13 endif
   16425 
   16426  We want to replace all the uses of `x_1' with the new definitions of
   16427 `x_10' and `x_11'.  Note that the only uses that should be replaced are
   16428 those at lines `5', `9' and `11'.  Also, the use of `x_7' at line `9'
   16429 should _not_ be replaced (this is why we cannot just mark symbol `x' for
   16430 renaming).
   16431 
   16432  Additionally, we may need to insert a PHI node at line `11' because
   16433 that is a merge point for `x_10' and `x_11'.  So the use of `x_1' at
   16434 line `11' will be replaced with the new PHI node.  The insertion of PHI
   16435 nodes is optional.  They are not strictly necessary to preserve the SSA
   16436 form, and depending on what the caller inserted, they may not even be
   16437 useful for the optimizers.
   16438 
   16439  Updating the SSA form is a two step process.  First, the pass has to
   16440 identify which names need to be updated and/or which symbols need to be
   16441 renamed into SSA form for the first time.  When new names are
   16442 introduced to replace existing names in the program, the mapping
   16443 between the old and the new names are registered by calling
   16444 `register_new_name_mapping' (note that if your pass creates new code by
   16445 duplicating basic blocks, the call to `tree_duplicate_bb' will set up
   16446 the necessary mappings automatically).  On the other hand, if your pass
   16447 exposes a new symbol that should be put in SSA form for the first time,
   16448 the new symbol should be registered with `mark_sym_for_renaming'.
   16449 
   16450  After the replacement mappings have been registered and new symbols
   16451 marked for renaming, a call to `update_ssa' makes the registered
   16452 changes.  This can be done with an explicit call or by creating `TODO'
   16453 flags in the `tree_opt_pass' structure for your pass.  There are
   16454 several `TODO' flags that control the behavior of `update_ssa':
   16455 
   16456    * `TODO_update_ssa'.  Update the SSA form inserting PHI nodes for
   16457      newly exposed symbols and virtual names marked for updating.  When
   16458      updating real names, only insert PHI nodes for a real name `O_j'
   16459      in blocks reached by all the new and old definitions for `O_j'.
   16460      If the iterated dominance frontier for `O_j' is not pruned, we may
   16461      end up inserting PHI nodes in blocks that have one or more edges
   16462      with no incoming definition for `O_j'.  This would lead to
   16463      uninitialized warnings for `O_j''s symbol.
   16464 
   16465    * `TODO_update_ssa_no_phi'.  Update the SSA form without inserting
   16466      any new PHI nodes at all.  This is used by passes that have either
   16467      inserted all the PHI nodes themselves or passes that need only to
   16468      patch use-def and def-def chains for virtuals (e.g., DCE).
   16469 
   16470    * `TODO_update_ssa_full_phi'.  Insert PHI nodes everywhere they are
   16471      needed.  No pruning of the IDF is done.  This is used by passes
   16472      that need the PHI nodes for `O_j' even if it means that some
   16473      arguments will come from the default definition of `O_j''s symbol
   16474      (e.g., `pass_linear_transform').
   16475 
   16476      WARNING: If you need to use this flag, chances are that your pass
   16477      may be doing something wrong.  Inserting PHI nodes for an old name
   16478      where not all edges carry a new replacement may lead to silent
   16479      codegen errors or spurious uninitialized warnings.
   16480 
   16481    * `TODO_update_ssa_only_virtuals'.  Passes that update the SSA form
   16482      on their own may want to delegate the updating of virtual names to
   16483      the generic updater.  Since FUD chains are easier to maintain,
   16484      this simplifies the work they need to do.  NOTE: If this flag is
   16485      used, any OLD->NEW mappings for real names are explicitly
   16486      destroyed and only the symbols marked for renaming are processed.
   16487 
   16488 13.3.2 Preserving the virtual SSA form
   16489 --------------------------------------
   16490 
   16491 The virtual SSA form is harder to preserve than the non-virtual SSA form
   16492 mainly because the set of virtual operands for a statement may change at
   16493 what some would consider unexpected times.  In general, statement
   16494 modifications should be bracketed between calls to `push_stmt_changes'
   16495 and `pop_stmt_changes'.  For example,
   16496 
   16497          munge_stmt (tree stmt)
   16498          {
   16499             push_stmt_changes (&stmt);
   16500             ... rewrite STMT ...
   16501             pop_stmt_changes (&stmt);
   16502          }
   16503 
   16504  The call to `push_stmt_changes' saves the current state of the
   16505 statement operands and the call to `pop_stmt_changes' compares the
   16506 saved state with the current one and does the appropriate symbol
   16507 marking for the SSA renamer.
   16508 
   16509  It is possible to modify several statements at a time, provided that
   16510 `push_stmt_changes' and `pop_stmt_changes' are called in LIFO order, as
   16511 when processing a stack of statements.
   16512 
   16513  Additionally, if the pass discovers that it did not need to make
   16514 changes to the statement after calling `push_stmt_changes', it can
   16515 simply discard the topmost change buffer by calling
   16516 `discard_stmt_changes'.  This will avoid the expensive operand re-scan
   16517 operation and the buffer comparison that determines if symbols need to
   16518 be marked for renaming.
   16519 
   16520 13.3.3 Examining `SSA_NAME' nodes
   16521 ---------------------------------
   16522 
   16523 The following macros can be used to examine `SSA_NAME' nodes
   16524 
   16525  -- Macro: SSA_NAME_DEF_STMT (VAR)
   16526      Returns the statement S that creates the `SSA_NAME' VAR.  If S is
   16527      an empty statement (i.e., `IS_EMPTY_STMT (S)' returns `true'), it
   16528      means that the first reference to this variable is a USE or a VUSE.
   16529 
   16530  -- Macro: SSA_NAME_VERSION (VAR)
   16531      Returns the version number of the `SSA_NAME' object VAR.
   16532 
   16533 13.3.4 Walking use-def chains
   16534 -----------------------------
   16535 
   16536  -- Tree SSA function: void walk_use_def_chains (VAR, FN, DATA)
   16537      Walks use-def chains starting at the `SSA_NAME' node VAR.  Calls
   16538      function FN at each reaching definition found.  Function FN takes
   16539      three arguments: VAR, its defining statement (DEF_STMT) and a
   16540      generic pointer to whatever state information that FN may want to
   16541      maintain (DATA).  Function FN is able to stop the walk by
   16542      returning `true', otherwise in order to continue the walk, FN
   16543      should return `false'.
   16544 
   16545      Note, that if DEF_STMT is a `PHI' node, the semantics are slightly
   16546      different.  For each argument ARG of the PHI node, this function
   16547      will:
   16548 
   16549        1. Walk the use-def chains for ARG.
   16550 
   16551        2. Call `FN (ARG, PHI, DATA)'.
   16552 
   16553      Note how the first argument to FN is no longer the original
   16554      variable VAR, but the PHI argument currently being examined.  If
   16555      FN wants to get at VAR, it should call `PHI_RESULT' (PHI).
   16556 
   16557 13.3.5 Walking the dominator tree
   16558 ---------------------------------
   16559 
   16560  -- Tree SSA function: void walk_dominator_tree (WALK_DATA, BB)
   16561      This function walks the dominator tree for the current CFG calling
   16562      a set of callback functions defined in STRUCT DOM_WALK_DATA in
   16563      `domwalk.h'.  The call back functions you need to define give you
   16564      hooks to execute custom code at various points during traversal:
   16565 
   16566        1. Once to initialize any local data needed while processing BB
   16567           and its children.  This local data is pushed into an internal
   16568           stack which is automatically pushed and popped as the walker
   16569           traverses the dominator tree.
   16570 
   16571        2. Once before traversing all the statements in the BB.
   16572 
   16573        3. Once for every statement inside BB.
   16574 
   16575        4. Once after traversing all the statements and before recursing
   16576           into BB's dominator children.
   16577 
   16578        5. It then recurses into all the dominator children of BB.
   16579 
   16580        6. After recursing into all the dominator children of BB it can,
   16581           optionally, traverse every statement in BB again (i.e.,
   16582           repeating steps 2 and 3).
   16583 
   16584        7. Once after walking the statements in BB and BB's dominator
   16585           children.  At this stage, the block local data stack is
   16586           popped.
   16587 
   16588 
   16589 File: gccint.info,  Node: Alias analysis,  Next: Memory model,  Prev: SSA,  Up: Tree SSA
   16590 
   16591 13.4 Alias analysis
   16592 ===================
   16593 
   16594 Alias analysis in GIMPLE SSA form consists of two pieces.  First the
   16595 virtual SSA web ties conflicting memory accesses and provides a SSA
   16596 use-def chain and SSA immediate-use chains for walking possibly
   16597 dependent memory accesses.  Second an alias-oracle can be queried to
   16598 disambiguate explicit and implicit memory references.
   16599 
   16600   1. Memory SSA form.
   16601 
   16602      All statements that may use memory have exactly one accompanied
   16603      use of a virtual SSA name that represents the state of memory at
   16604      the given point in the IL.
   16605 
   16606      All statements that may define memory have exactly one accompanied
   16607      definition of a virtual SSA name using the previous state of memory
   16608      and defining the new state of memory after the given point in the
   16609      IL.
   16610 
   16611           int i;
   16612           int foo (void)
   16613           {
   16614             # .MEM_3 = VDEF <.MEM_2(D)>
   16615             i = 1;
   16616             # VUSE <.MEM_3>
   16617             return i;
   16618           }
   16619 
   16620      The virtual SSA names in this case are `.MEM_2(D)' and `.MEM_3'.
   16621      The store to the global variable `i' defines `.MEM_3' invalidating
   16622      `.MEM_2(D)'.  The load from `i' uses that new state `.MEM_3'.
   16623 
   16624      The virtual SSA web serves as constraints to SSA optimizers
   16625      preventing illegitimate code-motion and optimization.  It also
   16626      provides a way to walk related memory statements.
   16627 
   16628   2. Points-to and escape analysis.
   16629 
   16630      Points-to analysis builds a set of constraints from the GIMPLE SSA
   16631      IL representing all pointer operations and facts we do or do not
   16632      know about pointers.  Solving this set of constraints yields a
   16633      conservatively correct solution for each pointer variable in the
   16634      program (though we are only interested in SSA name pointers) as to
   16635      what it may possibly point to.
   16636 
   16637      This points-to solution for a given SSA name pointer is stored in
   16638      the `pt_solution' sub-structure of the `SSA_NAME_PTR_INFO' record.
   16639      The following accessor functions are available:
   16640 
   16641         * `pt_solution_includes'
   16642 
   16643         * `pt_solutions_intersect'
   16644 
   16645      Points-to analysis also computes the solution for two special set
   16646      of pointers, `ESCAPED' and `CALLUSED'.  Those represent all memory
   16647      that has escaped the scope of analysis or that is used by pure or
   16648      nested const calls.
   16649 
   16650   3. Type-based alias analysis
   16651 
   16652      Type-based alias analysis is frontend dependent though generic
   16653      support is provided by the middle-end in `alias.c'.  TBAA code is
   16654      used by both tree optimizers and RTL optimizers.
   16655 
   16656      Every language that wishes to perform language-specific alias
   16657      analysis should define a function that computes, given a `tree'
   16658      node, an alias set for the node.  Nodes in different alias sets
   16659      are not allowed to alias.  For an example, see the C front-end
   16660      function `c_get_alias_set'.
   16661 
   16662   4. Tree alias-oracle
   16663 
   16664      The tree alias-oracle provides means to disambiguate two memory
   16665      references and memory references against statements.  The following
   16666      queries are available:
   16667 
   16668         * `refs_may_alias_p'
   16669 
   16670         * `ref_maybe_used_by_stmt_p'
   16671 
   16672         * `stmt_may_clobber_ref_p'
   16673 
   16674      In addition to those two kind of statement walkers are available
   16675      walking statements related to a reference ref.
   16676      `walk_non_aliased_vuses' walks over dominating memory defining
   16677      statements and calls back if the statement does not clobber ref
   16678      providing the non-aliased VUSE.  The walk stops at the first
   16679      clobbering statement or if asked to.  `walk_aliased_vdefs' walks
   16680      over dominating memory defining statements and calls back on each
   16681      statement clobbering ref providing its aliasing VDEF.  The walk
   16682      stops if asked to.
   16683 
   16684 
   16685 
   16686 File: gccint.info,  Node: Memory model,  Prev: Alias analysis,  Up: Tree SSA
   16687 
   16688 13.5 Memory model
   16689 =================
   16690 
   16691 The memory model used by the middle-end models that of the C/C++
   16692 languages.  The middle-end has the notion of an effective type of a
   16693 memory region which is used for type-based alias analysis.
   16694 
   16695  The following is a refinement of ISO C99 6.5/6, clarifying the block
   16696 copy case to follow common sense and extending the concept of a dynamic
   16697 effective type to objects with a declared type as required for C++.
   16698 
   16699      The effective type of an object for an access to its stored value is
   16700      the declared type of the object or the effective type determined by
   16701      a previous store to it.  If a value is stored into an object through
   16702      an lvalue having a type that is not a character type, then the
   16703      type of the lvalue becomes the effective type of the object for that
   16704      access and for subsequent accesses that do not modify the stored value.
   16705      If a value is copied into an object using `memcpy' or `memmove',
   16706      or is copied as an array of character type, then the effective type
   16707      of the modified object for that access and for subsequent accesses that
   16708      do not modify the value is undetermined.  For all other accesses to an
   16709      object, the effective type of the object is simply the type of the
   16710      lvalue used for the access.
   16711 
   16712 
   16713 File: gccint.info,  Node: Loop Analysis and Representation,  Next: Machine Desc,  Prev: Control Flow,  Up: Top
   16714 
   16715 14 Analysis and Representation of Loops
   16716 ***************************************
   16717 
   16718 GCC provides extensive infrastructure for work with natural loops, i.e.,
   16719 strongly connected components of CFG with only one entry block.  This
   16720 chapter describes representation of loops in GCC, both on GIMPLE and in
   16721 RTL, as well as the interfaces to loop-related analyses (induction
   16722 variable analysis and number of iterations analysis).
   16723 
   16724 * Menu:
   16725 
   16726 * Loop representation::         Representation and analysis of loops.
   16727 * Loop querying::               Getting information about loops.
   16728 * Loop manipulation::           Loop manipulation functions.
   16729 * LCSSA::                       Loop-closed SSA form.
   16730 * Scalar evolutions::           Induction variables on GIMPLE.
   16731 * loop-iv::                     Induction variables on RTL.
   16732 * Number of iterations::        Number of iterations analysis.
   16733 * Dependency analysis::         Data dependency analysis.
   16734 * Lambda::                      Linear loop transformations framework.
   16735 * Omega::                       A solver for linear programming problems.
   16736 
   16737 
   16738 File: gccint.info,  Node: Loop representation,  Next: Loop querying,  Up: Loop Analysis and Representation
   16739 
   16740 14.1 Loop representation
   16741 ========================
   16742 
   16743 This chapter describes the representation of loops in GCC, and functions
   16744 that can be used to build, modify and analyze this representation.  Most
   16745 of the interfaces and data structures are declared in `cfgloop.h'.  At
   16746 the moment, loop structures are analyzed and this information is
   16747 updated only by the optimization passes that deal with loops, but some
   16748 efforts are being made to make it available throughout most of the
   16749 optimization passes.
   16750 
   16751  In general, a natural loop has one entry block (header) and possibly
   16752 several back edges (latches) leading to the header from the inside of
   16753 the loop.  Loops with several latches may appear if several loops share
   16754 a single header, or if there is a branching in the middle of the loop.
   16755 The representation of loops in GCC however allows only loops with a
   16756 single latch.  During loop analysis, headers of such loops are split and
   16757 forwarder blocks are created in order to disambiguate their structures.
   16758 Heuristic based on profile information and structure of the induction
   16759 variables in the loops is used to determine whether the latches
   16760 correspond to sub-loops or to control flow in a single loop.  This means
   16761 that the analysis sometimes changes the CFG, and if you run it in the
   16762 middle of an optimization pass, you must be able to deal with the new
   16763 blocks.  You may avoid CFG changes by passing
   16764 `LOOPS_MAY_HAVE_MULTIPLE_LATCHES' flag to the loop discovery, note
   16765 however that most other loop manipulation functions will not work
   16766 correctly for loops with multiple latch edges (the functions that only
   16767 query membership of blocks to loops and subloop relationships, or
   16768 enumerate and test loop exits, can be expected to work).
   16769 
   16770  Body of the loop is the set of blocks that are dominated by its header,
   16771 and reachable from its latch against the direction of edges in CFG.  The
   16772 loops are organized in a containment hierarchy (tree) such that all the
   16773 loops immediately contained inside loop L are the children of L in the
   16774 tree.  This tree is represented by the `struct loops' structure.  The
   16775 root of this tree is a fake loop that contains all blocks in the
   16776 function.  Each of the loops is represented in a `struct loop'
   16777 structure.  Each loop is assigned an index (`num' field of the `struct
   16778 loop' structure), and the pointer to the loop is stored in the
   16779 corresponding field of the `larray' vector in the loops structure.  The
   16780 indices do not have to be continuous, there may be empty (`NULL')
   16781 entries in the `larray' created by deleting loops.  Also, there is no
   16782 guarantee on the relative order of a loop and its subloops in the
   16783 numbering.  The index of a loop never changes.
   16784 
   16785  The entries of the `larray' field should not be accessed directly.
   16786 The function `get_loop' returns the loop description for a loop with
   16787 the given index.  `number_of_loops' function returns number of loops in
   16788 the function.  To traverse all loops, use `FOR_EACH_LOOP' macro.  The
   16789 `flags' argument of the macro is used to determine the direction of
   16790 traversal and the set of loops visited.  Each loop is guaranteed to be
   16791 visited exactly once, regardless of the changes to the loop tree, and
   16792 the loops may be removed during the traversal.  The newly created loops
   16793 are never traversed, if they need to be visited, this must be done
   16794 separately after their creation.  The `FOR_EACH_LOOP' macro allocates
   16795 temporary variables.  If the `FOR_EACH_LOOP' loop were ended using
   16796 break or goto, they would not be released; `FOR_EACH_LOOP_BREAK' macro
   16797 must be used instead.
   16798 
   16799  Each basic block contains the reference to the innermost loop it
   16800 belongs to (`loop_father').  For this reason, it is only possible to
   16801 have one `struct loops' structure initialized at the same time for each
   16802 CFG.  The global variable `current_loops' contains the `struct loops'
   16803 structure.  Many of the loop manipulation functions assume that
   16804 dominance information is up-to-date.
   16805 
   16806  The loops are analyzed through `loop_optimizer_init' function.  The
   16807 argument of this function is a set of flags represented in an integer
   16808 bitmask.  These flags specify what other properties of the loop
   16809 structures should be calculated/enforced and preserved later:
   16810 
   16811    * `LOOPS_MAY_HAVE_MULTIPLE_LATCHES': If this flag is set, no changes
   16812      to CFG will be performed in the loop analysis, in particular,
   16813      loops with multiple latch edges will not be disambiguated.  If a
   16814      loop has multiple latches, its latch block is set to NULL.  Most of
   16815      the loop manipulation functions will not work for loops in this
   16816      shape.  No other flags that require CFG changes can be passed to
   16817      loop_optimizer_init.
   16818 
   16819    * `LOOPS_HAVE_PREHEADERS': Forwarder blocks are created in such a
   16820      way that each loop has only one entry edge, and additionally, the
   16821      source block of this entry edge has only one successor.  This
   16822      creates a natural place where the code can be moved out of the
   16823      loop, and ensures that the entry edge of the loop leads from its
   16824      immediate super-loop.
   16825 
   16826    * `LOOPS_HAVE_SIMPLE_LATCHES': Forwarder blocks are created to force
   16827      the latch block of each loop to have only one successor.  This
   16828      ensures that the latch of the loop does not belong to any of its
   16829      sub-loops, and makes manipulation with the loops significantly
   16830      easier.  Most of the loop manipulation functions assume that the
   16831      loops are in this shape.  Note that with this flag, the "normal"
   16832      loop without any control flow inside and with one exit consists of
   16833      two basic blocks.
   16834 
   16835    * `LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS': Basic blocks and edges in
   16836      the strongly connected components that are not natural loops (have
   16837      more than one entry block) are marked with `BB_IRREDUCIBLE_LOOP'
   16838      and `EDGE_IRREDUCIBLE_LOOP' flags.  The flag is not set for blocks
   16839      and edges that belong to natural loops that are in such an
   16840      irreducible region (but it is set for the entry and exit edges of
   16841      such a loop, if they lead to/from this region).
   16842 
   16843    * `LOOPS_HAVE_RECORDED_EXITS': The lists of exits are recorded and
   16844      updated for each loop.  This makes some functions (e.g.,
   16845      `get_loop_exit_edges') more efficient.  Some functions (e.g.,
   16846      `single_exit') can be used only if the lists of exits are recorded.
   16847 
   16848  These properties may also be computed/enforced later, using functions
   16849 `create_preheaders', `force_single_succ_latches',
   16850 `mark_irreducible_loops' and `record_loop_exits'.
   16851 
   16852  The memory occupied by the loops structures should be freed with
   16853 `loop_optimizer_finalize' function.
   16854 
   16855  The CFG manipulation functions in general do not update loop
   16856 structures.  Specialized versions that additionally do so are provided
   16857 for the most common tasks.  On GIMPLE, `cleanup_tree_cfg_loop' function
   16858 can be used to cleanup CFG while updating the loops structures if
   16859 `current_loops' is set.
   16860 
   16861 
   16862 File: gccint.info,  Node: Loop querying,  Next: Loop manipulation,  Prev: Loop representation,  Up: Loop Analysis and Representation
   16863 
   16864 14.2 Loop querying
   16865 ==================
   16866 
   16867 The functions to query the information about loops are declared in
   16868 `cfgloop.h'.  Some of the information can be taken directly from the
   16869 structures.  `loop_father' field of each basic block contains the
   16870 innermost loop to that the block belongs.  The most useful fields of
   16871 loop structure (that are kept up-to-date at all times) are:
   16872 
   16873    * `header', `latch': Header and latch basic blocks of the loop.
   16874 
   16875    * `num_nodes': Number of basic blocks in the loop (including the
   16876      basic blocks of the sub-loops).
   16877 
   16878    * `depth': The depth of the loop in the loops tree, i.e., the number
   16879      of super-loops of the loop.
   16880 
   16881    * `outer', `inner', `next': The super-loop, the first sub-loop, and
   16882      the sibling of the loop in the loops tree.
   16883 
   16884  There are other fields in the loop structures, many of them used only
   16885 by some of the passes, or not updated during CFG changes; in general,
   16886 they should not be accessed directly.
   16887 
   16888  The most important functions to query loop structures are:
   16889 
   16890    * `flow_loops_dump': Dumps the information about loops to a file.
   16891 
   16892    * `verify_loop_structure': Checks consistency of the loop structures.
   16893 
   16894    * `loop_latch_edge': Returns the latch edge of a loop.
   16895 
   16896    * `loop_preheader_edge': If loops have preheaders, returns the
   16897      preheader edge of a loop.
   16898 
   16899    * `flow_loop_nested_p': Tests whether loop is a sub-loop of another
   16900      loop.
   16901 
   16902    * `flow_bb_inside_loop_p': Tests whether a basic block belongs to a
   16903      loop (including its sub-loops).
   16904 
   16905    * `find_common_loop': Finds the common super-loop of two loops.
   16906 
   16907    * `superloop_at_depth': Returns the super-loop of a loop with the
   16908      given depth.
   16909 
   16910    * `tree_num_loop_insns', `num_loop_insns': Estimates the number of
   16911      insns in the loop, on GIMPLE and on RTL.
   16912 
   16913    * `loop_exit_edge_p': Tests whether edge is an exit from a loop.
   16914 
   16915    * `mark_loop_exit_edges': Marks all exit edges of all loops with
   16916      `EDGE_LOOP_EXIT' flag.
   16917 
   16918    * `get_loop_body', `get_loop_body_in_dom_order',
   16919      `get_loop_body_in_bfs_order': Enumerates the basic blocks in the
   16920      loop in depth-first search order in reversed CFG, ordered by
   16921      dominance relation, and breath-first search order, respectively.
   16922 
   16923    * `single_exit': Returns the single exit edge of the loop, or `NULL'
   16924      if the loop has more than one exit.  You can only use this
   16925      function if LOOPS_HAVE_MARKED_SINGLE_EXITS property is used.
   16926 
   16927    * `get_loop_exit_edges': Enumerates the exit edges of a loop.
   16928 
   16929    * `just_once_each_iteration_p': Returns true if the basic block is
   16930      executed exactly once during each iteration of a loop (that is, it
   16931      does not belong to a sub-loop, and it dominates the latch of the
   16932      loop).
   16933 
   16934 
   16935 File: gccint.info,  Node: Loop manipulation,  Next: LCSSA,  Prev: Loop querying,  Up: Loop Analysis and Representation
   16936 
   16937 14.3 Loop manipulation
   16938 ======================
   16939 
   16940 The loops tree can be manipulated using the following functions:
   16941 
   16942    * `flow_loop_tree_node_add': Adds a node to the tree.
   16943 
   16944    * `flow_loop_tree_node_remove': Removes a node from the tree.
   16945 
   16946    * `add_bb_to_loop': Adds a basic block to a loop.
   16947 
   16948    * `remove_bb_from_loops': Removes a basic block from loops.
   16949 
   16950  Most low-level CFG functions update loops automatically.  The following
   16951 functions handle some more complicated cases of CFG manipulations:
   16952 
   16953    * `remove_path': Removes an edge and all blocks it dominates.
   16954 
   16955    * `split_loop_exit_edge': Splits exit edge of the loop, ensuring
   16956      that PHI node arguments remain in the loop (this ensures that
   16957      loop-closed SSA form is preserved).  Only useful on GIMPLE.
   16958 
   16959  Finally, there are some higher-level loop transformations implemented.
   16960 While some of them are written so that they should work on non-innermost
   16961 loops, they are mostly untested in that case, and at the moment, they
   16962 are only reliable for the innermost loops:
   16963 
   16964    * `create_iv': Creates a new induction variable.  Only works on
   16965      GIMPLE.  `standard_iv_increment_position' can be used to find a
   16966      suitable place for the iv increment.
   16967 
   16968    * `duplicate_loop_to_header_edge',
   16969      `tree_duplicate_loop_to_header_edge': These functions (on RTL and
   16970      on GIMPLE) duplicate the body of the loop prescribed number of
   16971      times on one of the edges entering loop header, thus performing
   16972      either loop unrolling or loop peeling.  `can_duplicate_loop_p'
   16973      (`can_unroll_loop_p' on GIMPLE) must be true for the duplicated
   16974      loop.
   16975 
   16976    * `loop_version', `tree_ssa_loop_version': These function create a
   16977      copy of a loop, and a branch before them that selects one of them
   16978      depending on the prescribed condition.  This is useful for
   16979      optimizations that need to verify some assumptions in runtime (one
   16980      of the copies of the loop is usually left unchanged, while the
   16981      other one is transformed in some way).
   16982 
   16983    * `tree_unroll_loop': Unrolls the loop, including peeling the extra
   16984      iterations to make the number of iterations divisible by unroll
   16985      factor, updating the exit condition, and removing the exits that
   16986      now cannot be taken.  Works only on GIMPLE.
   16987 
   16988 
   16989 File: gccint.info,  Node: LCSSA,  Next: Scalar evolutions,  Prev: Loop manipulation,  Up: Loop Analysis and Representation
   16990 
   16991 14.4 Loop-closed SSA form
   16992 =========================
   16993 
   16994 Throughout the loop optimizations on tree level, one extra condition is
   16995 enforced on the SSA form:  No SSA name is used outside of the loop in
   16996 that it is defined.  The SSA form satisfying this condition is called
   16997 "loop-closed SSA form" - LCSSA.  To enforce LCSSA, PHI nodes must be
   16998 created at the exits of the loops for the SSA names that are used
   16999 outside of them.  Only the real operands (not virtual SSA names) are
   17000 held in LCSSA, in order to save memory.
   17001 
   17002  There are various benefits of LCSSA:
   17003 
   17004    * Many optimizations (value range analysis, final value replacement)
   17005      are interested in the values that are defined in the loop and used
   17006      outside of it, i.e., exactly those for that we create new PHI
   17007      nodes.
   17008 
   17009    * In induction variable analysis, it is not necessary to specify the
   17010      loop in that the analysis should be performed - the scalar
   17011      evolution analysis always returns the results with respect to the
   17012      loop in that the SSA name is defined.
   17013 
   17014    * It makes updating of SSA form during loop transformations simpler.
   17015      Without LCSSA, operations like loop unrolling may force creation
   17016      of PHI nodes arbitrarily far from the loop, while in LCSSA, the
   17017      SSA form can be updated locally.  However, since we only keep real
   17018      operands in LCSSA, we cannot use this advantage (we could have
   17019      local updating of real operands, but it is not much more efficient
   17020      than to use generic SSA form updating for it as well; the amount
   17021      of changes to SSA is the same).
   17022 
   17023  However, it also means LCSSA must be updated.  This is usually
   17024 straightforward, unless you create a new value in loop and use it
   17025 outside, or unless you manipulate loop exit edges (functions are
   17026 provided to make these manipulations simple).
   17027 `rewrite_into_loop_closed_ssa' is used to rewrite SSA form to LCSSA,
   17028 and `verify_loop_closed_ssa' to check that the invariant of LCSSA is
   17029 preserved.
   17030 
   17031 
   17032 File: gccint.info,  Node: Scalar evolutions,  Next: loop-iv,  Prev: LCSSA,  Up: Loop Analysis and Representation
   17033 
   17034 14.5 Scalar evolutions
   17035 ======================
   17036 
   17037 Scalar evolutions (SCEV) are used to represent results of induction
   17038 variable analysis on GIMPLE.  They enable us to represent variables with
   17039 complicated behavior in a simple and consistent way (we only use it to
   17040 express values of polynomial induction variables, but it is possible to
   17041 extend it).  The interfaces to SCEV analysis are declared in
   17042 `tree-scalar-evolution.h'.  To use scalar evolutions analysis,
   17043 `scev_initialize' must be used.  To stop using SCEV, `scev_finalize'
   17044 should be used.  SCEV analysis caches results in order to save time and
   17045 memory.  This cache however is made invalid by most of the loop
   17046 transformations, including removal of code.  If such a transformation
   17047 is performed, `scev_reset' must be called to clean the caches.
   17048 
   17049  Given an SSA name, its behavior in loops can be analyzed using the
   17050 `analyze_scalar_evolution' function.  The returned SCEV however does
   17051 not have to be fully analyzed and it may contain references to other
   17052 SSA names defined in the loop.  To resolve these (potentially
   17053 recursive) references, `instantiate_parameters' or `resolve_mixers'
   17054 functions must be used.  `instantiate_parameters' is useful when you
   17055 use the results of SCEV only for some analysis, and when you work with
   17056 whole nest of loops at once.  It will try replacing all SSA names by
   17057 their SCEV in all loops, including the super-loops of the current loop,
   17058 thus providing a complete information about the behavior of the
   17059 variable in the loop nest.  `resolve_mixers' is useful if you work with
   17060 only one loop at a time, and if you possibly need to create code based
   17061 on the value of the induction variable.  It will only resolve the SSA
   17062 names defined in the current loop, leaving the SSA names defined
   17063 outside unchanged, even if their evolution in the outer loops is known.
   17064 
   17065  The SCEV is a normal tree expression, except for the fact that it may
   17066 contain several special tree nodes.  One of them is `SCEV_NOT_KNOWN',
   17067 used for SSA names whose value cannot be expressed.  The other one is
   17068 `POLYNOMIAL_CHREC'.  Polynomial chrec has three arguments - base, step
   17069 and loop (both base and step may contain further polynomial chrecs).
   17070 Type of the expression and of base and step must be the same.  A
   17071 variable has evolution `POLYNOMIAL_CHREC(base, step, loop)' if it is
   17072 (in the specified loop) equivalent to `x_1' in the following example
   17073 
   17074      while (...)
   17075        {
   17076          x_1 = phi (base, x_2);
   17077          x_2 = x_1 + step;
   17078        }
   17079 
   17080  Note that this includes the language restrictions on the operations.
   17081 For example, if we compile C code and `x' has signed type, then the
   17082 overflow in addition would cause undefined behavior, and we may assume
   17083 that this does not happen.  Hence, the value with this SCEV cannot
   17084 overflow (which restricts the number of iterations of such a loop).
   17085 
   17086  In many cases, one wants to restrict the attention just to affine
   17087 induction variables.  In this case, the extra expressive power of SCEV
   17088 is not useful, and may complicate the optimizations.  In this case,
   17089 `simple_iv' function may be used to analyze a value - the result is a
   17090 loop-invariant base and step.
   17091 
   17092 
   17093 File: gccint.info,  Node: loop-iv,  Next: Number of iterations,  Prev: Scalar evolutions,  Up: Loop Analysis and Representation
   17094 
   17095 14.6 IV analysis on RTL
   17096 =======================
   17097 
   17098 The induction variable on RTL is simple and only allows analysis of
   17099 affine induction variables, and only in one loop at once.  The interface
   17100 is declared in `cfgloop.h'.  Before analyzing induction variables in a
   17101 loop L, `iv_analysis_loop_init' function must be called on L.  After
   17102 the analysis (possibly calling `iv_analysis_loop_init' for several
   17103 loops) is finished, `iv_analysis_done' should be called.  The following
   17104 functions can be used to access the results of the analysis:
   17105 
   17106    * `iv_analyze': Analyzes a single register used in the given insn.
   17107      If no use of the register in this insn is found, the following
   17108      insns are scanned, so that this function can be called on the insn
   17109      returned by get_condition.
   17110 
   17111    * `iv_analyze_result': Analyzes result of the assignment in the
   17112      given insn.
   17113 
   17114    * `iv_analyze_expr': Analyzes a more complicated expression.  All
   17115      its operands are analyzed by `iv_analyze', and hence they must be
   17116      used in the specified insn or one of the following insns.
   17117 
   17118  The description of the induction variable is provided in `struct
   17119 rtx_iv'.  In order to handle subregs, the representation is a bit
   17120 complicated; if the value of the `extend' field is not `UNKNOWN', the
   17121 value of the induction variable in the i-th iteration is
   17122 
   17123      delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)),
   17124 
   17125  with the following exception:  if `first_special' is true, then the
   17126 value in the first iteration (when `i' is zero) is `delta + mult *
   17127 base'.  However, if `extend' is equal to `UNKNOWN', then
   17128 `first_special' must be false, `delta' 0, `mult' 1 and the value in the
   17129 i-th iteration is
   17130 
   17131      subreg_{mode} (base + i * step)
   17132 
   17133  The function `get_iv_value' can be used to perform these calculations.
   17134 
   17135 
   17136 File: gccint.info,  Node: Number of iterations,  Next: Dependency analysis,  Prev: loop-iv,  Up: Loop Analysis and Representation
   17137 
   17138 14.7 Number of iterations analysis
   17139 ==================================
   17140 
   17141 Both on GIMPLE and on RTL, there are functions available to determine
   17142 the number of iterations of a loop, with a similar interface.  The
   17143 number of iterations of a loop in GCC is defined as the number of
   17144 executions of the loop latch.  In many cases, it is not possible to
   17145 determine the number of iterations unconditionally - the determined
   17146 number is correct only if some assumptions are satisfied.  The analysis
   17147 tries to verify these conditions using the information contained in the
   17148 program; if it fails, the conditions are returned together with the
   17149 result.  The following information and conditions are provided by the
   17150 analysis:
   17151 
   17152    * `assumptions': If this condition is false, the rest of the
   17153      information is invalid.
   17154 
   17155    * `noloop_assumptions' on RTL, `may_be_zero' on GIMPLE: If this
   17156      condition is true, the loop exits in the first iteration.
   17157 
   17158    * `infinite': If this condition is true, the loop is infinite.  This
   17159      condition is only available on RTL.  On GIMPLE, conditions for
   17160      finiteness of the loop are included in `assumptions'.
   17161 
   17162    * `niter_expr' on RTL, `niter' on GIMPLE: The expression that gives
   17163      number of iterations.  The number of iterations is defined as the
   17164      number of executions of the loop latch.
   17165 
   17166  Both on GIMPLE and on RTL, it necessary for the induction variable
   17167 analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL).
   17168 On GIMPLE, the results are stored to `struct tree_niter_desc'
   17169 structure.  Number of iterations before the loop is exited through a
   17170 given exit can be determined using `number_of_iterations_exit'
   17171 function.  On RTL, the results are returned in `struct niter_desc'
   17172 structure.  The corresponding function is named `check_simple_exit'.
   17173 There are also functions that pass through all the exits of a loop and
   17174 try to find one with easy to determine number of iterations -
   17175 `find_loop_niter' on GIMPLE and `find_simple_exit' on RTL.  Finally,
   17176 there are functions that provide the same information, but additionally
   17177 cache it, so that repeated calls to number of iterations are not so
   17178 costly - `number_of_latch_executions' on GIMPLE and
   17179 `get_simple_loop_desc' on RTL.
   17180 
   17181  Note that some of these functions may behave slightly differently than
   17182 others - some of them return only the expression for the number of
   17183 iterations, and fail if there are some assumptions.  The function
   17184 `number_of_latch_executions' works only for single-exit loops.  The
   17185 function `number_of_cond_exit_executions' can be used to determine
   17186 number of executions of the exit condition of a single-exit loop (i.e.,
   17187 the `number_of_latch_executions' increased by one).
   17188 
   17189 
   17190 File: gccint.info,  Node: Dependency analysis,  Next: Lambda,  Prev: Number of iterations,  Up: Loop Analysis and Representation
   17191 
   17192 14.8 Data Dependency Analysis
   17193 =============================
   17194 
   17195 The code for the data dependence analysis can be found in
   17196 `tree-data-ref.c' and its interface and data structures are described
   17197 in `tree-data-ref.h'.  The function that computes the data dependences
   17198 for all the array and pointer references for a given loop is
   17199 `compute_data_dependences_for_loop'.  This function is currently used
   17200 by the linear loop transform and the vectorization passes.  Before
   17201 calling this function, one has to allocate two vectors: a first vector
   17202 will contain the set of data references that are contained in the
   17203 analyzed loop body, and the second vector will contain the dependence
   17204 relations between the data references.  Thus if the vector of data
   17205 references is of size `n', the vector containing the dependence
   17206 relations will contain `n*n' elements.  However if the analyzed loop
   17207 contains side effects, such as calls that potentially can interfere
   17208 with the data references in the current analyzed loop, the analysis
   17209 stops while scanning the loop body for data references, and inserts a
   17210 single `chrec_dont_know' in the dependence relation array.
   17211 
   17212  The data references are discovered in a particular order during the
   17213 scanning of the loop body: the loop body is analyzed in execution order,
   17214 and the data references of each statement are pushed at the end of the
   17215 data reference array.  Two data references syntactically occur in the
   17216 program in the same order as in the array of data references.  This
   17217 syntactic order is important in some classical data dependence tests,
   17218 and mapping this order to the elements of this array avoids costly
   17219 queries to the loop body representation.
   17220 
   17221  Three types of data references are currently handled: ARRAY_REF,
   17222 INDIRECT_REF and COMPONENT_REF. The data structure for the data
   17223 reference is `data_reference', where `data_reference_p' is a name of a
   17224 pointer to the data reference structure. The structure contains the
   17225 following elements:
   17226 
   17227    * `base_object_info': Provides information about the base object of
   17228      the data reference and its access functions. These access functions
   17229      represent the evolution of the data reference in the loop relative
   17230      to its base, in keeping with the classical meaning of the data
   17231      reference access function for the support of arrays. For example,
   17232      for a reference `a.b[i][j]', the base object is `a.b' and the
   17233      access functions, one for each array subscript, are: `{i_init, +
   17234      i_step}_1, {j_init, +, j_step}_2'.
   17235 
   17236    * `first_location_in_loop': Provides information about the first
   17237      location accessed by the data reference in the loop and about the
   17238      access function used to represent evolution relative to this
   17239      location. This data is used to support pointers, and is not used
   17240      for arrays (for which we have base objects). Pointer accesses are
   17241      represented as a one-dimensional access that starts from the first
   17242      location accessed in the loop. For example:
   17243 
   17244                 for1 i
   17245                    for2 j
   17246                     *((int *)p + i + j) = a[i][j];
   17247 
   17248      The access function of the pointer access is `{0, + 4B}_for2'
   17249      relative to `p + i'. The access functions of the array are
   17250      `{i_init, + i_step}_for1' and `{j_init, +, j_step}_for2' relative
   17251      to `a'.
   17252 
   17253      Usually, the object the pointer refers to is either unknown, or we
   17254      can't prove that the access is confined to the boundaries of a
   17255      certain object.
   17256 
   17257      Two data references can be compared only if at least one of these
   17258      two representations has all its fields filled for both data
   17259      references.
   17260 
   17261      The current strategy for data dependence tests is as follows: If
   17262      both `a' and `b' are represented as arrays, compare
   17263      `a.base_object' and `b.base_object'; if they are equal, apply
   17264      dependence tests (use access functions based on base_objects).
   17265      Else if both `a' and `b' are represented as pointers, compare
   17266      `a.first_location' and `b.first_location'; if they are equal,
   17267      apply dependence tests (use access functions based on first
   17268      location).  However, if `a' and `b' are represented differently,
   17269      only try to prove that the bases are definitely different.
   17270 
   17271    * Aliasing information.
   17272 
   17273    * Alignment information.
   17274 
   17275  The structure describing the relation between two data references is
   17276 `data_dependence_relation' and the shorter name for a pointer to such a
   17277 structure is `ddr_p'.  This structure contains:
   17278 
   17279    * a pointer to each data reference,
   17280 
   17281    * a tree node `are_dependent' that is set to `chrec_known' if the
   17282      analysis has proved that there is no dependence between these two
   17283      data references, `chrec_dont_know' if the analysis was not able to
   17284      determine any useful result and potentially there could exist a
   17285      dependence between these data references, and `are_dependent' is
   17286      set to `NULL_TREE' if there exist a dependence relation between the
   17287      data references, and the description of this dependence relation is
   17288      given in the `subscripts', `dir_vects', and `dist_vects' arrays,
   17289 
   17290    * a boolean that determines whether the dependence relation can be
   17291      represented by a classical distance vector,
   17292 
   17293    * an array `subscripts' that contains a description of each
   17294      subscript of the data references.  Given two array accesses a
   17295      subscript is the tuple composed of the access functions for a given
   17296      dimension.  For example, given `A[f1][f2][f3]' and
   17297      `B[g1][g2][g3]', there are three subscripts: `(f1, g1), (f2, g2),
   17298      (f3, g3)'.
   17299 
   17300    * two arrays `dir_vects' and `dist_vects' that contain classical
   17301      representations of the data dependences under the form of
   17302      direction and distance dependence vectors,
   17303 
   17304    * an array of loops `loop_nest' that contains the loops to which the
   17305      distance and direction vectors refer to.
   17306 
   17307  Several functions for pretty printing the information extracted by the
   17308 data dependence analysis are available: `dump_ddrs' prints with a
   17309 maximum verbosity the details of a data dependence relations array,
   17310 `dump_dist_dir_vectors' prints only the classical distance and
   17311 direction vectors for a data dependence relations array, and
   17312 `dump_data_references' prints the details of the data references
   17313 contained in a data reference array.
   17314 
   17315 
   17316 File: gccint.info,  Node: Lambda,  Next: Omega,  Prev: Dependency analysis,  Up: Loop Analysis and Representation
   17317 
   17318 14.9 Linear loop transformations framework
   17319 ==========================================
   17320 
   17321 Lambda is a framework that allows transformations of loops using
   17322 non-singular matrix based transformations of the iteration space and
   17323 loop bounds. This allows compositions of skewing, scaling, interchange,
   17324 and reversal transformations.  These transformations are often used to
   17325 improve cache behavior or remove inner loop dependencies to allow
   17326 parallelization and vectorization to take place.
   17327 
   17328  To perform these transformations, Lambda requires that the loopnest be
   17329 converted into an internal form that can be matrix transformed easily.
   17330 To do this conversion, the function `gcc_loopnest_to_lambda_loopnest'
   17331 is provided.  If the loop cannot be transformed using lambda, this
   17332 function will return NULL.
   17333 
   17334  Once a `lambda_loopnest' is obtained from the conversion function, it
   17335 can be transformed by using `lambda_loopnest_transform', which takes a
   17336 transformation matrix to apply.  Note that it is up to the caller to
   17337 verify that the transformation matrix is legal to apply to the loop
   17338 (dependence respecting, etc).  Lambda simply applies whatever matrix it
   17339 is told to provide.  It can be extended to make legal matrices out of
   17340 any non-singular matrix, but this is not currently implemented.
   17341 Legality of a matrix for a given loopnest can be verified using
   17342 `lambda_transform_legal_p'.
   17343 
   17344  Given a transformed loopnest, conversion back into gcc IR is done by
   17345 `lambda_loopnest_to_gcc_loopnest'.  This function will modify the loops
   17346 so that they match the transformed loopnest.
   17347 
   17348 
   17349 File: gccint.info,  Node: Omega,  Prev: Lambda,  Up: Loop Analysis and Representation
   17350 
   17351 14.10 Omega a solver for linear programming problems
   17352 ====================================================
   17353 
   17354 The data dependence analysis contains several solvers triggered
   17355 sequentially from the less complex ones to the more sophisticated.  For
   17356 ensuring the consistency of the results of these solvers, a data
   17357 dependence check pass has been implemented based on two different
   17358 solvers.  The second method that has been integrated to GCC is based on
   17359 the Omega dependence solver, written in the 1990's by William Pugh and
   17360 David Wonnacott.  Data dependence tests can be formulated using a
   17361 subset of the Presburger arithmetics that can be translated to linear
   17362 constraint systems.  These linear constraint systems can then be solved
   17363 using the Omega solver.
   17364 
   17365  The Omega solver is using Fourier-Motzkin's algorithm for variable
   17366 elimination: a linear constraint system containing `n' variables is
   17367 reduced to a linear constraint system with `n-1' variables.  The Omega
   17368 solver can also be used for solving other problems that can be
   17369 expressed under the form of a system of linear equalities and
   17370 inequalities.  The Omega solver is known to have an exponential worst
   17371 case, also known under the name of "omega nightmare" in the literature,
   17372 but in practice, the omega test is known to be efficient for the common
   17373 data dependence tests.
   17374 
   17375  The interface used by the Omega solver for describing the linear
   17376 programming problems is described in `omega.h', and the solver is
   17377 `omega_solve_problem'.
   17378 
   17379 
   17380 File: gccint.info,  Node: Control Flow,  Next: Loop Analysis and Representation,  Prev: RTL,  Up: Top
   17381 
   17382 15 Control Flow Graph
   17383 *********************
   17384 
   17385 A control flow graph (CFG) is a data structure built on top of the
   17386 intermediate code representation (the RTL or `tree' instruction stream)
   17387 abstracting the control flow behavior of a function that is being
   17388 compiled.  The CFG is a directed graph where the vertices represent
   17389 basic blocks and edges represent possible transfer of control flow from
   17390 one basic block to another.  The data structures used to represent the
   17391 control flow graph are defined in `basic-block.h'.
   17392 
   17393 * Menu:
   17394 
   17395 * Basic Blocks::           The definition and representation of basic blocks.
   17396 * Edges::                  Types of edges and their representation.
   17397 * Profile information::    Representation of frequencies and probabilities.
   17398 * Maintaining the CFG::    Keeping the control flow graph and up to date.
   17399 * Liveness information::   Using and maintaining liveness information.
   17400 
   17401 
   17402 File: gccint.info,  Node: Basic Blocks,  Next: Edges,  Up: Control Flow
   17403 
   17404 15.1 Basic Blocks
   17405 =================
   17406 
   17407 A basic block is a straight-line sequence of code with only one entry
   17408 point and only one exit.  In GCC, basic blocks are represented using
   17409 the `basic_block' data type.
   17410 
   17411  Two pointer members of the `basic_block' structure are the pointers
   17412 `next_bb' and `prev_bb'.  These are used to keep doubly linked chain of
   17413 basic blocks in the same order as the underlying instruction stream.
   17414 The chain of basic blocks is updated transparently by the provided API
   17415 for manipulating the CFG.  The macro `FOR_EACH_BB' can be used to visit
   17416 all the basic blocks in lexicographical order.  Dominator traversals
   17417 are also possible using `walk_dominator_tree'.  Given two basic blocks
   17418 A and B, block A dominates block B if A is _always_ executed before B.
   17419 
   17420  The `BASIC_BLOCK' array contains all basic blocks in an unspecified
   17421 order.  Each `basic_block' structure has a field that holds a unique
   17422 integer identifier `index' that is the index of the block in the
   17423 `BASIC_BLOCK' array.  The total number of basic blocks in the function
   17424 is `n_basic_blocks'.  Both the basic block indices and the total number
   17425 of basic blocks may vary during the compilation process, as passes
   17426 reorder, create, duplicate, and destroy basic blocks.  The index for
   17427 any block should never be greater than `last_basic_block'.
   17428 
   17429  Special basic blocks represent possible entry and exit points of a
   17430 function.  These blocks are called `ENTRY_BLOCK_PTR' and
   17431 `EXIT_BLOCK_PTR'.  These blocks do not contain any code, and are not
   17432 elements of the `BASIC_BLOCK' array.  Therefore they have been assigned
   17433 unique, negative index numbers.
   17434 
   17435  Each `basic_block' also contains pointers to the first instruction
   17436 (the "head") and the last instruction (the "tail") or "end" of the
   17437 instruction stream contained in a basic block.  In fact, since the
   17438 `basic_block' data type is used to represent blocks in both major
   17439 intermediate representations of GCC (`tree' and RTL), there are
   17440 pointers to the head and end of a basic block for both representations.
   17441 
   17442  For RTL, these pointers are `rtx head, end'.  In the RTL function
   17443 representation, the head pointer always points either to a
   17444 `NOTE_INSN_BASIC_BLOCK' or to a `CODE_LABEL', if present.  In the RTL
   17445 representation of a function, the instruction stream contains not only
   17446 the "real" instructions, but also "notes".  Any function that moves or
   17447 duplicates the basic blocks needs to take care of updating of these
   17448 notes.  Many of these notes expect that the instruction stream consists
   17449 of linear regions, making such updates difficult.   The
   17450 `NOTE_INSN_BASIC_BLOCK' note is the only kind of note that may appear
   17451 in the instruction stream contained in a basic block.  The instruction
   17452 stream of a basic block always follows a `NOTE_INSN_BASIC_BLOCK',  but
   17453 zero or more `CODE_LABEL' nodes can precede the block note.   A basic
   17454 block ends by control flow instruction or last instruction before
   17455 following `CODE_LABEL' or `NOTE_INSN_BASIC_BLOCK'.  A `CODE_LABEL'
   17456 cannot appear in the instruction stream of a basic block.
   17457 
   17458  In addition to notes, the jump table vectors are also represented as
   17459 "pseudo-instructions" inside the insn stream.  These vectors never
   17460 appear in the basic block and should always be placed just after the
   17461 table jump instructions referencing them.  After removing the
   17462 table-jump it is often difficult to eliminate the code computing the
   17463 address and referencing the vector, so cleaning up these vectors is
   17464 postponed until after liveness analysis.   Thus the jump table vectors
   17465 may appear in the insn stream unreferenced and without any purpose.
   17466 Before any edge is made "fall-thru", the existence of such construct in
   17467 the way needs to be checked by calling `can_fallthru' function.
   17468 
   17469  For the `tree' representation, the head and end of the basic block are
   17470 being pointed to by the `stmt_list' field, but this special `tree'
   17471 should never be referenced directly.  Instead, at the tree level
   17472 abstract containers and iterators are used to access statements and
   17473 expressions in basic blocks.  These iterators are called "block
   17474 statement iterators" (BSIs).  Grep for `^bsi' in the various `tree-*'
   17475 files.  The following snippet will pretty-print all the statements of
   17476 the program in the GIMPLE representation.
   17477 
   17478      FOR_EACH_BB (bb)
   17479        {
   17480           block_stmt_iterator si;
   17481 
   17482           for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
   17483             {
   17484                tree stmt = bsi_stmt (si);
   17485                print_generic_stmt (stderr, stmt, 0);
   17486             }
   17487        }
   17488 
   17489 
   17490 File: gccint.info,  Node: Edges,  Next: Profile information,  Prev: Basic Blocks,  Up: Control Flow
   17491 
   17492 15.2 Edges
   17493 ==========
   17494 
   17495 Edges represent possible control flow transfers from the end of some
   17496 basic block A to the head of another basic block B.  We say that A is a
   17497 predecessor of B, and B is a successor of A.  Edges are represented in
   17498 GCC with the `edge' data type.  Each `edge' acts as a link between two
   17499 basic blocks: the `src' member of an edge points to the predecessor
   17500 basic block of the `dest' basic block.  The members `preds' and `succs'
   17501 of the `basic_block' data type point to type-safe vectors of edges to
   17502 the predecessors and successors of the block.
   17503 
   17504  When walking the edges in an edge vector, "edge iterators" should be
   17505 used.  Edge iterators are constructed using the `edge_iterator' data
   17506 structure and several methods are available to operate on them:
   17507 
   17508 `ei_start'
   17509      This function initializes an `edge_iterator' that points to the
   17510      first edge in a vector of edges.
   17511 
   17512 `ei_last'
   17513      This function initializes an `edge_iterator' that points to the
   17514      last edge in a vector of edges.
   17515 
   17516 `ei_end_p'
   17517      This predicate is `true' if an `edge_iterator' represents the last
   17518      edge in an edge vector.
   17519 
   17520 `ei_one_before_end_p'
   17521      This predicate is `true' if an `edge_iterator' represents the
   17522      second last edge in an edge vector.
   17523 
   17524 `ei_next'
   17525      This function takes a pointer to an `edge_iterator' and makes it
   17526      point to the next edge in the sequence.
   17527 
   17528 `ei_prev'
   17529      This function takes a pointer to an `edge_iterator' and makes it
   17530      point to the previous edge in the sequence.
   17531 
   17532 `ei_edge'
   17533      This function returns the `edge' currently pointed to by an
   17534      `edge_iterator'.
   17535 
   17536 `ei_safe_safe'
   17537      This function returns the `edge' currently pointed to by an
   17538      `edge_iterator', but returns `NULL' if the iterator is pointing at
   17539      the end of the sequence.  This function has been provided for
   17540      existing code makes the assumption that a `NULL' edge indicates
   17541      the end of the sequence.
   17542 
   17543 
   17544  The convenience macro `FOR_EACH_EDGE' can be used to visit all of the
   17545 edges in a sequence of predecessor or successor edges.  It must not be
   17546 used when an element might be removed during the traversal, otherwise
   17547 elements will be missed.  Here is an example of how to use the macro:
   17548 
   17549      edge e;
   17550      edge_iterator ei;
   17551 
   17552      FOR_EACH_EDGE (e, ei, bb->succs)
   17553        {
   17554           if (e->flags & EDGE_FALLTHRU)
   17555             break;
   17556        }
   17557 
   17558  There are various reasons why control flow may transfer from one block
   17559 to another.  One possibility is that some instruction, for example a
   17560 `CODE_LABEL', in a linearized instruction stream just always starts a
   17561 new basic block.  In this case a "fall-thru" edge links the basic block
   17562 to the first following basic block.  But there are several other
   17563 reasons why edges may be created.  The `flags' field of the `edge' data
   17564 type is used to store information about the type of edge we are dealing
   17565 with.  Each edge is of one of the following types:
   17566 
   17567 _jump_
   17568      No type flags are set for edges corresponding to jump instructions.
   17569      These edges are used for unconditional or conditional jumps and in
   17570      RTL also for table jumps.  They are the easiest to manipulate as
   17571      they may be freely redirected when the flow graph is not in SSA
   17572      form.
   17573 
   17574 _fall-thru_
   17575      Fall-thru edges are present in case where the basic block may
   17576      continue execution to the following one without branching.  These
   17577      edges have the `EDGE_FALLTHRU' flag set.  Unlike other types of
   17578      edges, these edges must come into the basic block immediately
   17579      following in the instruction stream.  The function
   17580      `force_nonfallthru' is available to insert an unconditional jump
   17581      in the case that redirection is needed.  Note that this may
   17582      require creation of a new basic block.
   17583 
   17584 _exception handling_
   17585      Exception handling edges represent possible control transfers from
   17586      a trapping instruction to an exception handler.  The definition of
   17587      "trapping" varies.  In C++, only function calls can throw, but for
   17588      Java, exceptions like division by zero or segmentation fault are
   17589      defined and thus each instruction possibly throwing this kind of
   17590      exception needs to be handled as control flow instruction.
   17591      Exception edges have the `EDGE_ABNORMAL' and `EDGE_EH' flags set.
   17592 
   17593      When updating the instruction stream it is easy to change possibly
   17594      trapping instruction to non-trapping, by simply removing the
   17595      exception edge.  The opposite conversion is difficult, but should
   17596      not happen anyway.  The edges can be eliminated via
   17597      `purge_dead_edges' call.
   17598 
   17599      In the RTL representation, the destination of an exception edge is
   17600      specified by `REG_EH_REGION' note attached to the insn.  In case
   17601      of a trapping call the `EDGE_ABNORMAL_CALL' flag is set too.  In
   17602      the `tree' representation, this extra flag is not set.
   17603 
   17604      In the RTL representation, the predicate `may_trap_p' may be used
   17605      to check whether instruction still may trap or not.  For the tree
   17606      representation, the `tree_could_trap_p' predicate is available,
   17607      but this predicate only checks for possible memory traps, as in
   17608      dereferencing an invalid pointer location.
   17609 
   17610 _sibling calls_
   17611      Sibling calls or tail calls terminate the function in a
   17612      non-standard way and thus an edge to the exit must be present.
   17613      `EDGE_SIBCALL' and `EDGE_ABNORMAL' are set in such case.  These
   17614      edges only exist in the RTL representation.
   17615 
   17616 _computed jumps_
   17617      Computed jumps contain edges to all labels in the function
   17618      referenced from the code.  All those edges have `EDGE_ABNORMAL'
   17619      flag set.  The edges used to represent computed jumps often cause
   17620      compile time performance problems, since functions consisting of
   17621      many taken labels and many computed jumps may have _very_ dense
   17622      flow graphs, so these edges need to be handled with special care.
   17623      During the earlier stages of the compilation process, GCC tries to
   17624      avoid such dense flow graphs by factoring computed jumps.  For
   17625      example, given the following series of jumps,
   17626 
   17627             goto *x;
   17628             [ ... ]
   17629 
   17630             goto *x;
   17631             [ ... ]
   17632 
   17633             goto *x;
   17634             [ ... ]
   17635 
   17636      factoring the computed jumps results in the following code sequence
   17637      which has a much simpler flow graph:
   17638 
   17639             goto y;
   17640             [ ... ]
   17641 
   17642             goto y;
   17643             [ ... ]
   17644 
   17645             goto y;
   17646             [ ... ]
   17647 
   17648           y:
   17649             goto *x;
   17650 
   17651      However, the classic problem with this transformation is that it
   17652      has a runtime cost in there resulting code: An extra jump.
   17653      Therefore, the computed jumps are un-factored in the later passes
   17654      of the compiler.  Be aware of that when you work on passes in that
   17655      area.  There have been numerous examples already where the compile
   17656      time for code with unfactored computed jumps caused some serious
   17657      headaches.
   17658 
   17659 _nonlocal goto handlers_
   17660      GCC allows nested functions to return into caller using a `goto'
   17661      to a label passed to as an argument to the callee.  The labels
   17662      passed to nested functions contain special code to cleanup after
   17663      function call.  Such sections of code are referred to as "nonlocal
   17664      goto receivers".  If a function contains such nonlocal goto
   17665      receivers, an edge from the call to the label is created with the
   17666      `EDGE_ABNORMAL' and `EDGE_ABNORMAL_CALL' flags set.
   17667 
   17668 _function entry points_
   17669      By definition, execution of function starts at basic block 0, so
   17670      there is always an edge from the `ENTRY_BLOCK_PTR' to basic block
   17671      0.  There is no `tree' representation for alternate entry points at
   17672      this moment.  In RTL, alternate entry points are specified by
   17673      `CODE_LABEL' with `LABEL_ALTERNATE_NAME' defined.  This feature is
   17674      currently used for multiple entry point prologues and is limited
   17675      to post-reload passes only.  This can be used by back-ends to emit
   17676      alternate prologues for functions called from different contexts.
   17677      In future full support for multiple entry functions defined by
   17678      Fortran 90 needs to be implemented.
   17679 
   17680 _function exits_
   17681      In the pre-reload representation a function terminates after the
   17682      last instruction in the insn chain and no explicit return
   17683      instructions are used.  This corresponds to the fall-thru edge
   17684      into exit block.  After reload, optimal RTL epilogues are used
   17685      that use explicit (conditional) return instructions that are
   17686      represented by edges with no flags set.
   17687 
   17688 
   17689 
   17690 File: gccint.info,  Node: Profile information,  Next: Maintaining the CFG,  Prev: Edges,  Up: Control Flow
   17691 
   17692 15.3 Profile information
   17693 ========================
   17694 
   17695 In many cases a compiler must make a choice whether to trade speed in
   17696 one part of code for speed in another, or to trade code size for code
   17697 speed.  In such cases it is useful to know information about how often
   17698 some given block will be executed.  That is the purpose for maintaining
   17699 profile within the flow graph.  GCC can handle profile information
   17700 obtained through "profile feedback", but it can also  estimate branch
   17701 probabilities based on statics and heuristics.
   17702 
   17703  The feedback based profile is produced by compiling the program with
   17704 instrumentation, executing it on a train run and reading the numbers of
   17705 executions of basic blocks and edges back to the compiler while
   17706 re-compiling the program to produce the final executable.  This method
   17707 provides very accurate information about where a program spends most of
   17708 its time on the train run.  Whether it matches the average run of
   17709 course depends on the choice of train data set, but several studies
   17710 have shown that the behavior of a program usually changes just
   17711 marginally over different data sets.
   17712 
   17713  When profile feedback is not available, the compiler may be asked to
   17714 attempt to predict the behavior of each branch in the program using a
   17715 set of heuristics (see `predict.def' for details) and compute estimated
   17716 frequencies of each basic block by propagating the probabilities over
   17717 the graph.
   17718 
   17719  Each `basic_block' contains two integer fields to represent profile
   17720 information: `frequency' and `count'.  The `frequency' is an estimation
   17721 how often is basic block executed within a function.  It is represented
   17722 as an integer scaled in the range from 0 to `BB_FREQ_BASE'.  The most
   17723 frequently executed basic block in function is initially set to
   17724 `BB_FREQ_BASE' and the rest of frequencies are scaled accordingly.
   17725 During optimization, the frequency of the most frequent basic block can
   17726 both decrease (for instance by loop unrolling) or grow (for instance by
   17727 cross-jumping optimization), so scaling sometimes has to be performed
   17728 multiple times.
   17729 
   17730  The `count' contains hard-counted numbers of execution measured during
   17731 training runs and is nonzero only when profile feedback is available.
   17732 This value is represented as the host's widest integer (typically a 64
   17733 bit integer) of the special type `gcov_type'.
   17734 
   17735  Most optimization passes can use only the frequency information of a
   17736 basic block, but a few passes may want to know hard execution counts.
   17737 The frequencies should always match the counts after scaling, however
   17738 during updating of the profile information numerical error may
   17739 accumulate into quite large errors.
   17740 
   17741  Each edge also contains a branch probability field: an integer in the
   17742 range from 0 to `REG_BR_PROB_BASE'.  It represents probability of
   17743 passing control from the end of the `src' basic block to the `dest'
   17744 basic block, i.e. the probability that control will flow along this
   17745 edge.   The `EDGE_FREQUENCY' macro is available to compute how
   17746 frequently a given edge is taken.  There is a `count' field for each
   17747 edge as well, representing same information as for a basic block.
   17748 
   17749  The basic block frequencies are not represented in the instruction
   17750 stream, but in the RTL representation the edge frequencies are
   17751 represented for conditional jumps (via the `REG_BR_PROB' macro) since
   17752 they are used when instructions are output to the assembly file and the
   17753 flow graph is no longer maintained.
   17754 
   17755  The probability that control flow arrives via a given edge to its
   17756 destination basic block is called "reverse probability" and is not
   17757 directly represented, but it may be easily computed from frequencies of
   17758 basic blocks.
   17759 
   17760  Updating profile information is a delicate task that can unfortunately
   17761 not be easily integrated with the CFG manipulation API.  Many of the
   17762 functions and hooks to modify the CFG, such as
   17763 `redirect_edge_and_branch', do not have enough information to easily
   17764 update the profile, so updating it is in the majority of cases left up
   17765 to the caller.  It is difficult to uncover bugs in the profile updating
   17766 code, because they manifest themselves only by producing worse code,
   17767 and checking profile consistency is not possible because of numeric
   17768 error accumulation.  Hence special attention needs to be given to this
   17769 issue in each pass that modifies the CFG.
   17770 
   17771  It is important to point out that `REG_BR_PROB_BASE' and
   17772 `BB_FREQ_BASE' are both set low enough to be possible to compute second
   17773 power of any frequency or probability in the flow graph, it is not
   17774 possible to even square the `count' field, as modern CPUs are fast
   17775 enough to execute $2^32$ operations quickly.
   17776 
   17777 
   17778 File: gccint.info,  Node: Maintaining the CFG,  Next: Liveness information,  Prev: Profile information,  Up: Control Flow
   17779 
   17780 15.4 Maintaining the CFG
   17781 ========================
   17782 
   17783 An important task of each compiler pass is to keep both the control
   17784 flow graph and all profile information up-to-date.  Reconstruction of
   17785 the control flow graph after each pass is not an option, since it may be
   17786 very expensive and lost profile information cannot be reconstructed at
   17787 all.
   17788 
   17789  GCC has two major intermediate representations, and both use the
   17790 `basic_block' and `edge' data types to represent control flow.  Both
   17791 representations share as much of the CFG maintenance code as possible.
   17792 For each representation, a set of "hooks" is defined so that each
   17793 representation can provide its own implementation of CFG manipulation
   17794 routines when necessary.  These hooks are defined in `cfghooks.h'.
   17795 There are hooks for almost all common CFG manipulations, including
   17796 block splitting and merging, edge redirection and creating and deleting
   17797 basic blocks.  These hooks should provide everything you need to
   17798 maintain and manipulate the CFG in both the RTL and `tree'
   17799 representation.
   17800 
   17801  At the moment, the basic block boundaries are maintained transparently
   17802 when modifying instructions, so there rarely is a need to move them
   17803 manually (such as in case someone wants to output instruction outside
   17804 basic block explicitly).  Often the CFG may be better viewed as
   17805 integral part of instruction chain, than structure built on the top of
   17806 it.  However, in principle the control flow graph for the `tree'
   17807 representation is _not_ an integral part of the representation, in that
   17808 a function tree may be expanded without first building a  flow graph
   17809 for the `tree' representation at all.  This happens when compiling
   17810 without any `tree' optimization enabled.  When the `tree' optimizations
   17811 are enabled and the instruction stream is rewritten in SSA form, the
   17812 CFG is very tightly coupled with the instruction stream.  In
   17813 particular, statement insertion and removal has to be done with care.
   17814 In fact, the whole `tree' representation can not be easily used or
   17815 maintained without proper maintenance of the CFG simultaneously.
   17816 
   17817  In the RTL representation, each instruction has a `BLOCK_FOR_INSN'
   17818 value that represents pointer to the basic block that contains the
   17819 instruction.  In the `tree' representation, the function `bb_for_stmt'
   17820 returns a pointer to the basic block containing the queried statement.
   17821 
   17822  When changes need to be applied to a function in its `tree'
   17823 representation, "block statement iterators" should be used.  These
   17824 iterators provide an integrated abstraction of the flow graph and the
   17825 instruction stream.  Block statement iterators are constructed using
   17826 the `block_stmt_iterator' data structure and several modifier are
   17827 available, including the following:
   17828 
   17829 `bsi_start'
   17830      This function initializes a `block_stmt_iterator' that points to
   17831      the first non-empty statement in a basic block.
   17832 
   17833 `bsi_last'
   17834      This function initializes a `block_stmt_iterator' that points to
   17835      the last statement in a basic block.
   17836 
   17837 `bsi_end_p'
   17838      This predicate is `true' if a `block_stmt_iterator' represents the
   17839      end of a basic block.
   17840 
   17841 `bsi_next'
   17842      This function takes a `block_stmt_iterator' and makes it point to
   17843      its successor.
   17844 
   17845 `bsi_prev'
   17846      This function takes a `block_stmt_iterator' and makes it point to
   17847      its predecessor.
   17848 
   17849 `bsi_insert_after'
   17850      This function inserts a statement after the `block_stmt_iterator'
   17851      passed in.  The final parameter determines whether the statement
   17852      iterator is updated to point to the newly inserted statement, or
   17853      left pointing to the original statement.
   17854 
   17855 `bsi_insert_before'
   17856      This function inserts a statement before the `block_stmt_iterator'
   17857      passed in.  The final parameter determines whether the statement
   17858      iterator is updated to point to the newly inserted statement, or
   17859      left pointing to the original  statement.
   17860 
   17861 `bsi_remove'
   17862      This function removes the `block_stmt_iterator' passed in and
   17863      rechains the remaining statements in a basic block, if any.
   17864 
   17865  In the RTL representation, the macros `BB_HEAD' and `BB_END' may be
   17866 used to get the head and end `rtx' of a basic block.  No abstract
   17867 iterators are defined for traversing the insn chain, but you can just
   17868 use `NEXT_INSN' and `PREV_INSN' instead.  *Note Insns::.
   17869 
   17870  Usually a code manipulating pass simplifies the instruction stream and
   17871 the flow of control, possibly eliminating some edges.  This may for
   17872 example happen when a conditional jump is replaced with an
   17873 unconditional jump, but also when simplifying possibly trapping
   17874 instruction to non-trapping while compiling Java.  Updating of edges is
   17875 not transparent and each optimization pass is required to do so
   17876 manually.  However only few cases occur in practice.  The pass may call
   17877 `purge_dead_edges' on a given basic block to remove superfluous edges,
   17878 if any.
   17879 
   17880  Another common scenario is redirection of branch instructions, but
   17881 this is best modeled as redirection of edges in the control flow graph
   17882 and thus use of `redirect_edge_and_branch' is preferred over more low
   17883 level functions, such as `redirect_jump' that operate on RTL chain
   17884 only.  The CFG hooks defined in `cfghooks.h' should provide the
   17885 complete API required for manipulating and maintaining the CFG.
   17886 
   17887  It is also possible that a pass has to insert control flow instruction
   17888 into the middle of a basic block, thus creating an entry point in the
   17889 middle of the basic block, which is impossible by definition: The block
   17890 must be split to make sure it only has one entry point, i.e. the head
   17891 of the basic block.  The CFG hook `split_block' may be used when an
   17892 instruction in the middle of a basic block has to become the target of
   17893 a jump or branch instruction.
   17894 
   17895  For a global optimizer, a common operation is to split edges in the
   17896 flow graph and insert instructions on them.  In the RTL representation,
   17897 this can be easily done using the `insert_insn_on_edge' function that
   17898 emits an instruction "on the edge", caching it for a later
   17899 `commit_edge_insertions' call that will take care of moving the
   17900 inserted instructions off the edge into the instruction stream
   17901 contained in a basic block.  This includes the creation of new basic
   17902 blocks where needed.  In the `tree' representation, the equivalent
   17903 functions are `bsi_insert_on_edge' which inserts a block statement
   17904 iterator on an edge, and `bsi_commit_edge_inserts' which flushes the
   17905 instruction to actual instruction stream.
   17906 
   17907  While debugging the optimization pass, a `verify_flow_info' function
   17908 may be useful to find bugs in the control flow graph updating code.
   17909 
   17910  Note that at present, the representation of control flow in the `tree'
   17911 representation is discarded before expanding to RTL.  Long term the CFG
   17912 should be maintained and "expanded" to the RTL representation along
   17913 with the function `tree' itself.
   17914 
   17915 
   17916 File: gccint.info,  Node: Liveness information,  Prev: Maintaining the CFG,  Up: Control Flow
   17917 
   17918 15.5 Liveness information
   17919 =========================
   17920 
   17921 Liveness information is useful to determine whether some register is
   17922 "live" at given point of program, i.e. that it contains a value that
   17923 may be used at a later point in the program.  This information is used,
   17924 for instance, during register allocation, as the pseudo registers only
   17925 need to be assigned to a unique hard register or to a stack slot if
   17926 they are live.  The hard registers and stack slots may be freely reused
   17927 for other values when a register is dead.
   17928 
   17929  Liveness information is available in the back end starting with
   17930 `pass_df_initialize' and ending with `pass_df_finish'.  Three flavors
   17931 of live analysis are available: With `LR', it is possible to determine
   17932 at any point `P' in the function if the register may be used on some
   17933 path from `P' to the end of the function.  With `UR', it is possible to
   17934 determine if there is a path from the beginning of the function to `P'
   17935 that defines the variable.  `LIVE' is the intersection of the `LR' and
   17936 `UR' and a variable is live at `P' if there is both an assignment that
   17937 reaches it from the beginning of the function and a use that can be
   17938 reached on some path from `P' to the end of the function.
   17939 
   17940  In general `LIVE' is the most useful of the three.  The macros
   17941 `DF_[LR,UR,LIVE]_[IN,OUT]' can be used to access this information.  The
   17942 macros take a basic block number and return a bitmap that is indexed by
   17943 the register number.  This information is only guaranteed to be up to
   17944 date after calls are made to `df_analyze'.  See the file `df-core.c'
   17945 for details on using the dataflow.
   17946 
   17947  The liveness information is stored partly in the RTL instruction stream
   17948 and partly in the flow graph.  Local information is stored in the
   17949 instruction stream: Each instruction may contain `REG_DEAD' notes
   17950 representing that the value of a given register is no longer needed, or
   17951 `REG_UNUSED' notes representing that the value computed by the
   17952 instruction is never used.  The second is useful for instructions
   17953 computing multiple values at once.
   17954 
   17955 
   17956 File: gccint.info,  Node: Machine Desc,  Next: Target Macros,  Prev: Loop Analysis and Representation,  Up: Top
   17957 
   17958 16 Machine Descriptions
   17959 ***********************
   17960 
   17961 A machine description has two parts: a file of instruction patterns
   17962 (`.md' file) and a C header file of macro definitions.
   17963 
   17964  The `.md' file for a target machine contains a pattern for each
   17965 instruction that the target machine supports (or at least each
   17966 instruction that is worth telling the compiler about).  It may also
   17967 contain comments.  A semicolon causes the rest of the line to be a
   17968 comment, unless the semicolon is inside a quoted string.
   17969 
   17970  See the next chapter for information on the C header file.
   17971 
   17972 * Menu:
   17973 
   17974 * Overview::            How the machine description is used.
   17975 * Patterns::            How to write instruction patterns.
   17976 * Example::             An explained example of a `define_insn' pattern.
   17977 * RTL Template::        The RTL template defines what insns match a pattern.
   17978 * Output Template::     The output template says how to make assembler code
   17979                         from such an insn.
   17980 * Output Statement::    For more generality, write C code to output
   17981                         the assembler code.
   17982 * Predicates::          Controlling what kinds of operands can be used
   17983                         for an insn.
   17984 * Constraints::         Fine-tuning operand selection.
   17985 * Standard Names::      Names mark patterns to use for code generation.
   17986 * Pattern Ordering::    When the order of patterns makes a difference.
   17987 * Dependent Patterns::  Having one pattern may make you need another.
   17988 * Jump Patterns::       Special considerations for patterns for jump insns.
   17989 * Looping Patterns::    How to define patterns for special looping insns.
   17990 * Insn Canonicalizations::Canonicalization of Instructions
   17991 * Expander Definitions::Generating a sequence of several RTL insns
   17992                         for a standard operation.
   17993 * Insn Splitting::      Splitting Instructions into Multiple Instructions.
   17994 * Including Patterns::  Including Patterns in Machine Descriptions.
   17995 * Peephole Definitions::Defining machine-specific peephole optimizations.
   17996 * Insn Attributes::     Specifying the value of attributes for generated insns.
   17997 * Conditional Execution::Generating `define_insn' patterns for
   17998                          predication.
   17999 * Constant Definitions::Defining symbolic constants that can be used in the
   18000                         md file.
   18001 * Iterators::           Using iterators to generate patterns from a template.
   18002 
   18003 
   18004 File: gccint.info,  Node: Overview,  Next: Patterns,  Up: Machine Desc
   18005 
   18006 16.1 Overview of How the Machine Description is Used
   18007 ====================================================
   18008 
   18009 There are three main conversions that happen in the compiler:
   18010 
   18011   1. The front end reads the source code and builds a parse tree.
   18012 
   18013   2. The parse tree is used to generate an RTL insn list based on named
   18014      instruction patterns.
   18015 
   18016   3. The insn list is matched against the RTL templates to produce
   18017      assembler code.
   18018 
   18019 
   18020  For the generate pass, only the names of the insns matter, from either
   18021 a named `define_insn' or a `define_expand'.  The compiler will choose
   18022 the pattern with the right name and apply the operands according to the
   18023 documentation later in this chapter, without regard for the RTL
   18024 template or operand constraints.  Note that the names the compiler looks
   18025 for are hard-coded in the compiler--it will ignore unnamed patterns and
   18026 patterns with names it doesn't know about, but if you don't provide a
   18027 named pattern it needs, it will abort.
   18028 
   18029  If a `define_insn' is used, the template given is inserted into the
   18030 insn list.  If a `define_expand' is used, one of three things happens,
   18031 based on the condition logic.  The condition logic may manually create
   18032 new insns for the insn list, say via `emit_insn()', and invoke `DONE'.
   18033 For certain named patterns, it may invoke `FAIL' to tell the compiler
   18034 to use an alternate way of performing that task.  If it invokes neither
   18035 `DONE' nor `FAIL', the template given in the pattern is inserted, as if
   18036 the `define_expand' were a `define_insn'.
   18037 
   18038  Once the insn list is generated, various optimization passes convert,
   18039 replace, and rearrange the insns in the insn list.  This is where the
   18040 `define_split' and `define_peephole' patterns get used, for example.
   18041 
   18042  Finally, the insn list's RTL is matched up with the RTL templates in
   18043 the `define_insn' patterns, and those patterns are used to emit the
   18044 final assembly code.  For this purpose, each named `define_insn' acts
   18045 like it's unnamed, since the names are ignored.
   18046 
   18047 
   18048 File: gccint.info,  Node: Patterns,  Next: Example,  Prev: Overview,  Up: Machine Desc
   18049 
   18050 16.2 Everything about Instruction Patterns
   18051 ==========================================
   18052 
   18053 Each instruction pattern contains an incomplete RTL expression, with
   18054 pieces to be filled in later, operand constraints that restrict how the
   18055 pieces can be filled in, and an output pattern or C code to generate
   18056 the assembler output, all wrapped up in a `define_insn' expression.
   18057 
   18058  A `define_insn' is an RTL expression containing four or five operands:
   18059 
   18060   1. An optional name.  The presence of a name indicate that this
   18061      instruction pattern can perform a certain standard job for the
   18062      RTL-generation pass of the compiler.  This pass knows certain
   18063      names and will use the instruction patterns with those names, if
   18064      the names are defined in the machine description.
   18065 
   18066      The absence of a name is indicated by writing an empty string
   18067      where the name should go.  Nameless instruction patterns are never
   18068      used for generating RTL code, but they may permit several simpler
   18069      insns to be combined later on.
   18070 
   18071      Names that are not thus known and used in RTL-generation have no
   18072      effect; they are equivalent to no name at all.
   18073 
   18074      For the purpose of debugging the compiler, you may also specify a
   18075      name beginning with the `*' character.  Such a name is used only
   18076      for identifying the instruction in RTL dumps; it is entirely
   18077      equivalent to having a nameless pattern for all other purposes.
   18078 
   18079   2. The "RTL template" (*note RTL Template::) is a vector of incomplete
   18080      RTL expressions which show what the instruction should look like.
   18081      It is incomplete because it may contain `match_operand',
   18082      `match_operator', and `match_dup' expressions that stand for
   18083      operands of the instruction.
   18084 
   18085      If the vector has only one element, that element is the template
   18086      for the instruction pattern.  If the vector has multiple elements,
   18087      then the instruction pattern is a `parallel' expression containing
   18088      the elements described.
   18089 
   18090   3. A condition.  This is a string which contains a C expression that
   18091      is the final test to decide whether an insn body matches this
   18092      pattern.
   18093 
   18094      For a named pattern, the condition (if present) may not depend on
   18095      the data in the insn being matched, but only the
   18096      target-machine-type flags.  The compiler needs to test these
   18097      conditions during initialization in order to learn exactly which
   18098      named instructions are available in a particular run.
   18099 
   18100      For nameless patterns, the condition is applied only when matching
   18101      an individual insn, and only after the insn has matched the
   18102      pattern's recognition template.  The insn's operands may be found
   18103      in the vector `operands'.  For an insn where the condition has
   18104      once matched, it can't be used to control register allocation, for
   18105      example by excluding certain hard registers or hard register
   18106      combinations.
   18107 
   18108   4. The "output template": a string that says how to output matching
   18109      insns as assembler code.  `%' in this string specifies where to
   18110      substitute the value of an operand.  *Note Output Template::.
   18111 
   18112      When simple substitution isn't general enough, you can specify a
   18113      piece of C code to compute the output.  *Note Output Statement::.
   18114 
   18115   5. Optionally, a vector containing the values of attributes for insns
   18116      matching this pattern.  *Note Insn Attributes::.
   18117 
   18118 
   18119 File: gccint.info,  Node: Example,  Next: RTL Template,  Prev: Patterns,  Up: Machine Desc
   18120 
   18121 16.3 Example of `define_insn'
   18122 =============================
   18123 
   18124 Here is an actual example of an instruction pattern, for the
   18125 68000/68020.
   18126 
   18127      (define_insn "tstsi"
   18128        [(set (cc0)
   18129              (match_operand:SI 0 "general_operand" "rm"))]
   18130        ""
   18131        "*
   18132      {
   18133        if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
   18134          return \"tstl %0\";
   18135        return \"cmpl #0,%0\";
   18136      }")
   18137 
   18138 This can also be written using braced strings:
   18139 
   18140      (define_insn "tstsi"
   18141        [(set (cc0)
   18142              (match_operand:SI 0 "general_operand" "rm"))]
   18143        ""
   18144      {
   18145        if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
   18146          return "tstl %0";
   18147        return "cmpl #0,%0";
   18148      })
   18149 
   18150  This is an instruction that sets the condition codes based on the
   18151 value of a general operand.  It has no condition, so any insn whose RTL
   18152 description has the form shown may be handled according to this
   18153 pattern.  The name `tstsi' means "test a `SImode' value" and tells the
   18154 RTL generation pass that, when it is necessary to test such a value, an
   18155 insn to do so can be constructed using this pattern.
   18156 
   18157  The output control string is a piece of C code which chooses which
   18158 output template to return based on the kind of operand and the specific
   18159 type of CPU for which code is being generated.
   18160 
   18161  `"rm"' is an operand constraint.  Its meaning is explained below.
   18162 
   18163 
   18164 File: gccint.info,  Node: RTL Template,  Next: Output Template,  Prev: Example,  Up: Machine Desc
   18165 
   18166 16.4 RTL Template
   18167 =================
   18168 
   18169 The RTL template is used to define which insns match the particular
   18170 pattern and how to find their operands.  For named patterns, the RTL
   18171 template also says how to construct an insn from specified operands.
   18172 
   18173  Construction involves substituting specified operands into a copy of
   18174 the template.  Matching involves determining the values that serve as
   18175 the operands in the insn being matched.  Both of these activities are
   18176 controlled by special expression types that direct matching and
   18177 substitution of the operands.
   18178 
   18179 `(match_operand:M N PREDICATE CONSTRAINT)'
   18180      This expression is a placeholder for operand number N of the insn.
   18181      When constructing an insn, operand number N will be substituted at
   18182      this point.  When matching an insn, whatever appears at this
   18183      position in the insn will be taken as operand number N; but it
   18184      must satisfy PREDICATE or this instruction pattern will not match
   18185      at all.
   18186 
   18187      Operand numbers must be chosen consecutively counting from zero in
   18188      each instruction pattern.  There may be only one `match_operand'
   18189      expression in the pattern for each operand number.  Usually
   18190      operands are numbered in the order of appearance in `match_operand'
   18191      expressions.  In the case of a `define_expand', any operand numbers
   18192      used only in `match_dup' expressions have higher values than all
   18193      other operand numbers.
   18194 
   18195      PREDICATE is a string that is the name of a function that accepts
   18196      two arguments, an expression and a machine mode.  *Note
   18197      Predicates::.  During matching, the function will be called with
   18198      the putative operand as the expression and M as the mode argument
   18199      (if M is not specified, `VOIDmode' will be used, which normally
   18200      causes PREDICATE to accept any mode).  If it returns zero, this
   18201      instruction pattern fails to match.  PREDICATE may be an empty
   18202      string; then it means no test is to be done on the operand, so
   18203      anything which occurs in this position is valid.
   18204 
   18205      Most of the time, PREDICATE will reject modes other than M--but
   18206      not always.  For example, the predicate `address_operand' uses M
   18207      as the mode of memory ref that the address should be valid for.
   18208      Many predicates accept `const_int' nodes even though their mode is
   18209      `VOIDmode'.
   18210 
   18211      CONSTRAINT controls reloading and the choice of the best register
   18212      class to use for a value, as explained later (*note Constraints::).
   18213      If the constraint would be an empty string, it can be omitted.
   18214 
   18215      People are often unclear on the difference between the constraint
   18216      and the predicate.  The predicate helps decide whether a given
   18217      insn matches the pattern.  The constraint plays no role in this
   18218      decision; instead, it controls various decisions in the case of an
   18219      insn which does match.
   18220 
   18221 `(match_scratch:M N CONSTRAINT)'
   18222      This expression is also a placeholder for operand number N and
   18223      indicates that operand must be a `scratch' or `reg' expression.
   18224 
   18225      When matching patterns, this is equivalent to
   18226 
   18227           (match_operand:M N "scratch_operand" PRED)
   18228 
   18229      but, when generating RTL, it produces a (`scratch':M) expression.
   18230 
   18231      If the last few expressions in a `parallel' are `clobber'
   18232      expressions whose operands are either a hard register or
   18233      `match_scratch', the combiner can add or delete them when
   18234      necessary.  *Note Side Effects::.
   18235 
   18236 `(match_dup N)'
   18237      This expression is also a placeholder for operand number N.  It is
   18238      used when the operand needs to appear more than once in the insn.
   18239 
   18240      In construction, `match_dup' acts just like `match_operand': the
   18241      operand is substituted into the insn being constructed.  But in
   18242      matching, `match_dup' behaves differently.  It assumes that operand
   18243      number N has already been determined by a `match_operand'
   18244      appearing earlier in the recognition template, and it matches only
   18245      an identical-looking expression.
   18246 
   18247      Note that `match_dup' should not be used to tell the compiler that
   18248      a particular register is being used for two operands (example:
   18249      `add' that adds one register to another; the second register is
   18250      both an input operand and the output operand).  Use a matching
   18251      constraint (*note Simple Constraints::) for those.  `match_dup' is
   18252      for the cases where one operand is used in two places in the
   18253      template, such as an instruction that computes both a quotient and
   18254      a remainder, where the opcode takes two input operands but the RTL
   18255      template has to refer to each of those twice; once for the
   18256      quotient pattern and once for the remainder pattern.
   18257 
   18258 `(match_operator:M N PREDICATE [OPERANDS...])'
   18259      This pattern is a kind of placeholder for a variable RTL expression
   18260      code.
   18261 
   18262      When constructing an insn, it stands for an RTL expression whose
   18263      expression code is taken from that of operand N, and whose
   18264      operands are constructed from the patterns OPERANDS.
   18265 
   18266      When matching an expression, it matches an expression if the
   18267      function PREDICATE returns nonzero on that expression _and_ the
   18268      patterns OPERANDS match the operands of the expression.
   18269 
   18270      Suppose that the function `commutative_operator' is defined as
   18271      follows, to match any expression whose operator is one of the
   18272      commutative arithmetic operators of RTL and whose mode is MODE:
   18273 
   18274           int
   18275           commutative_integer_operator (x, mode)
   18276                rtx x;
   18277                enum machine_mode mode;
   18278           {
   18279             enum rtx_code code = GET_CODE (x);
   18280             if (GET_MODE (x) != mode)
   18281               return 0;
   18282             return (GET_RTX_CLASS (code) == RTX_COMM_ARITH
   18283                     || code == EQ || code == NE);
   18284           }
   18285 
   18286      Then the following pattern will match any RTL expression consisting
   18287      of a commutative operator applied to two general operands:
   18288 
   18289           (match_operator:SI 3 "commutative_operator"
   18290             [(match_operand:SI 1 "general_operand" "g")
   18291              (match_operand:SI 2 "general_operand" "g")])
   18292 
   18293      Here the vector `[OPERANDS...]' contains two patterns because the
   18294      expressions to be matched all contain two operands.
   18295 
   18296      When this pattern does match, the two operands of the commutative
   18297      operator are recorded as operands 1 and 2 of the insn.  (This is
   18298      done by the two instances of `match_operand'.)  Operand 3 of the
   18299      insn will be the entire commutative expression: use `GET_CODE
   18300      (operands[3])' to see which commutative operator was used.
   18301 
   18302      The machine mode M of `match_operator' works like that of
   18303      `match_operand': it is passed as the second argument to the
   18304      predicate function, and that function is solely responsible for
   18305      deciding whether the expression to be matched "has" that mode.
   18306 
   18307      When constructing an insn, argument 3 of the gen-function will
   18308      specify the operation (i.e. the expression code) for the
   18309      expression to be made.  It should be an RTL expression, whose
   18310      expression code is copied into a new expression whose operands are
   18311      arguments 1 and 2 of the gen-function.  The subexpressions of
   18312      argument 3 are not used; only its expression code matters.
   18313 
   18314      When `match_operator' is used in a pattern for matching an insn,
   18315      it usually best if the operand number of the `match_operator' is
   18316      higher than that of the actual operands of the insn.  This improves
   18317      register allocation because the register allocator often looks at
   18318      operands 1 and 2 of insns to see if it can do register tying.
   18319 
   18320      There is no way to specify constraints in `match_operator'.  The
   18321      operand of the insn which corresponds to the `match_operator'
   18322      never has any constraints because it is never reloaded as a whole.
   18323      However, if parts of its OPERANDS are matched by `match_operand'
   18324      patterns, those parts may have constraints of their own.
   18325 
   18326 `(match_op_dup:M N[OPERANDS...])'
   18327      Like `match_dup', except that it applies to operators instead of
   18328      operands.  When constructing an insn, operand number N will be
   18329      substituted at this point.  But in matching, `match_op_dup' behaves
   18330      differently.  It assumes that operand number N has already been
   18331      determined by a `match_operator' appearing earlier in the
   18332      recognition template, and it matches only an identical-looking
   18333      expression.
   18334 
   18335 `(match_parallel N PREDICATE [SUBPAT...])'
   18336      This pattern is a placeholder for an insn that consists of a
   18337      `parallel' expression with a variable number of elements.  This
   18338      expression should only appear at the top level of an insn pattern.
   18339 
   18340      When constructing an insn, operand number N will be substituted at
   18341      this point.  When matching an insn, it matches if the body of the
   18342      insn is a `parallel' expression with at least as many elements as
   18343      the vector of SUBPAT expressions in the `match_parallel', if each
   18344      SUBPAT matches the corresponding element of the `parallel', _and_
   18345      the function PREDICATE returns nonzero on the `parallel' that is
   18346      the body of the insn.  It is the responsibility of the predicate
   18347      to validate elements of the `parallel' beyond those listed in the
   18348      `match_parallel'.
   18349 
   18350      A typical use of `match_parallel' is to match load and store
   18351      multiple expressions, which can contain a variable number of
   18352      elements in a `parallel'.  For example,
   18353 
   18354           (define_insn ""
   18355             [(match_parallel 0 "load_multiple_operation"
   18356                [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
   18357                      (match_operand:SI 2 "memory_operand" "m"))
   18358                 (use (reg:SI 179))
   18359                 (clobber (reg:SI 179))])]
   18360             ""
   18361             "loadm 0,0,%1,%2")
   18362 
   18363      This example comes from `a29k.md'.  The function
   18364      `load_multiple_operation' is defined in `a29k.c' and checks that
   18365      subsequent elements in the `parallel' are the same as the `set' in
   18366      the pattern, except that they are referencing subsequent registers
   18367      and memory locations.
   18368 
   18369      An insn that matches this pattern might look like:
   18370 
   18371           (parallel
   18372            [(set (reg:SI 20) (mem:SI (reg:SI 100)))
   18373             (use (reg:SI 179))
   18374             (clobber (reg:SI 179))
   18375             (set (reg:SI 21)
   18376                  (mem:SI (plus:SI (reg:SI 100)
   18377                                   (const_int 4))))
   18378             (set (reg:SI 22)
   18379                  (mem:SI (plus:SI (reg:SI 100)
   18380                                   (const_int 8))))])
   18381 
   18382 `(match_par_dup N [SUBPAT...])'
   18383      Like `match_op_dup', but for `match_parallel' instead of
   18384      `match_operator'.
   18385 
   18386 
   18387 
   18388 File: gccint.info,  Node: Output Template,  Next: Output Statement,  Prev: RTL Template,  Up: Machine Desc
   18389 
   18390 16.5 Output Templates and Operand Substitution
   18391 ==============================================
   18392 
   18393 The "output template" is a string which specifies how to output the
   18394 assembler code for an instruction pattern.  Most of the template is a
   18395 fixed string which is output literally.  The character `%' is used to
   18396 specify where to substitute an operand; it can also be used to identify
   18397 places where different variants of the assembler require different
   18398 syntax.
   18399 
   18400  In the simplest case, a `%' followed by a digit N says to output
   18401 operand N at that point in the string.
   18402 
   18403  `%' followed by a letter and a digit says to output an operand in an
   18404 alternate fashion.  Four letters have standard, built-in meanings
   18405 described below.  The machine description macro `PRINT_OPERAND' can
   18406 define additional letters with nonstandard meanings.
   18407 
   18408  `%cDIGIT' can be used to substitute an operand that is a constant
   18409 value without the syntax that normally indicates an immediate operand.
   18410 
   18411  `%nDIGIT' is like `%cDIGIT' except that the value of the constant is
   18412 negated before printing.
   18413 
   18414  `%aDIGIT' can be used to substitute an operand as if it were a memory
   18415 reference, with the actual operand treated as the address.  This may be
   18416 useful when outputting a "load address" instruction, because often the
   18417 assembler syntax for such an instruction requires you to write the
   18418 operand as if it were a memory reference.
   18419 
   18420  `%lDIGIT' is used to substitute a `label_ref' into a jump instruction.
   18421 
   18422  `%=' outputs a number which is unique to each instruction in the
   18423 entire compilation.  This is useful for making local labels to be
   18424 referred to more than once in a single template that generates multiple
   18425 assembler instructions.
   18426 
   18427  `%' followed by a punctuation character specifies a substitution that
   18428 does not use an operand.  Only one case is standard: `%%' outputs a `%'
   18429 into the assembler code.  Other nonstandard cases can be defined in the
   18430 `PRINT_OPERAND' macro.  You must also define which punctuation
   18431 characters are valid with the `PRINT_OPERAND_PUNCT_VALID_P' macro.
   18432 
   18433  The template may generate multiple assembler instructions.  Write the
   18434 text for the instructions, with `\;' between them.
   18435 
   18436  When the RTL contains two operands which are required by constraint to
   18437 match each other, the output template must refer only to the
   18438 lower-numbered operand.  Matching operands are not always identical,
   18439 and the rest of the compiler arranges to put the proper RTL expression
   18440 for printing into the lower-numbered operand.
   18441 
   18442  One use of nonstandard letters or punctuation following `%' is to
   18443 distinguish between different assembler languages for the same machine;
   18444 for example, Motorola syntax versus MIT syntax for the 68000.  Motorola
   18445 syntax requires periods in most opcode names, while MIT syntax does
   18446 not.  For example, the opcode `movel' in MIT syntax is `move.l' in
   18447 Motorola syntax.  The same file of patterns is used for both kinds of
   18448 output syntax, but the character sequence `%.' is used in each place
   18449 where Motorola syntax wants a period.  The `PRINT_OPERAND' macro for
   18450 Motorola syntax defines the sequence to output a period; the macro for
   18451 MIT syntax defines it to do nothing.
   18452 
   18453  As a special case, a template consisting of the single character `#'
   18454 instructs the compiler to first split the insn, and then output the
   18455 resulting instructions separately.  This helps eliminate redundancy in
   18456 the output templates.   If you have a `define_insn' that needs to emit
   18457 multiple assembler instructions, and there is a matching `define_split'
   18458 already defined, then you can simply use `#' as the output template
   18459 instead of writing an output template that emits the multiple assembler
   18460 instructions.
   18461 
   18462  If the macro `ASSEMBLER_DIALECT' is defined, you can use construct of
   18463 the form `{option0|option1|option2}' in the templates.  These describe
   18464 multiple variants of assembler language syntax.  *Note Instruction
   18465 Output::.
   18466 
   18467 
   18468 File: gccint.info,  Node: Output Statement,  Next: Predicates,  Prev: Output Template,  Up: Machine Desc
   18469 
   18470 16.6 C Statements for Assembler Output
   18471 ======================================
   18472 
   18473 Often a single fixed template string cannot produce correct and
   18474 efficient assembler code for all the cases that are recognized by a
   18475 single instruction pattern.  For example, the opcodes may depend on the
   18476 kinds of operands; or some unfortunate combinations of operands may
   18477 require extra machine instructions.
   18478 
   18479  If the output control string starts with a `@', then it is actually a
   18480 series of templates, each on a separate line.  (Blank lines and leading
   18481 spaces and tabs are ignored.)  The templates correspond to the
   18482 pattern's constraint alternatives (*note Multi-Alternative::).  For
   18483 example, if a target machine has a two-address add instruction `addr'
   18484 to add into a register and another `addm' to add a register to memory,
   18485 you might write this pattern:
   18486 
   18487      (define_insn "addsi3"
   18488        [(set (match_operand:SI 0 "general_operand" "=r,m")
   18489              (plus:SI (match_operand:SI 1 "general_operand" "0,0")
   18490                       (match_operand:SI 2 "general_operand" "g,r")))]
   18491        ""
   18492        "@
   18493         addr %2,%0
   18494         addm %2,%0")
   18495 
   18496  If the output control string starts with a `*', then it is not an
   18497 output template but rather a piece of C program that should compute a
   18498 template.  It should execute a `return' statement to return the
   18499 template-string you want.  Most such templates use C string literals,
   18500 which require doublequote characters to delimit them.  To include these
   18501 doublequote characters in the string, prefix each one with `\'.
   18502 
   18503  If the output control string is written as a brace block instead of a
   18504 double-quoted string, it is automatically assumed to be C code.  In that
   18505 case, it is not necessary to put in a leading asterisk, or to escape the
   18506 doublequotes surrounding C string literals.
   18507 
   18508  The operands may be found in the array `operands', whose C data type
   18509 is `rtx []'.
   18510 
   18511  It is very common to select different ways of generating assembler code
   18512 based on whether an immediate operand is within a certain range.  Be
   18513 careful when doing this, because the result of `INTVAL' is an integer
   18514 on the host machine.  If the host machine has more bits in an `int'
   18515 than the target machine has in the mode in which the constant will be
   18516 used, then some of the bits you get from `INTVAL' will be superfluous.
   18517 For proper results, you must carefully disregard the values of those
   18518 bits.
   18519 
   18520  It is possible to output an assembler instruction and then go on to
   18521 output or compute more of them, using the subroutine `output_asm_insn'.
   18522 This receives two arguments: a template-string and a vector of
   18523 operands.  The vector may be `operands', or it may be another array of
   18524 `rtx' that you declare locally and initialize yourself.
   18525 
   18526  When an insn pattern has multiple alternatives in its constraints,
   18527 often the appearance of the assembler code is determined mostly by
   18528 which alternative was matched.  When this is so, the C code can test
   18529 the variable `which_alternative', which is the ordinal number of the
   18530 alternative that was actually satisfied (0 for the first, 1 for the
   18531 second alternative, etc.).
   18532 
   18533  For example, suppose there are two opcodes for storing zero, `clrreg'
   18534 for registers and `clrmem' for memory locations.  Here is how a pattern
   18535 could use `which_alternative' to choose between them:
   18536 
   18537      (define_insn ""
   18538        [(set (match_operand:SI 0 "general_operand" "=r,m")
   18539              (const_int 0))]
   18540        ""
   18541        {
   18542        return (which_alternative == 0
   18543                ? "clrreg %0" : "clrmem %0");
   18544        })
   18545 
   18546  The example above, where the assembler code to generate was _solely_
   18547 determined by the alternative, could also have been specified as
   18548 follows, having the output control string start with a `@':
   18549 
   18550      (define_insn ""
   18551        [(set (match_operand:SI 0 "general_operand" "=r,m")
   18552              (const_int 0))]
   18553        ""
   18554        "@
   18555         clrreg %0
   18556         clrmem %0")
   18557 
   18558 
   18559 File: gccint.info,  Node: Predicates,  Next: Constraints,  Prev: Output Statement,  Up: Machine Desc
   18560 
   18561 16.7 Predicates
   18562 ===============
   18563 
   18564 A predicate determines whether a `match_operand' or `match_operator'
   18565 expression matches, and therefore whether the surrounding instruction
   18566 pattern will be used for that combination of operands.  GCC has a
   18567 number of machine-independent predicates, and you can define
   18568 machine-specific predicates as needed.  By convention, predicates used
   18569 with `match_operand' have names that end in `_operand', and those used
   18570 with `match_operator' have names that end in `_operator'.
   18571 
   18572  All predicates are Boolean functions (in the mathematical sense) of
   18573 two arguments: the RTL expression that is being considered at that
   18574 position in the instruction pattern, and the machine mode that the
   18575 `match_operand' or `match_operator' specifies.  In this section, the
   18576 first argument is called OP and the second argument MODE.  Predicates
   18577 can be called from C as ordinary two-argument functions; this can be
   18578 useful in output templates or other machine-specific code.
   18579 
   18580  Operand predicates can allow operands that are not actually acceptable
   18581 to the hardware, as long as the constraints give reload the ability to
   18582 fix them up (*note Constraints::).  However, GCC will usually generate
   18583 better code if the predicates specify the requirements of the machine
   18584 instructions as closely as possible.  Reload cannot fix up operands
   18585 that must be constants ("immediate operands"); you must use a predicate
   18586 that allows only constants, or else enforce the requirement in the
   18587 extra condition.
   18588 
   18589  Most predicates handle their MODE argument in a uniform manner.  If
   18590 MODE is `VOIDmode' (unspecified), then OP can have any mode.  If MODE
   18591 is anything else, then OP must have the same mode, unless OP is a
   18592 `CONST_INT' or integer `CONST_DOUBLE'.  These RTL expressions always
   18593 have `VOIDmode', so it would be counterproductive to check that their
   18594 mode matches.  Instead, predicates that accept `CONST_INT' and/or
   18595 integer `CONST_DOUBLE' check that the value stored in the constant will
   18596 fit in the requested mode.
   18597 
   18598  Predicates with this behavior are called "normal".  `genrecog' can
   18599 optimize the instruction recognizer based on knowledge of how normal
   18600 predicates treat modes.  It can also diagnose certain kinds of common
   18601 errors in the use of normal predicates; for instance, it is almost
   18602 always an error to use a normal predicate without specifying a mode.
   18603 
   18604  Predicates that do something different with their MODE argument are
   18605 called "special".  The generic predicates `address_operand' and
   18606 `pmode_register_operand' are special predicates.  `genrecog' does not
   18607 do any optimizations or diagnosis when special predicates are used.
   18608 
   18609 * Menu:
   18610 
   18611 * Machine-Independent Predicates::  Predicates available to all back ends.
   18612 * Defining Predicates::             How to write machine-specific predicate
   18613                                     functions.
   18614 
   18615 
   18616 File: gccint.info,  Node: Machine-Independent Predicates,  Next: Defining Predicates,  Up: Predicates
   18617 
   18618 16.7.1 Machine-Independent Predicates
   18619 -------------------------------------
   18620 
   18621 These are the generic predicates available to all back ends.  They are
   18622 defined in `recog.c'.  The first category of predicates allow only
   18623 constant, or "immediate", operands.
   18624 
   18625  -- Function: immediate_operand
   18626      This predicate allows any sort of constant that fits in MODE.  It
   18627      is an appropriate choice for instructions that take operands that
   18628      must be constant.
   18629 
   18630  -- Function: const_int_operand
   18631      This predicate allows any `CONST_INT' expression that fits in
   18632      MODE.  It is an appropriate choice for an immediate operand that
   18633      does not allow a symbol or label.
   18634 
   18635  -- Function: const_double_operand
   18636      This predicate accepts any `CONST_DOUBLE' expression that has
   18637      exactly MODE.  If MODE is `VOIDmode', it will also accept
   18638      `CONST_INT'.  It is intended for immediate floating point
   18639      constants.
   18640 
   18641 The second category of predicates allow only some kind of machine
   18642 register.
   18643 
   18644  -- Function: register_operand
   18645      This predicate allows any `REG' or `SUBREG' expression that is
   18646      valid for MODE.  It is often suitable for arithmetic instruction
   18647      operands on a RISC machine.
   18648 
   18649  -- Function: pmode_register_operand
   18650      This is a slight variant on `register_operand' which works around
   18651      a limitation in the machine-description reader.
   18652 
   18653           (match_operand N "pmode_register_operand" CONSTRAINT)
   18654 
   18655      means exactly what
   18656 
   18657           (match_operand:P N "register_operand" CONSTRAINT)
   18658 
   18659      would mean, if the machine-description reader accepted `:P' mode
   18660      suffixes.  Unfortunately, it cannot, because `Pmode' is an alias
   18661      for some other mode, and might vary with machine-specific options.
   18662      *Note Misc::.
   18663 
   18664  -- Function: scratch_operand
   18665      This predicate allows hard registers and `SCRATCH' expressions,
   18666      but not pseudo-registers.  It is used internally by
   18667      `match_scratch'; it should not be used directly.
   18668 
   18669 The third category of predicates allow only some kind of memory
   18670 reference.
   18671 
   18672  -- Function: memory_operand
   18673      This predicate allows any valid reference to a quantity of mode
   18674      MODE in memory, as determined by the weak form of
   18675      `GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::).
   18676 
   18677  -- Function: address_operand
   18678      This predicate is a little unusual; it allows any operand that is a
   18679      valid expression for the _address_ of a quantity of mode MODE,
   18680      again determined by the weak form of `GO_IF_LEGITIMATE_ADDRESS'.
   18681      To first order, if `(mem:MODE (EXP))' is acceptable to
   18682      `memory_operand', then EXP is acceptable to `address_operand'.
   18683      Note that EXP does not necessarily have the mode MODE.
   18684 
   18685  -- Function: indirect_operand
   18686      This is a stricter form of `memory_operand' which allows only
   18687      memory references with a `general_operand' as the address
   18688      expression.  New uses of this predicate are discouraged, because
   18689      `general_operand' is very permissive, so it's hard to tell what an
   18690      `indirect_operand' does or does not allow.  If a target has
   18691      different requirements for memory operands for different
   18692      instructions, it is better to define target-specific predicates
   18693      which enforce the hardware's requirements explicitly.
   18694 
   18695  -- Function: push_operand
   18696      This predicate allows a memory reference suitable for pushing a
   18697      value onto the stack.  This will be a `MEM' which refers to
   18698      `stack_pointer_rtx', with a side-effect in its address expression
   18699      (*note Incdec::); which one is determined by the `STACK_PUSH_CODE'
   18700      macro (*note Frame Layout::).
   18701 
   18702  -- Function: pop_operand
   18703      This predicate allows a memory reference suitable for popping a
   18704      value off the stack.  Again, this will be a `MEM' referring to
   18705      `stack_pointer_rtx', with a side-effect in its address expression.
   18706      However, this time `STACK_POP_CODE' is expected.
   18707 
   18708 The fourth category of predicates allow some combination of the above
   18709 operands.
   18710 
   18711  -- Function: nonmemory_operand
   18712      This predicate allows any immediate or register operand valid for
   18713      MODE.
   18714 
   18715  -- Function: nonimmediate_operand
   18716      This predicate allows any register or memory operand valid for
   18717      MODE.
   18718 
   18719  -- Function: general_operand
   18720      This predicate allows any immediate, register, or memory operand
   18721      valid for MODE.
   18722 
   18723 Finally, there are two generic operator predicates.
   18724 
   18725  -- Function: comparison_operator
   18726      This predicate matches any expression which performs an arithmetic
   18727      comparison in MODE; that is, `COMPARISON_P' is true for the
   18728      expression code.
   18729 
   18730  -- Function: ordered_comparison_operator
   18731      This predicate matches any expression which performs an arithmetic
   18732      comparison in MODE and whose expression code is valid for integer
   18733      modes; that is, the expression code will be one of `eq', `ne',
   18734      `lt', `ltu', `le', `leu', `gt', `gtu', `ge', `geu'.
   18735 
   18736 
   18737 File: gccint.info,  Node: Defining Predicates,  Prev: Machine-Independent Predicates,  Up: Predicates
   18738 
   18739 16.7.2 Defining Machine-Specific Predicates
   18740 -------------------------------------------
   18741 
   18742 Many machines have requirements for their operands that cannot be
   18743 expressed precisely using the generic predicates.  You can define
   18744 additional predicates using `define_predicate' and
   18745 `define_special_predicate' expressions.  These expressions have three
   18746 operands:
   18747 
   18748    * The name of the predicate, as it will be referred to in
   18749      `match_operand' or `match_operator' expressions.
   18750 
   18751    * An RTL expression which evaluates to true if the predicate allows
   18752      the operand OP, false if it does not.  This expression can only use
   18753      the following RTL codes:
   18754 
   18755     `MATCH_OPERAND'
   18756           When written inside a predicate expression, a `MATCH_OPERAND'
   18757           expression evaluates to true if the predicate it names would
   18758           allow OP.  The operand number and constraint are ignored.
   18759           Due to limitations in `genrecog', you can only refer to
   18760           generic predicates and predicates that have already been
   18761           defined.
   18762 
   18763     `MATCH_CODE'
   18764           This expression evaluates to true if OP or a specified
   18765           subexpression of OP has one of a given list of RTX codes.
   18766 
   18767           The first operand of this expression is a string constant
   18768           containing a comma-separated list of RTX code names (in lower
   18769           case).  These are the codes for which the `MATCH_CODE' will
   18770           be true.
   18771 
   18772           The second operand is a string constant which indicates what
   18773           subexpression of OP to examine.  If it is absent or the empty
   18774           string, OP itself is examined.  Otherwise, the string constant
   18775           must be a sequence of digits and/or lowercase letters.  Each
   18776           character indicates a subexpression to extract from the
   18777           current expression; for the first character this is OP, for
   18778           the second and subsequent characters it is the result of the
   18779           previous character.  A digit N extracts `XEXP (E, N)'; a
   18780           letter L extracts `XVECEXP (E, 0, N)' where N is the
   18781           alphabetic ordinal of L (0 for `a', 1 for 'b', and so on).
   18782           The `MATCH_CODE' then examines the RTX code of the
   18783           subexpression extracted by the complete string.  It is not
   18784           possible to extract components of an `rtvec' that is not at
   18785           position 0 within its RTX object.
   18786 
   18787     `MATCH_TEST'
   18788           This expression has one operand, a string constant containing
   18789           a C expression.  The predicate's arguments, OP and MODE, are
   18790           available with those names in the C expression.  The
   18791           `MATCH_TEST' evaluates to true if the C expression evaluates
   18792           to a nonzero value.  `MATCH_TEST' expressions must not have
   18793           side effects.
   18794 
   18795     `AND'
   18796     `IOR'
   18797     `NOT'
   18798     `IF_THEN_ELSE'
   18799           The basic `MATCH_' expressions can be combined using these
   18800           logical operators, which have the semantics of the C operators
   18801           `&&', `||', `!', and `? :' respectively.  As in Common Lisp,
   18802           you may give an `AND' or `IOR' expression an arbitrary number
   18803           of arguments; this has exactly the same effect as writing a
   18804           chain of two-argument `AND' or `IOR' expressions.
   18805 
   18806    * An optional block of C code, which should execute `return true' if
   18807      the predicate is found to match and `return false' if it does not.
   18808      It must not have any side effects.  The predicate arguments, OP
   18809      and MODE, are available with those names.
   18810 
   18811      If a code block is present in a predicate definition, then the RTL
   18812      expression must evaluate to true _and_ the code block must execute
   18813      `return true' for the predicate to allow the operand.  The RTL
   18814      expression is evaluated first; do not re-check anything in the
   18815      code block that was checked in the RTL expression.
   18816 
   18817  The program `genrecog' scans `define_predicate' and
   18818 `define_special_predicate' expressions to determine which RTX codes are
   18819 possibly allowed.  You should always make this explicit in the RTL
   18820 predicate expression, using `MATCH_OPERAND' and `MATCH_CODE'.
   18821 
   18822  Here is an example of a simple predicate definition, from the IA64
   18823 machine description:
   18824 
   18825      ;; True if OP is a `SYMBOL_REF' which refers to the sdata section.
   18826      (define_predicate "small_addr_symbolic_operand"
   18827        (and (match_code "symbol_ref")
   18828             (match_test "SYMBOL_REF_SMALL_ADDR_P (op)")))
   18829 
   18830 And here is another, showing the use of the C block.
   18831 
   18832      ;; True if OP is a register operand that is (or could be) a GR reg.
   18833      (define_predicate "gr_register_operand"
   18834        (match_operand 0 "register_operand")
   18835      {
   18836        unsigned int regno;
   18837        if (GET_CODE (op) == SUBREG)
   18838          op = SUBREG_REG (op);
   18839 
   18840        regno = REGNO (op);
   18841        return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
   18842      })
   18843 
   18844  Predicates written with `define_predicate' automatically include a
   18845 test that MODE is `VOIDmode', or OP has the same mode as MODE, or OP is
   18846 a `CONST_INT' or `CONST_DOUBLE'.  They do _not_ check specifically for
   18847 integer `CONST_DOUBLE', nor do they test that the value of either kind
   18848 of constant fits in the requested mode.  This is because
   18849 target-specific predicates that take constants usually have to do more
   18850 stringent value checks anyway.  If you need the exact same treatment of
   18851 `CONST_INT' or `CONST_DOUBLE' that the generic predicates provide, use
   18852 a `MATCH_OPERAND' subexpression to call `const_int_operand',
   18853 `const_double_operand', or `immediate_operand'.
   18854 
   18855  Predicates written with `define_special_predicate' do not get any
   18856 automatic mode checks, and are treated as having special mode handling
   18857 by `genrecog'.
   18858 
   18859  The program `genpreds' is responsible for generating code to test
   18860 predicates.  It also writes a header file containing function
   18861 declarations for all machine-specific predicates.  It is not necessary
   18862 to declare these predicates in `CPU-protos.h'.
   18863 
   18864 
   18865 File: gccint.info,  Node: Constraints,  Next: Standard Names,  Prev: Predicates,  Up: Machine Desc
   18866 
   18867 16.8 Operand Constraints
   18868 ========================
   18869 
   18870 Each `match_operand' in an instruction pattern can specify constraints
   18871 for the operands allowed.  The constraints allow you to fine-tune
   18872 matching within the set of operands allowed by the predicate.
   18873 
   18874  Constraints can say whether an operand may be in a register, and which
   18875 kinds of register; whether the operand can be a memory reference, and
   18876 which kinds of address; whether the operand may be an immediate
   18877 constant, and which possible values it may have.  Constraints can also
   18878 require two operands to match.  Side-effects aren't allowed in operands
   18879 of inline `asm', unless `<' or `>' constraints are used, because there
   18880 is no guarantee that the side-effects will happen exactly once in an
   18881 instruction that can update the addressing register.
   18882 
   18883 * Menu:
   18884 
   18885 * Simple Constraints::  Basic use of constraints.
   18886 * Multi-Alternative::   When an insn has two alternative constraint-patterns.
   18887 * Class Preferences::   Constraints guide which hard register to put things in.
   18888 * Modifiers::           More precise control over effects of constraints.
   18889 * Disable Insn Alternatives:: Disable insn alternatives using the `enabled' attribute.
   18890 * Machine Constraints:: Existing constraints for some particular machines.
   18891 * Define Constraints::  How to define machine-specific constraints.
   18892 * C Constraint Interface:: How to test constraints from C code.
   18893 
   18894 
   18895 File: gccint.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
   18896 
   18897 16.8.1 Simple Constraints
   18898 -------------------------
   18899 
   18900 The simplest kind of constraint is a string full of letters, each of
   18901 which describes one kind of operand that is permitted.  Here are the
   18902 letters that are allowed:
   18903 
   18904 whitespace
   18905      Whitespace characters are ignored and can be inserted at any
   18906      position except the first.  This enables each alternative for
   18907      different operands to be visually aligned in the machine
   18908      description even if they have different number of constraints and
   18909      modifiers.
   18910 
   18911 `m'
   18912      A memory operand is allowed, with any kind of address that the
   18913      machine supports in general.  Note that the letter used for the
   18914      general memory constraint can be re-defined by a back end using
   18915      the `TARGET_MEM_CONSTRAINT' macro.
   18916 
   18917 `o'
   18918      A memory operand is allowed, but only if the address is
   18919      "offsettable".  This means that adding a small integer (actually,
   18920      the width in bytes of the operand, as determined by its machine
   18921      mode) may be added to the address and the result is also a valid
   18922      memory address.
   18923 
   18924      For example, an address which is constant is offsettable; so is an
   18925      address that is the sum of a register and a constant (as long as a
   18926      slightly larger constant is also within the range of
   18927      address-offsets supported by the machine); but an autoincrement or
   18928      autodecrement address is not offsettable.  More complicated
   18929      indirect/indexed addresses may or may not be offsettable depending
   18930      on the other addressing modes that the machine supports.
   18931 
   18932      Note that in an output operand which can be matched by another
   18933      operand, the constraint letter `o' is valid only when accompanied
   18934      by both `<' (if the target machine has predecrement addressing)
   18935      and `>' (if the target machine has preincrement addressing).
   18936 
   18937 `V'
   18938      A memory operand that is not offsettable.  In other words,
   18939      anything that would fit the `m' constraint but not the `o'
   18940      constraint.
   18941 
   18942 `<'
   18943      A memory operand with autodecrement addressing (either
   18944      predecrement or postdecrement) is allowed.  In inline `asm' this
   18945      constraint is only allowed if the operand is used exactly once in
   18946      an instruction that can handle the side-effects.  Not using an
   18947      operand with `<' in constraint string in the inline `asm' pattern
   18948      at all or using it in multiple instructions isn't valid, because
   18949      the side-effects wouldn't be performed or would be performed more
   18950      than once.  Furthermore, on some targets the operand with `<' in
   18951      constraint string must be accompanied by special instruction
   18952      suffixes like `%U0' instruction suffix on PowerPC or `%P0' on
   18953      IA-64.
   18954 
   18955 `>'
   18956      A memory operand with autoincrement addressing (either
   18957      preincrement or postincrement) is allowed.  In inline `asm' the
   18958      same restrictions as for `<' apply.
   18959 
   18960 `r'
   18961      A register operand is allowed provided that it is in a general
   18962      register.
   18963 
   18964 `i'
   18965      An immediate integer operand (one with constant value) is allowed.
   18966      This includes symbolic constants whose values will be known only at
   18967      assembly time or later.
   18968 
   18969 `n'
   18970      An immediate integer operand with a known numeric value is allowed.
   18971      Many systems cannot support assembly-time constants for operands
   18972      less than a word wide.  Constraints for these operands should use
   18973      `n' rather than `i'.
   18974 
   18975 `I', `J', `K', ... `P'
   18976      Other letters in the range `I' through `P' may be defined in a
   18977      machine-dependent fashion to permit immediate integer operands with
   18978      explicit integer values in specified ranges.  For example, on the
   18979      68000, `I' is defined to stand for the range of values 1 to 8.
   18980      This is the range permitted as a shift count in the shift
   18981      instructions.
   18982 
   18983 `E'
   18984      An immediate floating operand (expression code `const_double') is
   18985      allowed, but only if the target floating point format is the same
   18986      as that of the host machine (on which the compiler is running).
   18987 
   18988 `F'
   18989      An immediate floating operand (expression code `const_double' or
   18990      `const_vector') is allowed.
   18991 
   18992 `G', `H'
   18993      `G' and `H' may be defined in a machine-dependent fashion to
   18994      permit immediate floating operands in particular ranges of values.
   18995 
   18996 `s'
   18997      An immediate integer operand whose value is not an explicit
   18998      integer is allowed.
   18999 
   19000      This might appear strange; if an insn allows a constant operand
   19001      with a value not known at compile time, it certainly must allow
   19002      any known value.  So why use `s' instead of `i'?  Sometimes it
   19003      allows better code to be generated.
   19004 
   19005      For example, on the 68000 in a fullword instruction it is possible
   19006      to use an immediate operand; but if the immediate value is between
   19007      -128 and 127, better code results from loading the value into a
   19008      register and using the register.  This is because the load into
   19009      the register can be done with a `moveq' instruction.  We arrange
   19010      for this to happen by defining the letter `K' to mean "any integer
   19011      outside the range -128 to 127", and then specifying `Ks' in the
   19012      operand constraints.
   19013 
   19014 `g'
   19015      Any register, memory or immediate integer operand is allowed,
   19016      except for registers that are not general registers.
   19017 
   19018 `X'
   19019      Any operand whatsoever is allowed, even if it does not satisfy
   19020      `general_operand'.  This is normally used in the constraint of a
   19021      `match_scratch' when certain alternatives will not actually
   19022      require a scratch register.
   19023 
   19024 `0', `1', `2', ... `9'
   19025      An operand that matches the specified operand number is allowed.
   19026      If a digit is used together with letters within the same
   19027      alternative, the digit should come last.
   19028 
   19029      This number is allowed to be more than a single digit.  If multiple
   19030      digits are encountered consecutively, they are interpreted as a
   19031      single decimal integer.  There is scant chance for ambiguity,
   19032      since to-date it has never been desirable that `10' be interpreted
   19033      as matching either operand 1 _or_ operand 0.  Should this be
   19034      desired, one can use multiple alternatives instead.
   19035 
   19036      This is called a "matching constraint" and what it really means is
   19037      that the assembler has only a single operand that fills two roles
   19038      considered separate in the RTL insn.  For example, an add insn has
   19039      two input operands and one output operand in the RTL, but on most
   19040      CISC machines an add instruction really has only two operands, one
   19041      of them an input-output operand:
   19042 
   19043           addl #35,r12
   19044 
   19045      Matching constraints are used in these circumstances.  More
   19046      precisely, the two operands that match must include one input-only
   19047      operand and one output-only operand.  Moreover, the digit must be a
   19048      smaller number than the number of the operand that uses it in the
   19049      constraint.
   19050 
   19051      For operands to match in a particular case usually means that they
   19052      are identical-looking RTL expressions.  But in a few special cases
   19053      specific kinds of dissimilarity are allowed.  For example, `*x' as
   19054      an input operand will match `*x++' as an output operand.  For
   19055      proper results in such cases, the output template should always
   19056      use the output-operand's number when printing the operand.
   19057 
   19058 `p'
   19059      An operand that is a valid memory address is allowed.  This is for
   19060      "load address" and "push address" instructions.
   19061 
   19062      `p' in the constraint must be accompanied by `address_operand' as
   19063      the predicate in the `match_operand'.  This predicate interprets
   19064      the mode specified in the `match_operand' as the mode of the memory
   19065      reference for which the address would be valid.
   19066 
   19067 OTHER-LETTERS
   19068      Other letters can be defined in machine-dependent fashion to stand
   19069      for particular classes of registers or other arbitrary operand
   19070      types.  `d', `a' and `f' are defined on the 68000/68020 to stand
   19071      for data, address and floating point registers.
   19072 
   19073  In order to have valid assembler code, each operand must satisfy its
   19074 constraint.  But a failure to do so does not prevent the pattern from
   19075 applying to an insn.  Instead, it directs the compiler to modify the
   19076 code so that the constraint will be satisfied.  Usually this is done by
   19077 copying an operand into a register.
   19078 
   19079  Contrast, therefore, the two instruction patterns that follow:
   19080 
   19081      (define_insn ""
   19082        [(set (match_operand:SI 0 "general_operand" "=r")
   19083              (plus:SI (match_dup 0)
   19084                       (match_operand:SI 1 "general_operand" "r")))]
   19085        ""
   19086        "...")
   19087 
   19088 which has two operands, one of which must appear in two places, and
   19089 
   19090      (define_insn ""
   19091        [(set (match_operand:SI 0 "general_operand" "=r")
   19092              (plus:SI (match_operand:SI 1 "general_operand" "0")
   19093                       (match_operand:SI 2 "general_operand" "r")))]
   19094        ""
   19095        "...")
   19096 
   19097 which has three operands, two of which are required by a constraint to
   19098 be identical.  If we are considering an insn of the form
   19099 
   19100      (insn N PREV NEXT
   19101        (set (reg:SI 3)
   19102             (plus:SI (reg:SI 6) (reg:SI 109)))
   19103        ...)
   19104 
   19105 the first pattern would not apply at all, because this insn does not
   19106 contain two identical subexpressions in the right place.  The pattern
   19107 would say, "That does not look like an add instruction; try other
   19108 patterns".  The second pattern would say, "Yes, that's an add
   19109 instruction, but there is something wrong with it".  It would direct
   19110 the reload pass of the compiler to generate additional insns to make
   19111 the constraint true.  The results might look like this:
   19112 
   19113      (insn N2 PREV N
   19114        (set (reg:SI 3) (reg:SI 6))
   19115        ...)
   19116 
   19117      (insn N N2 NEXT
   19118        (set (reg:SI 3)
   19119             (plus:SI (reg:SI 3) (reg:SI 109)))
   19120        ...)
   19121 
   19122  It is up to you to make sure that each operand, in each pattern, has
   19123 constraints that can handle any RTL expression that could be present for
   19124 that operand.  (When multiple alternatives are in use, each pattern
   19125 must, for each possible combination of operand expressions, have at
   19126 least one alternative which can handle that combination of operands.)
   19127 The constraints don't need to _allow_ any possible operand--when this is
   19128 the case, they do not constrain--but they must at least point the way to
   19129 reloading any possible operand so that it will fit.
   19130 
   19131    * If the constraint accepts whatever operands the predicate permits,
   19132      there is no problem: reloading is never necessary for this operand.
   19133 
   19134      For example, an operand whose constraints permit everything except
   19135      registers is safe provided its predicate rejects registers.
   19136 
   19137      An operand whose predicate accepts only constant values is safe
   19138      provided its constraints include the letter `i'.  If any possible
   19139      constant value is accepted, then nothing less than `i' will do; if
   19140      the predicate is more selective, then the constraints may also be
   19141      more selective.
   19142 
   19143    * Any operand expression can be reloaded by copying it into a
   19144      register.  So if an operand's constraints allow some kind of
   19145      register, it is certain to be safe.  It need not permit all
   19146      classes of registers; the compiler knows how to copy a register
   19147      into another register of the proper class in order to make an
   19148      instruction valid.
   19149 
   19150    * A nonoffsettable memory reference can be reloaded by copying the
   19151      address into a register.  So if the constraint uses the letter
   19152      `o', all memory references are taken care of.
   19153 
   19154    * A constant operand can be reloaded by allocating space in memory to
   19155      hold it as preinitialized data.  Then the memory reference can be
   19156      used in place of the constant.  So if the constraint uses the
   19157      letters `o' or `m', constant operands are not a problem.
   19158 
   19159    * If the constraint permits a constant and a pseudo register used in
   19160      an insn was not allocated to a hard register and is equivalent to
   19161      a constant, the register will be replaced with the constant.  If
   19162      the predicate does not permit a constant and the insn is
   19163      re-recognized for some reason, the compiler will crash.  Thus the
   19164      predicate must always recognize any objects allowed by the
   19165      constraint.
   19166 
   19167  If the operand's predicate can recognize registers, but the constraint
   19168 does not permit them, it can make the compiler crash.  When this
   19169 operand happens to be a register, the reload pass will be stymied,
   19170 because it does not know how to copy a register temporarily into memory.
   19171 
   19172  If the predicate accepts a unary operator, the constraint applies to
   19173 the operand.  For example, the MIPS processor at ISA level 3 supports an
   19174 instruction which adds two registers in `SImode' to produce a `DImode'
   19175 result, but only if the registers are correctly sign extended.  This
   19176 predicate for the input operands accepts a `sign_extend' of an `SImode'
   19177 register.  Write the constraint to indicate the type of register that
   19178 is required for the operand of the `sign_extend'.
   19179 
   19180 
   19181 File: gccint.info,  Node: Multi-Alternative,  Next: Class Preferences,  Prev: Simple Constraints,  Up: Constraints
   19182 
   19183 16.8.2 Multiple Alternative Constraints
   19184 ---------------------------------------
   19185 
   19186 Sometimes a single instruction has multiple alternative sets of possible
   19187 operands.  For example, on the 68000, a logical-or instruction can
   19188 combine register or an immediate value into memory, or it can combine
   19189 any kind of operand into a register; but it cannot combine one memory
   19190 location into another.
   19191 
   19192  These constraints are represented as multiple alternatives.  An
   19193 alternative can be described by a series of letters for each operand.
   19194 The overall constraint for an operand is made from the letters for this
   19195 operand from the first alternative, a comma, the letters for this
   19196 operand from the second alternative, a comma, and so on until the last
   19197 alternative.  Here is how it is done for fullword logical-or on the
   19198 68000:
   19199 
   19200      (define_insn "iorsi3"
   19201        [(set (match_operand:SI 0 "general_operand" "=m,d")
   19202              (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
   19203                      (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
   19204        ...)
   19205 
   19206  The first alternative has `m' (memory) for operand 0, `0' for operand
   19207 1 (meaning it must match operand 0), and `dKs' for operand 2.  The
   19208 second alternative has `d' (data register) for operand 0, `0' for
   19209 operand 1, and `dmKs' for operand 2.  The `=' and `%' in the
   19210 constraints apply to all the alternatives; their meaning is explained
   19211 in the next section (*note Class Preferences::).
   19212 
   19213  If all the operands fit any one alternative, the instruction is valid.
   19214 Otherwise, for each alternative, the compiler counts how many
   19215 instructions must be added to copy the operands so that that
   19216 alternative applies.  The alternative requiring the least copying is
   19217 chosen.  If two alternatives need the same amount of copying, the one
   19218 that comes first is chosen.  These choices can be altered with the `?'
   19219 and `!' characters:
   19220 
   19221 `?'
   19222      Disparage slightly the alternative that the `?' appears in, as a
   19223      choice when no alternative applies exactly.  The compiler regards
   19224      this alternative as one unit more costly for each `?' that appears
   19225      in it.
   19226 
   19227 `!'
   19228      Disparage severely the alternative that the `!' appears in.  This
   19229      alternative can still be used if it fits without reloading, but if
   19230      reloading is needed, some other alternative will be used.
   19231 
   19232  When an insn pattern has multiple alternatives in its constraints,
   19233 often the appearance of the assembler code is determined mostly by which
   19234 alternative was matched.  When this is so, the C code for writing the
   19235 assembler code can use the variable `which_alternative', which is the
   19236 ordinal number of the alternative that was actually satisfied (0 for
   19237 the first, 1 for the second alternative, etc.).  *Note Output
   19238 Statement::.
   19239 
   19240 
   19241 File: gccint.info,  Node: Class Preferences,  Next: Modifiers,  Prev: Multi-Alternative,  Up: Constraints
   19242 
   19243 16.8.3 Register Class Preferences
   19244 ---------------------------------
   19245 
   19246 The operand constraints have another function: they enable the compiler
   19247 to decide which kind of hardware register a pseudo register is best
   19248 allocated to.  The compiler examines the constraints that apply to the
   19249 insns that use the pseudo register, looking for the machine-dependent
   19250 letters such as `d' and `a' that specify classes of registers.  The
   19251 pseudo register is put in whichever class gets the most "votes".  The
   19252 constraint letters `g' and `r' also vote: they vote in favor of a
   19253 general register.  The machine description says which registers are
   19254 considered general.
   19255 
   19256  Of course, on some machines all registers are equivalent, and no
   19257 register classes are defined.  Then none of this complexity is relevant.
   19258 
   19259 
   19260 File: gccint.info,  Node: Modifiers,  Next: Disable Insn Alternatives,  Prev: Class Preferences,  Up: Constraints
   19261 
   19262 16.8.4 Constraint Modifier Characters
   19263 -------------------------------------
   19264 
   19265 Here are constraint modifier characters.
   19266 
   19267 `='
   19268      Means that this operand is write-only for this instruction: the
   19269      previous value is discarded and replaced by output data.
   19270 
   19271 `+'
   19272      Means that this operand is both read and written by the
   19273      instruction.
   19274 
   19275      When the compiler fixes up the operands to satisfy the constraints,
   19276      it needs to know which operands are inputs to the instruction and
   19277      which are outputs from it.  `=' identifies an output; `+'
   19278      identifies an operand that is both input and output; all other
   19279      operands are assumed to be input only.
   19280 
   19281      If you specify `=' or `+' in a constraint, you put it in the first
   19282      character of the constraint string.
   19283 
   19284 `&'
   19285      Means (in a particular alternative) that this operand is an
   19286      "earlyclobber" operand, which is modified before the instruction is
   19287      finished using the input operands.  Therefore, this operand may
   19288      not lie in a register that is used as an input operand or as part
   19289      of any memory address.
   19290 
   19291      `&' applies only to the alternative in which it is written.  In
   19292      constraints with multiple alternatives, sometimes one alternative
   19293      requires `&' while others do not.  See, for example, the `movdf'
   19294      insn of the 68000.
   19295 
   19296      An input operand can be tied to an earlyclobber operand if its only
   19297      use as an input occurs before the early result is written.  Adding
   19298      alternatives of this form often allows GCC to produce better code
   19299      when only some of the inputs can be affected by the earlyclobber.
   19300      See, for example, the `mulsi3' insn of the ARM.
   19301 
   19302      `&' does not obviate the need to write `='.
   19303 
   19304 `%'
   19305      Declares the instruction to be commutative for this operand and the
   19306      following operand.  This means that the compiler may interchange
   19307      the two operands if that is the cheapest way to make all operands
   19308      fit the constraints.  This is often used in patterns for addition
   19309      instructions that really have only two operands: the result must
   19310      go in one of the arguments.  Here for example, is how the 68000
   19311      halfword-add instruction is defined:
   19312 
   19313           (define_insn "addhi3"
   19314             [(set (match_operand:HI 0 "general_operand" "=m,r")
   19315                (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
   19316                         (match_operand:HI 2 "general_operand" "di,g")))]
   19317             ...)
   19318      GCC can only handle one commutative pair in an asm; if you use
   19319      more, the compiler may fail.  Note that you need not use the
   19320      modifier if the two alternatives are strictly identical; this
   19321      would only waste time in the reload pass.  The modifier is not
   19322      operational after register allocation, so the result of
   19323      `define_peephole2' and `define_split's performed after reload
   19324      cannot rely on `%' to make the intended insn match.
   19325 
   19326 `#'
   19327      Says that all following characters, up to the next comma, are to be
   19328      ignored as a constraint.  They are significant only for choosing
   19329      register preferences.
   19330 
   19331 `*'
   19332      Says that the following character should be ignored when choosing
   19333      register preferences.  `*' has no effect on the meaning of the
   19334      constraint as a constraint, and no effect on reloading.
   19335 
   19336      Here is an example: the 68000 has an instruction to sign-extend a
   19337      halfword in a data register, and can also sign-extend a value by
   19338      copying it into an address register.  While either kind of
   19339      register is acceptable, the constraints on an address-register
   19340      destination are less strict, so it is best if register allocation
   19341      makes an address register its goal.  Therefore, `*' is used so
   19342      that the `d' constraint letter (for data register) is ignored when
   19343      computing register preferences.
   19344 
   19345           (define_insn "extendhisi2"
   19346             [(set (match_operand:SI 0 "general_operand" "=*d,a")
   19347                   (sign_extend:SI
   19348                    (match_operand:HI 1 "general_operand" "0,g")))]
   19349             ...)
   19350 
   19351 
   19352 File: gccint.info,  Node: Machine Constraints,  Next: Define Constraints,  Prev: Disable Insn Alternatives,  Up: Constraints
   19353 
   19354 16.8.5 Constraints for Particular Machines
   19355 ------------------------------------------
   19356 
   19357 Whenever possible, you should use the general-purpose constraint letters
   19358 in `asm' arguments, since they will convey meaning more readily to
   19359 people reading your code.  Failing that, use the constraint letters
   19360 that usually have very similar meanings across architectures.  The most
   19361 commonly used constraints are `m' and `r' (for memory and
   19362 general-purpose registers respectively; *note Simple Constraints::), and
   19363 `I', usually the letter indicating the most common immediate-constant
   19364 format.
   19365 
   19366  Each architecture defines additional constraints.  These constraints
   19367 are used by the compiler itself for instruction generation, as well as
   19368 for `asm' statements; therefore, some of the constraints are not
   19369 particularly useful for `asm'.  Here is a summary of some of the
   19370 machine-dependent constraints available on some particular machines; it
   19371 includes both constraints that are useful for `asm' and constraints
   19372 that aren't.  The compiler source file mentioned in the table heading
   19373 for each architecture is the definitive reference for the meanings of
   19374 that architecture's constraints.
   19375 
   19376 _ARM family--`config/arm/arm.h'_
   19377 
   19378     `f'
   19379           Floating-point register
   19380 
   19381     `w'
   19382           VFP floating-point register
   19383 
   19384     `F'
   19385           One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
   19386           4.0, 5.0 or 10.0
   19387 
   19388     `G'
   19389           Floating-point constant that would satisfy the constraint `F'
   19390           if it were negated
   19391 
   19392     `I'
   19393           Integer that is valid as an immediate operand in a data
   19394           processing instruction.  That is, an integer in the range 0
   19395           to 255 rotated by a multiple of 2
   19396 
   19397     `J'
   19398           Integer in the range -4095 to 4095
   19399 
   19400     `K'
   19401           Integer that satisfies constraint `I' when inverted (ones
   19402           complement)
   19403 
   19404     `L'
   19405           Integer that satisfies constraint `I' when negated (twos
   19406           complement)
   19407 
   19408     `M'
   19409           Integer in the range 0 to 32
   19410 
   19411     `Q'
   19412           A memory reference where the exact address is in a single
   19413           register (``m'' is preferable for `asm' statements)
   19414 
   19415     `R'
   19416           An item in the constant pool
   19417 
   19418     `S'
   19419           A symbol in the text segment of the current file
   19420 
   19421     `Uv'
   19422           A memory reference suitable for VFP load/store insns
   19423           (reg+constant offset)
   19424 
   19425     `Uy'
   19426           A memory reference suitable for iWMMXt load/store
   19427           instructions.
   19428 
   19429     `Uq'
   19430           A memory reference suitable for the ARMv4 ldrsb instruction.
   19431 
   19432 _AVR family--`config/avr/constraints.md'_
   19433 
   19434     `l'
   19435           Registers from r0 to r15
   19436 
   19437     `a'
   19438           Registers from r16 to r23
   19439 
   19440     `d'
   19441           Registers from r16 to r31
   19442 
   19443     `w'
   19444           Registers from r24 to r31.  These registers can be used in
   19445           `adiw' command
   19446 
   19447     `e'
   19448           Pointer register (r26-r31)
   19449 
   19450     `b'
   19451           Base pointer register (r28-r31)
   19452 
   19453     `q'
   19454           Stack pointer register (SPH:SPL)
   19455 
   19456     `t'
   19457           Temporary register r0
   19458 
   19459     `x'
   19460           Register pair X (r27:r26)
   19461 
   19462     `y'
   19463           Register pair Y (r29:r28)
   19464 
   19465     `z'
   19466           Register pair Z (r31:r30)
   19467 
   19468     `I'
   19469           Constant greater than -1, less than 64
   19470 
   19471     `J'
   19472           Constant greater than -64, less than 1
   19473 
   19474     `K'
   19475           Constant integer 2
   19476 
   19477     `L'
   19478           Constant integer 0
   19479 
   19480     `M'
   19481           Constant that fits in 8 bits
   19482 
   19483     `N'
   19484           Constant integer -1
   19485 
   19486     `O'
   19487           Constant integer 8, 16, or 24
   19488 
   19489     `P'
   19490           Constant integer 1
   19491 
   19492     `G'
   19493           A floating point constant 0.0
   19494 
   19495     `R'
   19496           Integer constant in the range -6 ... 5.
   19497 
   19498     `Q'
   19499           A memory address based on Y or Z pointer with displacement.
   19500 
   19501 _CRX Architecture--`config/crx/crx.h'_
   19502 
   19503     `b'
   19504           Registers from r0 to r14 (registers without stack pointer)
   19505 
   19506     `l'
   19507           Register r16 (64-bit accumulator lo register)
   19508 
   19509     `h'
   19510           Register r17 (64-bit accumulator hi register)
   19511 
   19512     `k'
   19513           Register pair r16-r17. (64-bit accumulator lo-hi pair)
   19514 
   19515     `I'
   19516           Constant that fits in 3 bits
   19517 
   19518     `J'
   19519           Constant that fits in 4 bits
   19520 
   19521     `K'
   19522           Constant that fits in 5 bits
   19523 
   19524     `L'
   19525           Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48
   19526 
   19527     `G'
   19528           Floating point constant that is legal for store immediate
   19529 
   19530 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_
   19531 
   19532     `a'
   19533           General register 1
   19534 
   19535     `f'
   19536           Floating point register
   19537 
   19538     `q'
   19539           Shift amount register
   19540 
   19541     `x'
   19542           Floating point register (deprecated)
   19543 
   19544     `y'
   19545           Upper floating point register (32-bit), floating point
   19546           register (64-bit)
   19547 
   19548     `Z'
   19549           Any register
   19550 
   19551     `I'
   19552           Signed 11-bit integer constant
   19553 
   19554     `J'
   19555           Signed 14-bit integer constant
   19556 
   19557     `K'
   19558           Integer constant that can be deposited with a `zdepi'
   19559           instruction
   19560 
   19561     `L'
   19562           Signed 5-bit integer constant
   19563 
   19564     `M'
   19565           Integer constant 0
   19566 
   19567     `N'
   19568           Integer constant that can be loaded with a `ldil' instruction
   19569 
   19570     `O'
   19571           Integer constant whose value plus one is a power of 2
   19572 
   19573     `P'
   19574           Integer constant that can be used for `and' operations in
   19575           `depi' and `extru' instructions
   19576 
   19577     `S'
   19578           Integer constant 31
   19579 
   19580     `U'
   19581           Integer constant 63
   19582 
   19583     `G'
   19584           Floating-point constant 0.0
   19585 
   19586     `A'
   19587           A `lo_sum' data-linkage-table memory operand
   19588 
   19589     `Q'
   19590           A memory operand that can be used as the destination operand
   19591           of an integer store instruction
   19592 
   19593     `R'
   19594           A scaled or unscaled indexed memory operand
   19595 
   19596     `T'
   19597           A memory operand for floating-point loads and stores
   19598 
   19599     `W'
   19600           A register indirect memory operand
   19601 
   19602 _picoChip family--`picochip.h'_
   19603 
   19604     `k'
   19605           Stack register.
   19606 
   19607     `f'
   19608           Pointer register.  A register which can be used to access
   19609           memory without supplying an offset.  Any other register can
   19610           be used to access memory, but will need a constant offset.
   19611           In the case of the offset being zero, it is more efficient to
   19612           use a pointer register, since this reduces code size.
   19613 
   19614     `t'
   19615           A twin register.  A register which may be paired with an
   19616           adjacent register to create a 32-bit register.
   19617 
   19618     `a'
   19619           Any absolute memory address (e.g., symbolic constant, symbolic
   19620           constant + offset).
   19621 
   19622     `I'
   19623           4-bit signed integer.
   19624 
   19625     `J'
   19626           4-bit unsigned integer.
   19627 
   19628     `K'
   19629           8-bit signed integer.
   19630 
   19631     `M'
   19632           Any constant whose absolute value is no greater than 4-bits.
   19633 
   19634     `N'
   19635           10-bit signed integer
   19636 
   19637     `O'
   19638           16-bit signed integer.
   19639 
   19640 
   19641 _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
   19642 
   19643     `b'
   19644           Address base register
   19645 
   19646     `d'
   19647           Floating point register (containing 64-bit value)
   19648 
   19649     `f'
   19650           Floating point register (containing 32-bit value)
   19651 
   19652     `v'
   19653           Altivec vector register
   19654 
   19655     `wd'
   19656           VSX vector register to hold vector double data
   19657 
   19658     `wf'
   19659           VSX vector register to hold vector float data
   19660 
   19661     `ws'
   19662           VSX vector register to hold scalar float data
   19663 
   19664     `wa'
   19665           Any VSX register
   19666 
   19667     `h'
   19668           `MQ', `CTR', or `LINK' register
   19669 
   19670     `q'
   19671           `MQ' register
   19672 
   19673     `c'
   19674           `CTR' register
   19675 
   19676     `l'
   19677           `LINK' register
   19678 
   19679     `x'
   19680           `CR' register (condition register) number 0
   19681 
   19682     `y'
   19683           `CR' register (condition register)
   19684 
   19685     `z'
   19686           `XER[CA]' carry bit (part of the XER register)
   19687 
   19688     `I'
   19689           Signed 16-bit constant
   19690 
   19691     `J'
   19692           Unsigned 16-bit constant shifted left 16 bits (use `L'
   19693           instead for `SImode' constants)
   19694 
   19695     `K'
   19696           Unsigned 16-bit constant
   19697 
   19698     `L'
   19699           Signed 16-bit constant shifted left 16 bits
   19700 
   19701     `M'
   19702           Constant larger than 31
   19703 
   19704     `N'
   19705           Exact power of 2
   19706 
   19707     `O'
   19708           Zero
   19709 
   19710     `P'
   19711           Constant whose negation is a signed 16-bit constant
   19712 
   19713     `G'
   19714           Floating point constant that can be loaded into a register
   19715           with one instruction per word
   19716 
   19717     `H'
   19718           Integer/Floating point constant that can be loaded into a
   19719           register using three instructions
   19720 
   19721     `m'
   19722           Memory operand.  Normally, `m' does not allow addresses that
   19723           update the base register.  If `<' or `>' constraint is also
   19724           used, they are allowed and therefore on PowerPC targets in
   19725           that case it is only safe to use `m<>' in an `asm' statement
   19726           if that `asm' statement accesses the operand exactly once.
   19727           The `asm' statement must also use `%U<OPNO>' as a placeholder
   19728           for the "update" flag in the corresponding load or store
   19729           instruction.  For example:
   19730 
   19731                asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
   19732 
   19733           is correct but:
   19734 
   19735                asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
   19736 
   19737           is not.
   19738 
   19739     `es'
   19740           A "stable" memory operand; that is, one which does not
   19741           include any automodification of the base register.  This used
   19742           to be useful when `m' allowed automodification of the base
   19743           register, but as those are now only allowed when `<' or `>'
   19744           is used, `es' is basically the same as `m' without `<' and
   19745           `>'.
   19746 
   19747     `Q'
   19748           Memory operand that is an offset from a register (it is
   19749           usually better to use `m' or `es' in `asm' statements)
   19750 
   19751     `Z'
   19752           Memory operand that is an indexed or indirect from a register
   19753           (it is usually better to use `m' or `es' in `asm' statements)
   19754 
   19755     `R'
   19756           AIX TOC entry
   19757 
   19758     `a'
   19759           Address operand that is an indexed or indirect from a
   19760           register (`p' is preferable for `asm' statements)
   19761 
   19762     `S'
   19763           Constant suitable as a 64-bit mask operand
   19764 
   19765     `T'
   19766           Constant suitable as a 32-bit mask operand
   19767 
   19768     `U'
   19769           System V Release 4 small data area reference
   19770 
   19771     `t'
   19772           AND masks that can be performed by two rldic{l, r}
   19773           instructions
   19774 
   19775     `W'
   19776           Vector constant that does not require memory
   19777 
   19778     `j'
   19779           Vector constant that is all zeros.
   19780 
   19781 
   19782 _Intel 386--`config/i386/constraints.md'_
   19783 
   19784     `R'
   19785           Legacy register--the eight integer registers available on all
   19786           i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
   19787 
   19788     `q'
   19789           Any register accessible as `Rl'.  In 32-bit mode, `a', `b',
   19790           `c', and `d'; in 64-bit mode, any integer register.
   19791 
   19792     `Q'
   19793           Any register accessible as `Rh': `a', `b', `c', and `d'.
   19794 
   19795     `l'
   19796           Any register that can be used as the index in a base+index
   19797           memory access: that is, any general register except the stack
   19798           pointer.
   19799 
   19800     `a'
   19801           The `a' register.
   19802 
   19803     `b'
   19804           The `b' register.
   19805 
   19806     `c'
   19807           The `c' register.
   19808 
   19809     `d'
   19810           The `d' register.
   19811 
   19812     `S'
   19813           The `si' register.
   19814 
   19815     `D'
   19816           The `di' register.
   19817 
   19818     `A'
   19819           The `a' and `d' registers.  This class is used for
   19820           instructions that return double word results in the `ax:dx'
   19821           register pair.  Single word values will be allocated either
   19822           in `ax' or `dx'.  For example on i386 the following
   19823           implements `rdtsc':
   19824 
   19825                unsigned long long rdtsc (void)
   19826                {
   19827                  unsigned long long tick;
   19828                  __asm__ __volatile__("rdtsc":"=A"(tick));
   19829                  return tick;
   19830                }
   19831 
   19832           This is not correct on x86_64 as it would allocate tick in
   19833           either `ax' or `dx'.  You have to use the following variant
   19834           instead:
   19835 
   19836                unsigned long long rdtsc (void)
   19837                {
   19838                  unsigned int tickl, tickh;
   19839                  __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
   19840                  return ((unsigned long long)tickh << 32)|tickl;
   19841                }
   19842 
   19843     `f'
   19844           Any 80387 floating-point (stack) register.
   19845 
   19846     `t'
   19847           Top of 80387 floating-point stack (`%st(0)').
   19848 
   19849     `u'
   19850           Second from top of 80387 floating-point stack (`%st(1)').
   19851 
   19852     `y'
   19853           Any MMX register.
   19854 
   19855     `x'
   19856           Any SSE register.
   19857 
   19858     `Yz'
   19859           First SSE register (`%xmm0').
   19860 
   19861     `Y2'
   19862           Any SSE register, when SSE2 is enabled.
   19863 
   19864     `Yi'
   19865           Any SSE register, when SSE2 and inter-unit moves are enabled.
   19866 
   19867     `Ym'
   19868           Any MMX register, when inter-unit moves are enabled.
   19869 
   19870     `I'
   19871           Integer constant in the range 0 ... 31, for 32-bit shifts.
   19872 
   19873     `J'
   19874           Integer constant in the range 0 ... 63, for 64-bit shifts.
   19875 
   19876     `K'
   19877           Signed 8-bit integer constant.
   19878 
   19879     `L'
   19880           `0xFF' or `0xFFFF', for andsi as a zero-extending move.
   19881 
   19882     `M'
   19883           0, 1, 2, or 3 (shifts for the `lea' instruction).
   19884 
   19885     `N'
   19886           Unsigned 8-bit integer constant (for `in' and `out'
   19887           instructions).
   19888 
   19889     `O'
   19890           Integer constant in the range 0 ... 127, for 128-bit shifts.
   19891 
   19892     `G'
   19893           Standard 80387 floating point constant.
   19894 
   19895     `C'
   19896           Standard SSE floating point constant.
   19897 
   19898     `e'
   19899           32-bit signed integer constant, or a symbolic reference known
   19900           to fit that range (for immediate operands in sign-extending
   19901           x86-64 instructions).
   19902 
   19903     `Z'
   19904           32-bit unsigned integer constant, or a symbolic reference
   19905           known to fit that range (for immediate operands in
   19906           zero-extending x86-64 instructions).
   19907 
   19908 
   19909 _Intel IA-64--`config/ia64/ia64.h'_
   19910 
   19911     `a'
   19912           General register `r0' to `r3' for `addl' instruction
   19913 
   19914     `b'
   19915           Branch register
   19916 
   19917     `c'
   19918           Predicate register (`c' as in "conditional")
   19919 
   19920     `d'
   19921           Application register residing in M-unit
   19922 
   19923     `e'
   19924           Application register residing in I-unit
   19925 
   19926     `f'
   19927           Floating-point register
   19928 
   19929     `m'
   19930           Memory operand.  If used together with `<' or `>', the
   19931           operand can have postincrement and postdecrement which
   19932           require printing with `%Pn' on IA-64.
   19933 
   19934     `G'
   19935           Floating-point constant 0.0 or 1.0
   19936 
   19937     `I'
   19938           14-bit signed integer constant
   19939 
   19940     `J'
   19941           22-bit signed integer constant
   19942 
   19943     `K'
   19944           8-bit signed integer constant for logical instructions
   19945 
   19946     `L'
   19947           8-bit adjusted signed integer constant for compare pseudo-ops
   19948 
   19949     `M'
   19950           6-bit unsigned integer constant for shift counts
   19951 
   19952     `N'
   19953           9-bit signed integer constant for load and store
   19954           postincrements
   19955 
   19956     `O'
   19957           The constant zero
   19958 
   19959     `P'
   19960           0 or -1 for `dep' instruction
   19961 
   19962     `Q'
   19963           Non-volatile memory for floating-point loads and stores
   19964 
   19965     `R'
   19966           Integer constant in the range 1 to 4 for `shladd' instruction
   19967 
   19968     `S'
   19969           Memory operand except postincrement and postdecrement.  This
   19970           is now roughly the same as `m' when not used together with `<'
   19971           or `>'.
   19972 
   19973 _FRV--`config/frv/frv.h'_
   19974 
   19975     `a'
   19976           Register in the class `ACC_REGS' (`acc0' to `acc7').
   19977 
   19978     `b'
   19979           Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
   19980 
   19981     `c'
   19982           Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
   19983           to `icc3').
   19984 
   19985     `d'
   19986           Register in the class `GPR_REGS' (`gr0' to `gr63').
   19987 
   19988     `e'
   19989           Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
   19990           registers are excluded not in the class but through the use
   19991           of a machine mode larger than 4 bytes.
   19992 
   19993     `f'
   19994           Register in the class `FPR_REGS' (`fr0' to `fr63').
   19995 
   19996     `h'
   19997           Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
   19998           registers are excluded not in the class but through the use
   19999           of a machine mode larger than 4 bytes.
   20000 
   20001     `l'
   20002           Register in the class `LR_REG' (the `lr' register).
   20003 
   20004     `q'
   20005           Register in the class `QUAD_REGS' (`gr2' to `gr63').
   20006           Register numbers not divisible by 4 are excluded not in the
   20007           class but through the use of a machine mode larger than 8
   20008           bytes.
   20009 
   20010     `t'
   20011           Register in the class `ICC_REGS' (`icc0' to `icc3').
   20012 
   20013     `u'
   20014           Register in the class `FCC_REGS' (`fcc0' to `fcc3').
   20015 
   20016     `v'
   20017           Register in the class `ICR_REGS' (`cc4' to `cc7').
   20018 
   20019     `w'
   20020           Register in the class `FCR_REGS' (`cc0' to `cc3').
   20021 
   20022     `x'
   20023           Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
   20024           Register numbers not divisible by 4 are excluded not in the
   20025           class but through the use of a machine mode larger than 8
   20026           bytes.
   20027 
   20028     `z'
   20029           Register in the class `SPR_REGS' (`lcr' and `lr').
   20030 
   20031     `A'
   20032           Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
   20033 
   20034     `B'
   20035           Register in the class `ACCG_REGS' (`accg0' to `accg7').
   20036 
   20037     `C'
   20038           Register in the class `CR_REGS' (`cc0' to `cc7').
   20039 
   20040     `G'
   20041           Floating point constant zero
   20042 
   20043     `I'
   20044           6-bit signed integer constant
   20045 
   20046     `J'
   20047           10-bit signed integer constant
   20048 
   20049     `L'
   20050           16-bit signed integer constant
   20051 
   20052     `M'
   20053           16-bit unsigned integer constant
   20054 
   20055     `N'
   20056           12-bit signed integer constant that is negative--i.e. in the
   20057           range of -2048 to -1
   20058 
   20059     `O'
   20060           Constant zero
   20061 
   20062     `P'
   20063           12-bit signed integer constant that is greater than
   20064           zero--i.e. in the range of 1 to 2047.
   20065 
   20066 
   20067 _Blackfin family--`config/bfin/constraints.md'_
   20068 
   20069     `a'
   20070           P register
   20071 
   20072     `d'
   20073           D register
   20074 
   20075     `z'
   20076           A call clobbered P register.
   20077 
   20078     `qN'
   20079           A single register.  If N is in the range 0 to 7, the
   20080           corresponding D register.  If it is `A', then the register P0.
   20081 
   20082     `D'
   20083           Even-numbered D register
   20084 
   20085     `W'
   20086           Odd-numbered D register
   20087 
   20088     `e'
   20089           Accumulator register.
   20090 
   20091     `A'
   20092           Even-numbered accumulator register.
   20093 
   20094     `B'
   20095           Odd-numbered accumulator register.
   20096 
   20097     `b'
   20098           I register
   20099 
   20100     `v'
   20101           B register
   20102 
   20103     `f'
   20104           M register
   20105 
   20106     `c'
   20107           Registers used for circular buffering, i.e. I, B, or L
   20108           registers.
   20109 
   20110     `C'
   20111           The CC register.
   20112 
   20113     `t'
   20114           LT0 or LT1.
   20115 
   20116     `k'
   20117           LC0 or LC1.
   20118 
   20119     `u'
   20120           LB0 or LB1.
   20121 
   20122     `x'
   20123           Any D, P, B, M, I or L register.
   20124 
   20125     `y'
   20126           Additional registers typically used only in prologues and
   20127           epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
   20128           USP.
   20129 
   20130     `w'
   20131           Any register except accumulators or CC.
   20132 
   20133     `Ksh'
   20134           Signed 16 bit integer (in the range -32768 to 32767)
   20135 
   20136     `Kuh'
   20137           Unsigned 16 bit integer (in the range 0 to 65535)
   20138 
   20139     `Ks7'
   20140           Signed 7 bit integer (in the range -64 to 63)
   20141 
   20142     `Ku7'
   20143           Unsigned 7 bit integer (in the range 0 to 127)
   20144 
   20145     `Ku5'
   20146           Unsigned 5 bit integer (in the range 0 to 31)
   20147 
   20148     `Ks4'
   20149           Signed 4 bit integer (in the range -8 to 7)
   20150 
   20151     `Ks3'
   20152           Signed 3 bit integer (in the range -3 to 4)
   20153 
   20154     `Ku3'
   20155           Unsigned 3 bit integer (in the range 0 to 7)
   20156 
   20157     `PN'
   20158           Constant N, where N is a single-digit constant in the range 0
   20159           to 4.
   20160 
   20161     `PA'
   20162           An integer equal to one of the MACFLAG_XXX constants that is
   20163           suitable for use with either accumulator.
   20164 
   20165     `PB'
   20166           An integer equal to one of the MACFLAG_XXX constants that is
   20167           suitable for use only with accumulator A1.
   20168 
   20169     `M1'
   20170           Constant 255.
   20171 
   20172     `M2'
   20173           Constant 65535.
   20174 
   20175     `J'
   20176           An integer constant with exactly a single bit set.
   20177 
   20178     `L'
   20179           An integer constant with all bits set except exactly one.
   20180 
   20181     `H'
   20182 
   20183     `Q'
   20184           Any SYMBOL_REF.
   20185 
   20186 _M32C--`config/m32c/m32c.c'_
   20187 
   20188     `Rsp'
   20189     `Rfb'
   20190     `Rsb'
   20191           `$sp', `$fb', `$sb'.
   20192 
   20193     `Rcr'
   20194           Any control register, when they're 16 bits wide (nothing if
   20195           control registers are 24 bits wide)
   20196 
   20197     `Rcl'
   20198           Any control register, when they're 24 bits wide.
   20199 
   20200     `R0w'
   20201     `R1w'
   20202     `R2w'
   20203     `R3w'
   20204           $r0, $r1, $r2, $r3.
   20205 
   20206     `R02'
   20207           $r0 or $r2, or $r2r0 for 32 bit values.
   20208 
   20209     `R13'
   20210           $r1 or $r3, or $r3r1 for 32 bit values.
   20211 
   20212     `Rdi'
   20213           A register that can hold a 64 bit value.
   20214 
   20215     `Rhl'
   20216           $r0 or $r1 (registers with addressable high/low bytes)
   20217 
   20218     `R23'
   20219           $r2 or $r3
   20220 
   20221     `Raa'
   20222           Address registers
   20223 
   20224     `Raw'
   20225           Address registers when they're 16 bits wide.
   20226 
   20227     `Ral'
   20228           Address registers when they're 24 bits wide.
   20229 
   20230     `Rqi'
   20231           Registers that can hold QI values.
   20232 
   20233     `Rad'
   20234           Registers that can be used with displacements ($a0, $a1, $sb).
   20235 
   20236     `Rsi'
   20237           Registers that can hold 32 bit values.
   20238 
   20239     `Rhi'
   20240           Registers that can hold 16 bit values.
   20241 
   20242     `Rhc'
   20243           Registers chat can hold 16 bit values, including all control
   20244           registers.
   20245 
   20246     `Rra'
   20247           $r0 through R1, plus $a0 and $a1.
   20248 
   20249     `Rfl'
   20250           The flags register.
   20251 
   20252     `Rmm'
   20253           The memory-based pseudo-registers $mem0 through $mem15.
   20254 
   20255     `Rpi'
   20256           Registers that can hold pointers (16 bit registers for r8c,
   20257           m16c; 24 bit registers for m32cm, m32c).
   20258 
   20259     `Rpa'
   20260           Matches multiple registers in a PARALLEL to form a larger
   20261           register.  Used to match function return values.
   20262 
   20263     `Is3'
   20264           -8 ... 7
   20265 
   20266     `IS1'
   20267           -128 ... 127
   20268 
   20269     `IS2'
   20270           -32768 ... 32767
   20271 
   20272     `IU2'
   20273           0 ... 65535
   20274 
   20275     `In4'
   20276           -8 ... -1 or 1 ... 8
   20277 
   20278     `In5'
   20279           -16 ... -1 or 1 ... 16
   20280 
   20281     `In6'
   20282           -32 ... -1 or 1 ... 32
   20283 
   20284     `IM2'
   20285           -65536 ... -1
   20286 
   20287     `Ilb'
   20288           An 8 bit value with exactly one bit set.
   20289 
   20290     `Ilw'
   20291           A 16 bit value with exactly one bit set.
   20292 
   20293     `Sd'
   20294           The common src/dest memory addressing modes.
   20295 
   20296     `Sa'
   20297           Memory addressed using $a0 or $a1.
   20298 
   20299     `Si'
   20300           Memory addressed with immediate addresses.
   20301 
   20302     `Ss'
   20303           Memory addressed using the stack pointer ($sp).
   20304 
   20305     `Sf'
   20306           Memory addressed using the frame base register ($fb).
   20307 
   20308     `Ss'
   20309           Memory addressed using the small base register ($sb).
   20310 
   20311     `S1'
   20312           $r1h
   20313 
   20314 _MeP--`config/mep/constraints.md'_
   20315 
   20316     `a'
   20317           The $sp register.
   20318 
   20319     `b'
   20320           The $tp register.
   20321 
   20322     `c'
   20323           Any control register.
   20324 
   20325     `d'
   20326           Either the $hi or the $lo register.
   20327 
   20328     `em'
   20329           Coprocessor registers that can be directly loaded ($c0-$c15).
   20330 
   20331     `ex'
   20332           Coprocessor registers that can be moved to each other.
   20333 
   20334     `er'
   20335           Coprocessor registers that can be moved to core registers.
   20336 
   20337     `h'
   20338           The $hi register.
   20339 
   20340     `j'
   20341           The $rpc register.
   20342 
   20343     `l'
   20344           The $lo register.
   20345 
   20346     `t'
   20347           Registers which can be used in $tp-relative addressing.
   20348 
   20349     `v'
   20350           The $gp register.
   20351 
   20352     `x'
   20353           The coprocessor registers.
   20354 
   20355     `y'
   20356           The coprocessor control registers.
   20357 
   20358     `z'
   20359           The $0 register.
   20360 
   20361     `A'
   20362           User-defined register set A.
   20363 
   20364     `B'
   20365           User-defined register set B.
   20366 
   20367     `C'
   20368           User-defined register set C.
   20369 
   20370     `D'
   20371           User-defined register set D.
   20372 
   20373     `I'
   20374           Offsets for $gp-rel addressing.
   20375 
   20376     `J'
   20377           Constants that can be used directly with boolean insns.
   20378 
   20379     `K'
   20380           Constants that can be moved directly to registers.
   20381 
   20382     `L'
   20383           Small constants that can be added to registers.
   20384 
   20385     `M'
   20386           Long shift counts.
   20387 
   20388     `N'
   20389           Small constants that can be compared to registers.
   20390 
   20391     `O'
   20392           Constants that can be loaded into the top half of registers.
   20393 
   20394     `S'
   20395           Signed 8-bit immediates.
   20396 
   20397     `T'
   20398           Symbols encoded for $tp-rel or $gp-rel addressing.
   20399 
   20400     `U'
   20401           Non-constant addresses for loading/saving coprocessor
   20402           registers.
   20403 
   20404     `W'
   20405           The top half of a symbol's value.
   20406 
   20407     `Y'
   20408           A register indirect address without offset.
   20409 
   20410     `Z'
   20411           Symbolic references to the control bus.
   20412 
   20413 
   20414 _MicroBlaze--`config/microblaze/constraints.md'_
   20415 
   20416     `d'
   20417           A general register (`r0' to `r31').
   20418 
   20419     `z'
   20420           A status register (`rmsr', `$fcc1' to `$fcc7').
   20421 
   20422 
   20423 _MIPS--`config/mips/constraints.md'_
   20424 
   20425     `d'
   20426           An address register.  This is equivalent to `r' unless
   20427           generating MIPS16 code.
   20428 
   20429     `f'
   20430           A floating-point register (if available).
   20431 
   20432     `h'
   20433           Formerly the `hi' register.  This constraint is no longer
   20434           supported.
   20435 
   20436     `l'
   20437           The `lo' register.  Use this register to store values that are
   20438           no bigger than a word.
   20439 
   20440     `x'
   20441           The concatenated `hi' and `lo' registers.  Use this register
   20442           to store doubleword values.
   20443 
   20444     `c'
   20445           A register suitable for use in an indirect jump.  This will
   20446           always be `$25' for `-mabicalls'.
   20447 
   20448     `v'
   20449           Register `$3'.  Do not use this constraint in new code; it is
   20450           retained only for compatibility with glibc.
   20451 
   20452     `y'
   20453           Equivalent to `r'; retained for backwards compatibility.
   20454 
   20455     `z'
   20456           A floating-point condition code register.
   20457 
   20458     `I'
   20459           A signed 16-bit constant (for arithmetic instructions).
   20460 
   20461     `J'
   20462           Integer zero.
   20463 
   20464     `K'
   20465           An unsigned 16-bit constant (for logic instructions).
   20466 
   20467     `L'
   20468           A signed 32-bit constant in which the lower 16 bits are zero.
   20469           Such constants can be loaded using `lui'.
   20470 
   20471     `M'
   20472           A constant that cannot be loaded using `lui', `addiu' or
   20473           `ori'.
   20474 
   20475     `N'
   20476           A constant in the range -65535 to -1 (inclusive).
   20477 
   20478     `O'
   20479           A signed 15-bit constant.
   20480 
   20481     `P'
   20482           A constant in the range 1 to 65535 (inclusive).
   20483 
   20484     `G'
   20485           Floating-point zero.
   20486 
   20487     `R'
   20488           An address that can be used in a non-macro load or store.
   20489 
   20490 _Motorola 680x0--`config/m68k/constraints.md'_
   20491 
   20492     `a'
   20493           Address register
   20494 
   20495     `d'
   20496           Data register
   20497 
   20498     `f'
   20499           68881 floating-point register, if available
   20500 
   20501     `I'
   20502           Integer in the range 1 to 8
   20503 
   20504     `J'
   20505           16-bit signed number
   20506 
   20507     `K'
   20508           Signed number whose magnitude is greater than 0x80
   20509 
   20510     `L'
   20511           Integer in the range -8 to -1
   20512 
   20513     `M'
   20514           Signed number whose magnitude is greater than 0x100
   20515 
   20516     `N'
   20517           Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
   20518 
   20519     `O'
   20520           16 (for rotate using swap)
   20521 
   20522     `P'
   20523           Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
   20524 
   20525     `R'
   20526           Numbers that mov3q can handle
   20527 
   20528     `G'
   20529           Floating point constant that is not a 68881 constant
   20530 
   20531     `S'
   20532           Operands that satisfy 'm' when -mpcrel is in effect
   20533 
   20534     `T'
   20535           Operands that satisfy 's' when -mpcrel is not in effect
   20536 
   20537     `Q'
   20538           Address register indirect addressing mode
   20539 
   20540     `U'
   20541           Register offset addressing
   20542 
   20543     `W'
   20544           const_call_operand
   20545 
   20546     `Cs'
   20547           symbol_ref or const
   20548 
   20549     `Ci'
   20550           const_int
   20551 
   20552     `C0'
   20553           const_int 0
   20554 
   20555     `Cj'
   20556           Range of signed numbers that don't fit in 16 bits
   20557 
   20558     `Cmvq'
   20559           Integers valid for mvq
   20560 
   20561     `Capsw'
   20562           Integers valid for a moveq followed by a swap
   20563 
   20564     `Cmvz'
   20565           Integers valid for mvz
   20566 
   20567     `Cmvs'
   20568           Integers valid for mvs
   20569 
   20570     `Ap'
   20571           push_operand
   20572 
   20573     `Ac'
   20574           Non-register operands allowed in clr
   20575 
   20576 
   20577 _Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_
   20578 
   20579     `a'
   20580           Register `a'
   20581 
   20582     `b'
   20583           Register `b'
   20584 
   20585     `d'
   20586           Register `d'
   20587 
   20588     `q'
   20589           An 8-bit register
   20590 
   20591     `t'
   20592           Temporary soft register _.tmp
   20593 
   20594     `u'
   20595           A soft register _.d1 to _.d31
   20596 
   20597     `w'
   20598           Stack pointer register
   20599 
   20600     `x'
   20601           Register `x'
   20602 
   20603     `y'
   20604           Register `y'
   20605 
   20606     `z'
   20607           Pseudo register `z' (replaced by `x' or `y' at the end)
   20608 
   20609     `A'
   20610           An address register: x, y or z
   20611 
   20612     `B'
   20613           An address register: x or y
   20614 
   20615     `D'
   20616           Register pair (x:d) to form a 32-bit value
   20617 
   20618     `L'
   20619           Constants in the range -65536 to 65535
   20620 
   20621     `M'
   20622           Constants whose 16-bit low part is zero
   20623 
   20624     `N'
   20625           Constant integer 1 or -1
   20626 
   20627     `O'
   20628           Constant integer 16
   20629 
   20630     `P'
   20631           Constants in the range -8 to 2
   20632 
   20633 
   20634 _Moxie--`config/moxie/constraints.md'_
   20635 
   20636     `A'
   20637           An absolute address
   20638 
   20639     `B'
   20640           An offset address
   20641 
   20642     `W'
   20643           A register indirect memory operand
   20644 
   20645     `I'
   20646           A constant in the range of 0 to 255.
   20647 
   20648     `N'
   20649           A constant in the range of 0 to -255.
   20650 
   20651 
   20652 _PDP-11--`config/pdp11/constraints.md'_
   20653 
   20654     `a'
   20655           Floating point registers AC0 through AC3.  These can be
   20656           loaded from/to memory with a single instruction.
   20657 
   20658     `d'
   20659           Odd numbered general registers (R1, R3, R5).  These are used
   20660           for 16-bit multiply operations.
   20661 
   20662     `f'
   20663           Any of the floating point registers (AC0 through AC5).
   20664 
   20665     `G'
   20666           Floating point constant 0.
   20667 
   20668     `I'
   20669           An integer constant that fits in 16 bits.
   20670 
   20671     `J'
   20672           An integer constant whose low order 16 bits are zero.
   20673 
   20674     `K'
   20675           An integer constant that does not meet the constraints for
   20676           codes `I' or `J'.
   20677 
   20678     `L'
   20679           The integer constant 1.
   20680 
   20681     `M'
   20682           The integer constant -1.
   20683 
   20684     `N'
   20685           The integer constant 0.
   20686 
   20687     `O'
   20688           Integer constants -4 through -1 and 1 through 4; shifts by
   20689           these amounts are handled as multiple single-bit shifts
   20690           rather than a single variable-length shift.
   20691 
   20692     `Q'
   20693           A memory reference which requires an additional word (address
   20694           or offset) after the opcode.
   20695 
   20696     `R'
   20697           A memory reference that is encoded within the opcode.
   20698 
   20699 
   20700 _RX--`config/rx/constraints.md'_
   20701 
   20702     `Q'
   20703           An address which does not involve register indirect
   20704           addressing or pre/post increment/decrement addressing.
   20705 
   20706     `Symbol'
   20707           A symbol reference.
   20708 
   20709     `Int08'
   20710           A constant in the range -256 to 255, inclusive.
   20711 
   20712     `Sint08'
   20713           A constant in the range -128 to 127, inclusive.
   20714 
   20715     `Sint16'
   20716           A constant in the range -32768 to 32767, inclusive.
   20717 
   20718     `Sint24'
   20719           A constant in the range -8388608 to 8388607, inclusive.
   20720 
   20721     `Uint04'
   20722           A constant in the range 0 to 15, inclusive.
   20723 
   20724 
   20725 _SPARC--`config/sparc/sparc.h'_
   20726 
   20727     `f'
   20728           Floating-point register on the SPARC-V8 architecture and
   20729           lower floating-point register on the SPARC-V9 architecture.
   20730 
   20731     `e'
   20732           Floating-point register.  It is equivalent to `f' on the
   20733           SPARC-V8 architecture and contains both lower and upper
   20734           floating-point registers on the SPARC-V9 architecture.
   20735 
   20736     `c'
   20737           Floating-point condition code register.
   20738 
   20739     `d'
   20740           Lower floating-point register.  It is only valid on the
   20741           SPARC-V9 architecture when the Visual Instruction Set is
   20742           available.
   20743 
   20744     `b'
   20745           Floating-point register.  It is only valid on the SPARC-V9
   20746           architecture when the Visual Instruction Set is available.
   20747 
   20748     `h'
   20749           64-bit global or out register for the SPARC-V8+ architecture.
   20750 
   20751     `D'
   20752           A vector constant
   20753 
   20754     `I'
   20755           Signed 13-bit constant
   20756 
   20757     `J'
   20758           Zero
   20759 
   20760     `K'
   20761           32-bit constant with the low 12 bits clear (a constant that
   20762           can be loaded with the `sethi' instruction)
   20763 
   20764     `L'
   20765           A constant in the range supported by `movcc' instructions
   20766 
   20767     `M'
   20768           A constant in the range supported by `movrcc' instructions
   20769 
   20770     `N'
   20771           Same as `K', except that it verifies that bits that are not
   20772           in the lower 32-bit range are all zero.  Must be used instead
   20773           of `K' for modes wider than `SImode'
   20774 
   20775     `O'
   20776           The constant 4096
   20777 
   20778     `G'
   20779           Floating-point zero
   20780 
   20781     `H'
   20782           Signed 13-bit constant, sign-extended to 32 or 64 bits
   20783 
   20784     `Q'
   20785           Floating-point constant whose integral representation can be
   20786           moved into an integer register using a single sethi
   20787           instruction
   20788 
   20789     `R'
   20790           Floating-point constant whose integral representation can be
   20791           moved into an integer register using a single mov instruction
   20792 
   20793     `S'
   20794           Floating-point constant whose integral representation can be
   20795           moved into an integer register using a high/lo_sum
   20796           instruction sequence
   20797 
   20798     `T'
   20799           Memory address aligned to an 8-byte boundary
   20800 
   20801     `U'
   20802           Even register
   20803 
   20804     `W'
   20805           Memory address for `e' constraint registers
   20806 
   20807     `Y'
   20808           Vector zero
   20809 
   20810 
   20811 _SPU--`config/spu/spu.h'_
   20812 
   20813     `a'
   20814           An immediate which can be loaded with the il/ila/ilh/ilhu
   20815           instructions.  const_int is treated as a 64 bit value.
   20816 
   20817     `c'
   20818           An immediate for and/xor/or instructions.  const_int is
   20819           treated as a 64 bit value.
   20820 
   20821     `d'
   20822           An immediate for the `iohl' instruction.  const_int is
   20823           treated as a 64 bit value.
   20824 
   20825     `f'
   20826           An immediate which can be loaded with `fsmbi'.
   20827 
   20828     `A'
   20829           An immediate which can be loaded with the il/ila/ilh/ilhu
   20830           instructions.  const_int is treated as a 32 bit value.
   20831 
   20832     `B'
   20833           An immediate for most arithmetic instructions.  const_int is
   20834           treated as a 32 bit value.
   20835 
   20836     `C'
   20837           An immediate for and/xor/or instructions.  const_int is
   20838           treated as a 32 bit value.
   20839 
   20840     `D'
   20841           An immediate for the `iohl' instruction.  const_int is
   20842           treated as a 32 bit value.
   20843 
   20844     `I'
   20845           A constant in the range [-64, 63] for shift/rotate
   20846           instructions.
   20847 
   20848     `J'
   20849           An unsigned 7-bit constant for conversion/nop/channel
   20850           instructions.
   20851 
   20852     `K'
   20853           A signed 10-bit constant for most arithmetic instructions.
   20854 
   20855     `M'
   20856           A signed 16 bit immediate for `stop'.
   20857 
   20858     `N'
   20859           An unsigned 16-bit constant for `iohl' and `fsmbi'.
   20860 
   20861     `O'
   20862           An unsigned 7-bit constant whose 3 least significant bits are
   20863           0.
   20864 
   20865     `P'
   20866           An unsigned 3-bit constant for 16-byte rotates and shifts
   20867 
   20868     `R'
   20869           Call operand, reg, for indirect calls
   20870 
   20871     `S'
   20872           Call operand, symbol, for relative calls.
   20873 
   20874     `T'
   20875           Call operand, const_int, for absolute calls.
   20876 
   20877     `U'
   20878           An immediate which can be loaded with the il/ila/ilh/ilhu
   20879           instructions.  const_int is sign extended to 128 bit.
   20880 
   20881     `W'
   20882           An immediate for shift and rotate instructions.  const_int is
   20883           treated as a 32 bit value.
   20884 
   20885     `Y'
   20886           An immediate for and/xor/or instructions.  const_int is sign
   20887           extended as a 128 bit.
   20888 
   20889     `Z'
   20890           An immediate for the `iohl' instruction.  const_int is sign
   20891           extended to 128 bit.
   20892 
   20893 
   20894 _S/390 and zSeries--`config/s390/s390.h'_
   20895 
   20896     `a'
   20897           Address register (general purpose register except r0)
   20898 
   20899     `c'
   20900           Condition code register
   20901 
   20902     `d'
   20903           Data register (arbitrary general purpose register)
   20904 
   20905     `f'
   20906           Floating-point register
   20907 
   20908     `I'
   20909           Unsigned 8-bit constant (0-255)
   20910 
   20911     `J'
   20912           Unsigned 12-bit constant (0-4095)
   20913 
   20914     `K'
   20915           Signed 16-bit constant (-32768-32767)
   20916 
   20917     `L'
   20918           Value appropriate as displacement.
   20919          `(0..4095)'
   20920                for short displacement
   20921 
   20922          `(-524288..524287)'
   20923                for long displacement
   20924 
   20925     `M'
   20926           Constant integer with a value of 0x7fffffff.
   20927 
   20928     `N'
   20929           Multiple letter constraint followed by 4 parameter letters.
   20930          `0..9:'
   20931                number of the part counting from most to least
   20932                significant
   20933 
   20934          `H,Q:'
   20935                mode of the part
   20936 
   20937          `D,S,H:'
   20938                mode of the containing operand
   20939 
   20940          `0,F:'
   20941                value of the other parts (F--all bits set)
   20942           The constraint matches if the specified part of a constant
   20943           has a value different from its other parts.
   20944 
   20945     `Q'
   20946           Memory reference without index register and with short
   20947           displacement.
   20948 
   20949     `R'
   20950           Memory reference with index register and short displacement.
   20951 
   20952     `S'
   20953           Memory reference without index register but with long
   20954           displacement.
   20955 
   20956     `T'
   20957           Memory reference with index register and long displacement.
   20958 
   20959     `U'
   20960           Pointer with short displacement.
   20961 
   20962     `W'
   20963           Pointer with long displacement.
   20964 
   20965     `Y'
   20966           Shift count operand.
   20967 
   20968 
   20969 _Score family--`config/score/score.h'_
   20970 
   20971     `d'
   20972           Registers from r0 to r32.
   20973 
   20974     `e'
   20975           Registers from r0 to r16.
   20976 
   20977     `t'
   20978           r8--r11 or r22--r27 registers.
   20979 
   20980     `h'
   20981           hi register.
   20982 
   20983     `l'
   20984           lo register.
   20985 
   20986     `x'
   20987           hi + lo register.
   20988 
   20989     `q'
   20990           cnt register.
   20991 
   20992     `y'
   20993           lcb register.
   20994 
   20995     `z'
   20996           scb register.
   20997 
   20998     `a'
   20999           cnt + lcb + scb register.
   21000 
   21001     `c'
   21002           cr0--cr15 register.
   21003 
   21004     `b'
   21005           cp1 registers.
   21006 
   21007     `f'
   21008           cp2 registers.
   21009 
   21010     `i'
   21011           cp3 registers.
   21012 
   21013     `j'
   21014           cp1 + cp2 + cp3 registers.
   21015 
   21016     `I'
   21017           High 16-bit constant (32-bit constant with 16 LSBs zero).
   21018 
   21019     `J'
   21020           Unsigned 5 bit integer (in the range 0 to 31).
   21021 
   21022     `K'
   21023           Unsigned 16 bit integer (in the range 0 to 65535).
   21024 
   21025     `L'
   21026           Signed 16 bit integer (in the range -32768 to 32767).
   21027 
   21028     `M'
   21029           Unsigned 14 bit integer (in the range 0 to 16383).
   21030 
   21031     `N'
   21032           Signed 14 bit integer (in the range -8192 to 8191).
   21033 
   21034     `Z'
   21035           Any SYMBOL_REF.
   21036 
   21037 _Xstormy16--`config/stormy16/stormy16.h'_
   21038 
   21039     `a'
   21040           Register r0.
   21041 
   21042     `b'
   21043           Register r1.
   21044 
   21045     `c'
   21046           Register r2.
   21047 
   21048     `d'
   21049           Register r8.
   21050 
   21051     `e'
   21052           Registers r0 through r7.
   21053 
   21054     `t'
   21055           Registers r0 and r1.
   21056 
   21057     `y'
   21058           The carry register.
   21059 
   21060     `z'
   21061           Registers r8 and r9.
   21062 
   21063     `I'
   21064           A constant between 0 and 3 inclusive.
   21065 
   21066     `J'
   21067           A constant that has exactly one bit set.
   21068 
   21069     `K'
   21070           A constant that has exactly one bit clear.
   21071 
   21072     `L'
   21073           A constant between 0 and 255 inclusive.
   21074 
   21075     `M'
   21076           A constant between -255 and 0 inclusive.
   21077 
   21078     `N'
   21079           A constant between -3 and 0 inclusive.
   21080 
   21081     `O'
   21082           A constant between 1 and 4 inclusive.
   21083 
   21084     `P'
   21085           A constant between -4 and -1 inclusive.
   21086 
   21087     `Q'
   21088           A memory reference that is a stack push.
   21089 
   21090     `R'
   21091           A memory reference that is a stack pop.
   21092 
   21093     `S'
   21094           A memory reference that refers to a constant address of known
   21095           value.
   21096 
   21097     `T'
   21098           The register indicated by Rx (not implemented yet).
   21099 
   21100     `U'
   21101           A constant that is not between 2 and 15 inclusive.
   21102 
   21103     `Z'
   21104           The constant 0.
   21105 
   21106 
   21107 _Xtensa--`config/xtensa/constraints.md'_
   21108 
   21109     `a'
   21110           General-purpose 32-bit register
   21111 
   21112     `b'
   21113           One-bit boolean register
   21114 
   21115     `A'
   21116           MAC16 40-bit accumulator register
   21117 
   21118     `I'
   21119           Signed 12-bit integer constant, for use in MOVI instructions
   21120 
   21121     `J'
   21122           Signed 8-bit integer constant, for use in ADDI instructions
   21123 
   21124     `K'
   21125           Integer constant valid for BccI instructions
   21126 
   21127     `L'
   21128           Unsigned constant valid for BccUI instructions
   21129 
   21130 
   21131 
   21132 
   21133 File: gccint.info,  Node: Disable Insn Alternatives,  Next: Machine Constraints,  Prev: Modifiers,  Up: Constraints
   21134 
   21135 16.8.6 Disable insn alternatives using the `enabled' attribute
   21136 --------------------------------------------------------------
   21137 
   21138 The `enabled' insn attribute may be used to disable certain insn
   21139 alternatives for machine-specific reasons.  This is useful when adding
   21140 new instructions to an existing pattern which are only available for
   21141 certain cpu architecture levels as specified with the `-march=' option.
   21142 
   21143  If an insn alternative is disabled, then it will never be used.  The
   21144 compiler treats the constraints for the disabled alternative as
   21145 unsatisfiable.
   21146 
   21147  In order to make use of the `enabled' attribute a back end has to add
   21148 in the machine description files:
   21149 
   21150   1. A definition of the `enabled' insn attribute.  The attribute is
   21151      defined as usual using the `define_attr' command.  This definition
   21152      should be based on other insn attributes and/or target flags.  The
   21153      `enabled' attribute is a numeric attribute and should evaluate to
   21154      `(const_int 1)' for an enabled alternative and to `(const_int 0)'
   21155      otherwise.
   21156 
   21157   2. A definition of another insn attribute used to describe for what
   21158      reason an insn alternative might be available or not.  E.g.
   21159      `cpu_facility' as in the example below.
   21160 
   21161   3. An assignment for the second attribute to each insn definition
   21162      combining instructions which are not all available under the same
   21163      circumstances.  (Note: It obviously only makes sense for
   21164      definitions with more than one alternative.  Otherwise the insn
   21165      pattern should be disabled or enabled using the insn condition.)
   21166 
   21167  E.g. the following two patterns could easily be merged using the
   21168 `enabled' attribute:
   21169 
   21170 
   21171      (define_insn "*movdi_old"
   21172        [(set (match_operand:DI 0 "register_operand" "=d")
   21173              (match_operand:DI 1 "register_operand" " d"))]
   21174        "!TARGET_NEW"
   21175        "lgr %0,%1")
   21176 
   21177      (define_insn "*movdi_new"
   21178        [(set (match_operand:DI 0 "register_operand" "=d,f,d")
   21179              (match_operand:DI 1 "register_operand" " d,d,f"))]
   21180        "TARGET_NEW"
   21181        "@
   21182         lgr  %0,%1
   21183         ldgr %0,%1
   21184         lgdr %0,%1")
   21185 
   21186  to:
   21187 
   21188 
   21189      (define_insn "*movdi_combined"
   21190        [(set (match_operand:DI 0 "register_operand" "=d,f,d")
   21191              (match_operand:DI 1 "register_operand" " d,d,f"))]
   21192        ""
   21193        "@
   21194         lgr  %0,%1
   21195         ldgr %0,%1
   21196         lgdr %0,%1"
   21197        [(set_attr "cpu_facility" "*,new,new")])
   21198 
   21199  with the `enabled' attribute defined like this:
   21200 
   21201 
   21202      (define_attr "cpu_facility" "standard,new" (const_string "standard"))
   21203 
   21204      (define_attr "enabled" ""
   21205        (cond [(eq_attr "cpu_facility" "standard") (const_int 1)
   21206               (and (eq_attr "cpu_facility" "new")
   21207                    (ne (symbol_ref "TARGET_NEW") (const_int 0)))
   21208               (const_int 1)]
   21209              (const_int 0)))
   21210 
   21211 
   21212 File: gccint.info,  Node: Define Constraints,  Next: C Constraint Interface,  Prev: Machine Constraints,  Up: Constraints
   21213 
   21214 16.8.7 Defining Machine-Specific Constraints
   21215 --------------------------------------------
   21216 
   21217 Machine-specific constraints fall into two categories: register and
   21218 non-register constraints.  Within the latter category, constraints
   21219 which allow subsets of all possible memory or address operands should
   21220 be specially marked, to give `reload' more information.
   21221 
   21222  Machine-specific constraints can be given names of arbitrary length,
   21223 but they must be entirely composed of letters, digits, underscores
   21224 (`_'), and angle brackets (`< >').  Like C identifiers, they must begin
   21225 with a letter or underscore.
   21226 
   21227  In order to avoid ambiguity in operand constraint strings, no
   21228 constraint can have a name that begins with any other constraint's
   21229 name.  For example, if `x' is defined as a constraint name, `xy' may
   21230 not be, and vice versa.  As a consequence of this rule, no constraint
   21231 may begin with one of the generic constraint letters: `E F V X g i m n
   21232 o p r s'.
   21233 
   21234  Register constraints correspond directly to register classes.  *Note
   21235 Register Classes::.  There is thus not much flexibility in their
   21236 definitions.
   21237 
   21238  -- MD Expression: define_register_constraint name regclass docstring
   21239      All three arguments are string constants.  NAME is the name of the
   21240      constraint, as it will appear in `match_operand' expressions.  If
   21241      NAME is a multi-letter constraint its length shall be the same for
   21242      all constraints starting with the same letter.  REGCLASS can be
   21243      either the name of the corresponding register class (*note
   21244      Register Classes::), or a C expression which evaluates to the
   21245      appropriate register class.  If it is an expression, it must have
   21246      no side effects, and it cannot look at the operand.  The usual use
   21247      of expressions is to map some register constraints to `NO_REGS'
   21248      when the register class is not available on a given
   21249      subarchitecture.
   21250 
   21251      DOCSTRING is a sentence documenting the meaning of the constraint.
   21252      Docstrings are explained further below.
   21253 
   21254  Non-register constraints are more like predicates: the constraint
   21255 definition gives a Boolean expression which indicates whether the
   21256 constraint matches.
   21257 
   21258  -- MD Expression: define_constraint name docstring exp
   21259      The NAME and DOCSTRING arguments are the same as for
   21260      `define_register_constraint', but note that the docstring comes
   21261      immediately after the name for these expressions.  EXP is an RTL
   21262      expression, obeying the same rules as the RTL expressions in
   21263      predicate definitions.  *Note Defining Predicates::, for details.
   21264      If it evaluates true, the constraint matches; if it evaluates
   21265      false, it doesn't. Constraint expressions should indicate which
   21266      RTL codes they might match, just like predicate expressions.
   21267 
   21268      `match_test' C expressions have access to the following variables:
   21269 
   21270     OP
   21271           The RTL object defining the operand.
   21272 
   21273     MODE
   21274           The machine mode of OP.
   21275 
   21276     IVAL
   21277           `INTVAL (OP)', if OP is a `const_int'.
   21278 
   21279     HVAL
   21280           `CONST_DOUBLE_HIGH (OP)', if OP is an integer `const_double'.
   21281 
   21282     LVAL
   21283           `CONST_DOUBLE_LOW (OP)', if OP is an integer `const_double'.
   21284 
   21285     RVAL
   21286           `CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point
   21287           `const_double'.
   21288 
   21289      The *VAL variables should only be used once another piece of the
   21290      expression has verified that OP is the appropriate kind of RTL
   21291      object.
   21292 
   21293  Most non-register constraints should be defined with
   21294 `define_constraint'.  The remaining two definition expressions are only
   21295 appropriate for constraints that should be handled specially by
   21296 `reload' if they fail to match.
   21297 
   21298  -- MD Expression: define_memory_constraint name docstring exp
   21299      Use this expression for constraints that match a subset of all
   21300      memory operands: that is, `reload' can make them match by
   21301      converting the operand to the form `(mem (reg X))', where X is a
   21302      base register (from the register class specified by
   21303      `BASE_REG_CLASS', *note Register Classes::).
   21304 
   21305      For example, on the S/390, some instructions do not accept
   21306      arbitrary memory references, but only those that do not make use
   21307      of an index register.  The constraint letter `Q' is defined to
   21308      represent a memory address of this type.  If `Q' is defined with
   21309      `define_memory_constraint', a `Q' constraint can handle any memory
   21310      operand, because `reload' knows it can simply copy the memory
   21311      address into a base register if required.  This is analogous to
   21312      the way an `o' constraint can handle any memory operand.
   21313 
   21314      The syntax and semantics are otherwise identical to
   21315      `define_constraint'.
   21316 
   21317  -- MD Expression: define_address_constraint name docstring exp
   21318      Use this expression for constraints that match a subset of all
   21319      address operands: that is, `reload' can make the constraint match
   21320      by converting the operand to the form `(reg X)', again with X a
   21321      base register.
   21322 
   21323      Constraints defined with `define_address_constraint' can only be
   21324      used with the `address_operand' predicate, or machine-specific
   21325      predicates that work the same way.  They are treated analogously to
   21326      the generic `p' constraint.
   21327 
   21328      The syntax and semantics are otherwise identical to
   21329      `define_constraint'.
   21330 
   21331  For historical reasons, names beginning with the letters `G H' are
   21332 reserved for constraints that match only `const_double's, and names
   21333 beginning with the letters `I J K L M N O P' are reserved for
   21334 constraints that match only `const_int's.  This may change in the
   21335 future.  For the time being, constraints with these names must be
   21336 written in a stylized form, so that `genpreds' can tell you did it
   21337 correctly:
   21338 
   21339      (define_constraint "[GHIJKLMNOP]..."
   21340        "DOC..."
   21341        (and (match_code "const_int")  ; `const_double' for G/H
   21342             CONDITION...))            ; usually a `match_test'
   21343 
   21344  It is fine to use names beginning with other letters for constraints
   21345 that match `const_double's or `const_int's.
   21346 
   21347  Each docstring in a constraint definition should be one or more
   21348 complete sentences, marked up in Texinfo format.  _They are currently
   21349 unused._ In the future they will be copied into the GCC manual, in
   21350 *note Machine Constraints::, replacing the hand-maintained tables
   21351 currently found in that section.  Also, in the future the compiler may
   21352 use this to give more helpful diagnostics when poor choice of `asm'
   21353 constraints causes a reload failure.
   21354 
   21355  If you put the pseudo-Texinfo directive `@internal' at the beginning
   21356 of a docstring, then (in the future) it will appear only in the
   21357 internals manual's version of the machine-specific constraint tables.
   21358 Use this for constraints that should not appear in `asm' statements.
   21359 
   21360 
   21361 File: gccint.info,  Node: C Constraint Interface,  Prev: Define Constraints,  Up: Constraints
   21362 
   21363 16.8.8 Testing constraints from C
   21364 ---------------------------------
   21365 
   21366 It is occasionally useful to test a constraint from C code rather than
   21367 implicitly via the constraint string in a `match_operand'.  The
   21368 generated file `tm_p.h' declares a few interfaces for working with
   21369 machine-specific constraints.  None of these interfaces work with the
   21370 generic constraints described in *note Simple Constraints::.  This may
   21371 change in the future.
   21372 
   21373  *Warning:* `tm_p.h' may declare other functions that operate on
   21374 constraints, besides the ones documented here.  Do not use those
   21375 functions from machine-dependent code.  They exist to implement the old
   21376 constraint interface that machine-independent components of the
   21377 compiler still expect.  They will change or disappear in the future.
   21378 
   21379  Some valid constraint names are not valid C identifiers, so there is a
   21380 mangling scheme for referring to them from C.  Constraint names that do
   21381 not contain angle brackets or underscores are left unchanged.
   21382 Underscores are doubled, each `<' is replaced with `_l', and each `>'
   21383 with `_g'.  Here are some examples:
   21384 
   21385      *Original* *Mangled*
   21386      `x'        `x'
   21387      `P42x'     `P42x'
   21388      `P4_x'     `P4__x'
   21389      `P4>x'     `P4_gx'
   21390      `P4>>'     `P4_g_g'
   21391      `P4_g>'    `P4__g_g'
   21392 
   21393  Throughout this section, the variable C is either a constraint in the
   21394 abstract sense, or a constant from `enum constraint_num'; the variable
   21395 M is a mangled constraint name (usually as part of a larger identifier).
   21396 
   21397  -- Enum: constraint_num
   21398      For each machine-specific constraint, there is a corresponding
   21399      enumeration constant: `CONSTRAINT_' plus the mangled name of the
   21400      constraint.  Functions that take an `enum constraint_num' as an
   21401      argument expect one of these constants.
   21402 
   21403      Machine-independent constraints do not have associated constants.
   21404      This may change in the future.
   21405 
   21406  -- Function: inline bool satisfies_constraint_M (rtx EXP)
   21407      For each machine-specific, non-register constraint M, there is one
   21408      of these functions; it returns `true' if EXP satisfies the
   21409      constraint.  These functions are only visible if `rtl.h' was
   21410      included before `tm_p.h'.
   21411 
   21412  -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num
   21413           C)
   21414      Like the `satisfies_constraint_M' functions, but the constraint to
   21415      test is given as an argument, C.  If C specifies a register
   21416      constraint, this function will always return `false'.
   21417 
   21418  -- Function: enum reg_class regclass_for_constraint (enum
   21419           constraint_num C)
   21420      Returns the register class associated with C.  If C is not a
   21421      register constraint, or those registers are not available for the
   21422      currently selected subtarget, returns `NO_REGS'.
   21423 
   21424  Here is an example use of `satisfies_constraint_M'.  In peephole
   21425 optimizations (*note Peephole Definitions::), operand constraint
   21426 strings are ignored, so if there are relevant constraints, they must be
   21427 tested in the C condition.  In the example, the optimization is applied
   21428 if operand 2 does _not_ satisfy the `K' constraint.  (This is a
   21429 simplified version of a peephole definition from the i386 machine
   21430 description.)
   21431 
   21432      (define_peephole2
   21433        [(match_scratch:SI 3 "r")
   21434         (set (match_operand:SI 0 "register_operand" "")
   21435              (mult:SI (match_operand:SI 1 "memory_operand" "")
   21436                       (match_operand:SI 2 "immediate_operand" "")))]
   21437 
   21438        "!satisfies_constraint_K (operands[2])"
   21439 
   21440        [(set (match_dup 3) (match_dup 1))
   21441         (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))]
   21442 
   21443        "")
   21444 
   21445 
   21446 File: gccint.info,  Node: Standard Names,  Next: Pattern Ordering,  Prev: Constraints,  Up: Machine Desc
   21447 
   21448 16.9 Standard Pattern Names For Generation
   21449 ==========================================
   21450 
   21451 Here is a table of the instruction names that are meaningful in the RTL
   21452 generation pass of the compiler.  Giving one of these names to an
   21453 instruction pattern tells the RTL generation pass that it can use the
   21454 pattern to accomplish a certain task.
   21455 
   21456 `movM'
   21457      Here M stands for a two-letter machine mode name, in lowercase.
   21458      This instruction pattern moves data with that machine mode from
   21459      operand 1 to operand 0.  For example, `movsi' moves full-word data.
   21460 
   21461      If operand 0 is a `subreg' with mode M of a register whose own
   21462      mode is wider than M, the effect of this instruction is to store
   21463      the specified value in the part of the register that corresponds
   21464      to mode M.  Bits outside of M, but which are within the same
   21465      target word as the `subreg' are undefined.  Bits which are outside
   21466      the target word are left unchanged.
   21467 
   21468      This class of patterns is special in several ways.  First of all,
   21469      each of these names up to and including full word size _must_ be
   21470      defined, because there is no other way to copy a datum from one
   21471      place to another.  If there are patterns accepting operands in
   21472      larger modes, `movM' must be defined for integer modes of those
   21473      sizes.
   21474 
   21475      Second, these patterns are not used solely in the RTL generation
   21476      pass.  Even the reload pass can generate move insns to copy values
   21477      from stack slots into temporary registers.  When it does so, one
   21478      of the operands is a hard register and the other is an operand
   21479      that can need to be reloaded into a register.
   21480 
   21481      Therefore, when given such a pair of operands, the pattern must
   21482      generate RTL which needs no reloading and needs no temporary
   21483      registers--no registers other than the operands.  For example, if
   21484      you support the pattern with a `define_expand', then in such a
   21485      case the `define_expand' mustn't call `force_reg' or any other such
   21486      function which might generate new pseudo registers.
   21487 
   21488      This requirement exists even for subword modes on a RISC machine
   21489      where fetching those modes from memory normally requires several
   21490      insns and some temporary registers.
   21491 
   21492      During reload a memory reference with an invalid address may be
   21493      passed as an operand.  Such an address will be replaced with a
   21494      valid address later in the reload pass.  In this case, nothing may
   21495      be done with the address except to use it as it stands.  If it is
   21496      copied, it will not be replaced with a valid address.  No attempt
   21497      should be made to make such an address into a valid address and no
   21498      routine (such as `change_address') that will do so may be called.
   21499      Note that `general_operand' will fail when applied to such an
   21500      address.
   21501 
   21502      The global variable `reload_in_progress' (which must be explicitly
   21503      declared if required) can be used to determine whether such special
   21504      handling is required.
   21505 
   21506      The variety of operands that have reloads depends on the rest of
   21507      the machine description, but typically on a RISC machine these can
   21508      only be pseudo registers that did not get hard registers, while on
   21509      other machines explicit memory references will get optional
   21510      reloads.
   21511 
   21512      If a scratch register is required to move an object to or from
   21513      memory, it can be allocated using `gen_reg_rtx' prior to life
   21514      analysis.
   21515 
   21516      If there are cases which need scratch registers during or after
   21517      reload, you must provide an appropriate secondary_reload target
   21518      hook.
   21519 
   21520      The macro `can_create_pseudo_p' can be used to determine if it is
   21521      unsafe to create new pseudo registers.  If this variable is
   21522      nonzero, then it is unsafe to call `gen_reg_rtx' to allocate a new
   21523      pseudo.
   21524 
   21525      The constraints on a `movM' must permit moving any hard register
   21526      to any other hard register provided that `HARD_REGNO_MODE_OK'
   21527      permits mode M in both registers and `TARGET_REGISTER_MOVE_COST'
   21528      applied to their classes returns a value of 2.
   21529 
   21530      It is obligatory to support floating point `movM' instructions
   21531      into and out of any registers that can hold fixed point values,
   21532      because unions and structures (which have modes `SImode' or
   21533      `DImode') can be in those registers and they may have floating
   21534      point members.
   21535 
   21536      There may also be a need to support fixed point `movM'
   21537      instructions in and out of floating point registers.
   21538      Unfortunately, I have forgotten why this was so, and I don't know
   21539      whether it is still true.  If `HARD_REGNO_MODE_OK' rejects fixed
   21540      point values in floating point registers, then the constraints of
   21541      the fixed point `movM' instructions must be designed to avoid ever
   21542      trying to reload into a floating point register.
   21543 
   21544 `reload_inM'
   21545 `reload_outM'
   21546      These named patterns have been obsoleted by the target hook
   21547      `secondary_reload'.
   21548 
   21549      Like `movM', but used when a scratch register is required to move
   21550      between operand 0 and operand 1.  Operand 2 describes the scratch
   21551      register.  See the discussion of the `SECONDARY_RELOAD_CLASS'
   21552      macro in *note Register Classes::.
   21553 
   21554      There are special restrictions on the form of the `match_operand's
   21555      used in these patterns.  First, only the predicate for the reload
   21556      operand is examined, i.e., `reload_in' examines operand 1, but not
   21557      the predicates for operand 0 or 2.  Second, there may be only one
   21558      alternative in the constraints.  Third, only a single register
   21559      class letter may be used for the constraint; subsequent constraint
   21560      letters are ignored.  As a special exception, an empty constraint
   21561      string matches the `ALL_REGS' register class.  This may relieve
   21562      ports of the burden of defining an `ALL_REGS' constraint letter
   21563      just for these patterns.
   21564 
   21565 `movstrictM'
   21566      Like `movM' except that if operand 0 is a `subreg' with mode M of
   21567      a register whose natural mode is wider, the `movstrictM'
   21568      instruction is guaranteed not to alter any of the register except
   21569      the part which belongs to mode M.
   21570 
   21571 `movmisalignM'
   21572      This variant of a move pattern is designed to load or store a value
   21573      from a memory address that is not naturally aligned for its mode.
   21574      For a store, the memory will be in operand 0; for a load, the
   21575      memory will be in operand 1.  The other operand is guaranteed not
   21576      to be a memory, so that it's easy to tell whether this is a load
   21577      or store.
   21578 
   21579      This pattern is used by the autovectorizer, and when expanding a
   21580      `MISALIGNED_INDIRECT_REF' expression.
   21581 
   21582 `load_multiple'
   21583      Load several consecutive memory locations into consecutive
   21584      registers.  Operand 0 is the first of the consecutive registers,
   21585      operand 1 is the first memory location, and operand 2 is a
   21586      constant: the number of consecutive registers.
   21587 
   21588      Define this only if the target machine really has such an
   21589      instruction; do not define this if the most efficient way of
   21590      loading consecutive registers from memory is to do them one at a
   21591      time.
   21592 
   21593      On some machines, there are restrictions as to which consecutive
   21594      registers can be stored into memory, such as particular starting or
   21595      ending register numbers or only a range of valid counts.  For those
   21596      machines, use a `define_expand' (*note Expander Definitions::) and
   21597      make the pattern fail if the restrictions are not met.
   21598 
   21599      Write the generated insn as a `parallel' with elements being a
   21600      `set' of one register from the appropriate memory location (you may
   21601      also need `use' or `clobber' elements).  Use a `match_parallel'
   21602      (*note RTL Template::) to recognize the insn.  See `rs6000.md' for
   21603      examples of the use of this insn pattern.
   21604 
   21605 `store_multiple'
   21606      Similar to `load_multiple', but store several consecutive registers
   21607      into consecutive memory locations.  Operand 0 is the first of the
   21608      consecutive memory locations, operand 1 is the first register, and
   21609      operand 2 is a constant: the number of consecutive registers.
   21610 
   21611 `vec_setM'
   21612      Set given field in the vector value.  Operand 0 is the vector to
   21613      modify, operand 1 is new value of field and operand 2 specify the
   21614      field index.
   21615 
   21616 `vec_extractM'
   21617      Extract given field from the vector value.  Operand 1 is the
   21618      vector, operand 2 specify field index and operand 0 place to store
   21619      value into.
   21620 
   21621 `vec_extract_evenM'
   21622      Extract even elements from the input vectors (operand 1 and
   21623      operand 2).  The even elements of operand 2 are concatenated to
   21624      the even elements of operand 1 in their original order. The result
   21625      is stored in operand 0.  The output and input vectors should have
   21626      the same modes.
   21627 
   21628 `vec_extract_oddM'
   21629      Extract odd elements from the input vectors (operand 1 and operand
   21630      2).  The odd elements of operand 2 are concatenated to the odd
   21631      elements of operand 1 in their original order. The result is
   21632      stored in operand 0.  The output and input vectors should have the
   21633      same modes.
   21634 
   21635 `vec_interleave_highM'
   21636      Merge high elements of the two input vectors into the output
   21637      vector. The output and input vectors should have the same modes
   21638      (`N' elements). The high `N/2' elements of the first input vector
   21639      are interleaved with the high `N/2' elements of the second input
   21640      vector.
   21641 
   21642 `vec_interleave_lowM'
   21643      Merge low elements of the two input vectors into the output
   21644      vector. The output and input vectors should have the same modes
   21645      (`N' elements). The low `N/2' elements of the first input vector
   21646      are interleaved with the low `N/2' elements of the second input
   21647      vector.
   21648 
   21649 `vec_initM'
   21650      Initialize the vector to given values.  Operand 0 is the vector to
   21651      initialize and operand 1 is parallel containing values for
   21652      individual fields.
   21653 
   21654 `pushM1'
   21655      Output a push instruction.  Operand 0 is value to push.  Used only
   21656      when `PUSH_ROUNDING' is defined.  For historical reason, this
   21657      pattern may be missing and in such case an `mov' expander is used
   21658      instead, with a `MEM' expression forming the push operation.  The
   21659      `mov' expander method is deprecated.
   21660 
   21661 `addM3'
   21662      Add operand 2 and operand 1, storing the result in operand 0.  All
   21663      operands must have mode M.  This can be used even on two-address
   21664      machines, by means of constraints requiring operands 1 and 0 to be
   21665      the same location.
   21666 
   21667 `ssaddM3', `usaddM3'
   21668 
   21669 `subM3', `sssubM3', `ussubM3'
   21670 
   21671 `mulM3', `ssmulM3', `usmulM3'
   21672 `divM3', `ssdivM3'
   21673 `udivM3', `usdivM3'
   21674 `modM3', `umodM3'
   21675 `uminM3', `umaxM3'
   21676 `andM3', `iorM3', `xorM3'
   21677      Similar, for other arithmetic operations.
   21678 
   21679 `fmaM4'
   21680      Multiply operand 2 and operand 1, then add operand 3, storing the
   21681      result in operand 0.  All operands must have mode M.  This pattern
   21682      is used to implement the `fma', `fmaf', and `fmal' builtin
   21683      functions from the ISO C99 standard.  The `fma' operation may
   21684      produce different results than doing the multiply followed by the
   21685      add if the machine does not perform a rounding step between the
   21686      operations.
   21687 
   21688 `fmsM4'
   21689      Like `fmaM4', except operand 3 subtracted from the product instead
   21690      of added to the product.  This is represented in the rtl as
   21691 
   21692           (fma:M OP1 OP2 (neg:M OP3))
   21693 
   21694 `fnmaM4'
   21695      Like `fmaM4' except that the intermediate product is negated
   21696      before being added to operand 3.  This is represented in the rtl as
   21697 
   21698           (fma:M (neg:M OP1) OP2 OP3)
   21699 
   21700 `fnmsM4'
   21701      Like `fmsM4' except that the intermediate product is negated
   21702      before subtracting operand 3.  This is represented in the rtl as
   21703 
   21704           (fma:M (neg:M OP1) OP2 (neg:M OP3))
   21705 
   21706 `sminM3', `smaxM3'
   21707      Signed minimum and maximum operations.  When used with floating
   21708      point, if both operands are zeros, or if either operand is `NaN',
   21709      then it is unspecified which of the two operands is returned as
   21710      the result.
   21711 
   21712 `reduc_smin_M', `reduc_smax_M'
   21713      Find the signed minimum/maximum of the elements of a vector. The
   21714      vector is operand 1, and the scalar result is stored in the least
   21715      significant bits of operand 0 (also a vector). The output and
   21716      input vector should have the same modes.
   21717 
   21718 `reduc_umin_M', `reduc_umax_M'
   21719      Find the unsigned minimum/maximum of the elements of a vector. The
   21720      vector is operand 1, and the scalar result is stored in the least
   21721      significant bits of operand 0 (also a vector). The output and
   21722      input vector should have the same modes.
   21723 
   21724 `reduc_splus_M'
   21725      Compute the sum of the signed elements of a vector. The vector is
   21726      operand 1, and the scalar result is stored in the least
   21727      significant bits of operand 0 (also a vector). The output and
   21728      input vector should have the same modes.
   21729 
   21730 `reduc_uplus_M'
   21731      Compute the sum of the unsigned elements of a vector. The vector
   21732      is operand 1, and the scalar result is stored in the least
   21733      significant bits of operand 0 (also a vector). The output and
   21734      input vector should have the same modes.
   21735 
   21736 `sdot_prodM'
   21737 
   21738 `udot_prodM'
   21739      Compute the sum of the products of two signed/unsigned elements.
   21740      Operand 1 and operand 2 are of the same mode. Their product, which
   21741      is of a wider mode, is computed and added to operand 3. Operand 3
   21742      is of a mode equal or wider than the mode of the product. The
   21743      result is placed in operand 0, which is of the same mode as
   21744      operand 3.
   21745 
   21746 `ssum_widenM3'
   21747 
   21748 `usum_widenM3'
   21749      Operands 0 and 2 are of the same mode, which is wider than the
   21750      mode of operand 1. Add operand 1 to operand 2 and place the
   21751      widened result in operand 0. (This is used express accumulation of
   21752      elements into an accumulator of a wider mode.)
   21753 
   21754 `vec_shl_M', `vec_shr_M'
   21755      Whole vector left/right shift in bits.  Operand 1 is a vector to
   21756      be shifted.  Operand 2 is an integer shift amount in bits.
   21757      Operand 0 is where the resulting shifted vector is stored.  The
   21758      output and input vectors should have the same modes.
   21759 
   21760 `vec_pack_trunc_M'
   21761      Narrow (demote) and merge the elements of two vectors. Operands 1
   21762      and 2 are vectors of the same mode having N integral or floating
   21763      point elements of size S.  Operand 0 is the resulting vector in
   21764      which 2*N elements of size N/2 are concatenated after narrowing
   21765      them down using truncation.
   21766 
   21767 `vec_pack_ssat_M', `vec_pack_usat_M'
   21768      Narrow (demote) and merge the elements of two vectors.  Operands 1
   21769      and 2 are vectors of the same mode having N integral elements of
   21770      size S.  Operand 0 is the resulting vector in which the elements
   21771      of the two input vectors are concatenated after narrowing them
   21772      down using signed/unsigned saturating arithmetic.
   21773 
   21774 `vec_pack_sfix_trunc_M', `vec_pack_ufix_trunc_M'
   21775      Narrow, convert to signed/unsigned integral type and merge the
   21776      elements of two vectors.  Operands 1 and 2 are vectors of the same
   21777      mode having N floating point elements of size S.  Operand 0 is the
   21778      resulting vector in which 2*N elements of size N/2 are
   21779      concatenated.
   21780 
   21781 `vec_unpacks_hi_M', `vec_unpacks_lo_M'
   21782      Extract and widen (promote) the high/low part of a vector of signed
   21783      integral or floating point elements.  The input vector (operand 1)
   21784      has N elements of size S.  Widen (promote) the high/low elements
   21785      of the vector using signed or floating point extension and place
   21786      the resulting N/2 values of size 2*S in the output vector (operand
   21787      0).
   21788 
   21789 `vec_unpacku_hi_M', `vec_unpacku_lo_M'
   21790      Extract and widen (promote) the high/low part of a vector of
   21791      unsigned integral elements.  The input vector (operand 1) has N
   21792      elements of size S.  Widen (promote) the high/low elements of the
   21793      vector using zero extension and place the resulting N/2 values of
   21794      size 2*S in the output vector (operand 0).
   21795 
   21796 `vec_unpacks_float_hi_M', `vec_unpacks_float_lo_M'
   21797 `vec_unpacku_float_hi_M', `vec_unpacku_float_lo_M'
   21798      Extract, convert to floating point type and widen the high/low
   21799      part of a vector of signed/unsigned integral elements.  The input
   21800      vector (operand 1) has N elements of size S.  Convert the high/low
   21801      elements of the vector using floating point conversion and place
   21802      the resulting N/2 values of size 2*S in the output vector (operand
   21803      0).
   21804 
   21805 `vec_widen_umult_hi_M', `vec_widen_umult_lo_M'
   21806 `vec_widen_smult_hi_M', `vec_widen_smult_lo_M'
   21807      Signed/Unsigned widening multiplication.  The two inputs (operands
   21808      1 and 2) are vectors with N signed/unsigned elements of size S.
   21809      Multiply the high/low elements of the two vectors, and put the N/2
   21810      products of size 2*S in the output vector (operand 0).
   21811 
   21812 `mulhisi3'
   21813      Multiply operands 1 and 2, which have mode `HImode', and store a
   21814      `SImode' product in operand 0.
   21815 
   21816 `mulqihi3', `mulsidi3'
   21817      Similar widening-multiplication instructions of other widths.
   21818 
   21819 `umulqihi3', `umulhisi3', `umulsidi3'
   21820      Similar widening-multiplication instructions that do unsigned
   21821      multiplication.
   21822 
   21823 `usmulqihi3', `usmulhisi3', `usmulsidi3'
   21824      Similar widening-multiplication instructions that interpret the
   21825      first operand as unsigned and the second operand as signed, then
   21826      do a signed multiplication.
   21827 
   21828 `smulM3_highpart'
   21829      Perform a signed multiplication of operands 1 and 2, which have
   21830      mode M, and store the most significant half of the product in
   21831      operand 0.  The least significant half of the product is discarded.
   21832 
   21833 `umulM3_highpart'
   21834      Similar, but the multiplication is unsigned.
   21835 
   21836 `maddMN4'
   21837      Multiply operands 1 and 2, sign-extend them to mode N, add operand
   21838      3, and store the result in operand 0.  Operands 1 and 2 have mode
   21839      M and operands 0 and 3 have mode N.  Both modes must be integer or
   21840      fixed-point modes and N must be twice the size of M.
   21841 
   21842      In other words, `maddMN4' is like `mulMN3' except that it also
   21843      adds operand 3.
   21844 
   21845      These instructions are not allowed to `FAIL'.
   21846 
   21847 `umaddMN4'
   21848      Like `maddMN4', but zero-extend the multiplication operands
   21849      instead of sign-extending them.
   21850 
   21851 `ssmaddMN4'
   21852      Like `maddMN4', but all involved operations must be
   21853      signed-saturating.
   21854 
   21855 `usmaddMN4'
   21856      Like `umaddMN4', but all involved operations must be
   21857      unsigned-saturating.
   21858 
   21859 `msubMN4'
   21860      Multiply operands 1 and 2, sign-extend them to mode N, subtract the
   21861      result from operand 3, and store the result in operand 0.
   21862      Operands 1 and 2 have mode M and operands 0 and 3 have mode N.
   21863      Both modes must be integer or fixed-point modes and N must be twice
   21864      the size of M.
   21865 
   21866      In other words, `msubMN4' is like `mulMN3' except that it also
   21867      subtracts the result from operand 3.
   21868 
   21869      These instructions are not allowed to `FAIL'.
   21870 
   21871 `umsubMN4'
   21872      Like `msubMN4', but zero-extend the multiplication operands
   21873      instead of sign-extending them.
   21874 
   21875 `ssmsubMN4'
   21876      Like `msubMN4', but all involved operations must be
   21877      signed-saturating.
   21878 
   21879 `usmsubMN4'
   21880      Like `umsubMN4', but all involved operations must be
   21881      unsigned-saturating.
   21882 
   21883 `divmodM4'
   21884      Signed division that produces both a quotient and a remainder.
   21885      Operand 1 is divided by operand 2 to produce a quotient stored in
   21886      operand 0 and a remainder stored in operand 3.
   21887 
   21888      For machines with an instruction that produces both a quotient and
   21889      a remainder, provide a pattern for `divmodM4' but do not provide
   21890      patterns for `divM3' and `modM3'.  This allows optimization in the
   21891      relatively common case when both the quotient and remainder are
   21892      computed.
   21893 
   21894      If an instruction that just produces a quotient or just a remainder
   21895      exists and is more efficient than the instruction that produces
   21896      both, write the output routine of `divmodM4' to call
   21897      `find_reg_note' and look for a `REG_UNUSED' note on the quotient
   21898      or remainder and generate the appropriate instruction.
   21899 
   21900 `udivmodM4'
   21901      Similar, but does unsigned division.
   21902 
   21903 `ashlM3', `ssashlM3', `usashlM3'
   21904      Arithmetic-shift operand 1 left by a number of bits specified by
   21905      operand 2, and store the result in operand 0.  Here M is the mode
   21906      of operand 0 and operand 1; operand 2's mode is specified by the
   21907      instruction pattern, and the compiler will convert the operand to
   21908      that mode before generating the instruction.  The meaning of
   21909      out-of-range shift counts can optionally be specified by
   21910      `TARGET_SHIFT_TRUNCATION_MASK'.  *Note
   21911      TARGET_SHIFT_TRUNCATION_MASK::.  Operand 2 is always a scalar type.
   21912 
   21913 `ashrM3', `lshrM3', `rotlM3', `rotrM3'
   21914      Other shift and rotate instructions, analogous to the `ashlM3'
   21915      instructions.  Operand 2 is always a scalar type.
   21916 
   21917 `vashlM3', `vashrM3', `vlshrM3', `vrotlM3', `vrotrM3'
   21918      Vector shift and rotate instructions that take vectors as operand 2
   21919      instead of a scalar type.
   21920 
   21921 `negM2', `ssnegM2', `usnegM2'
   21922      Negate operand 1 and store the result in operand 0.
   21923 
   21924 `absM2'
   21925      Store the absolute value of operand 1 into operand 0.
   21926 
   21927 `sqrtM2'
   21928      Store the square root of operand 1 into operand 0.
   21929 
   21930      The `sqrt' built-in function of C always uses the mode which
   21931      corresponds to the C data type `double' and the `sqrtf' built-in
   21932      function uses the mode which corresponds to the C data type
   21933      `float'.
   21934 
   21935 `fmodM3'
   21936      Store the remainder of dividing operand 1 by operand 2 into
   21937      operand 0, rounded towards zero to an integer.
   21938 
   21939      The `fmod' built-in function of C always uses the mode which
   21940      corresponds to the C data type `double' and the `fmodf' built-in
   21941      function uses the mode which corresponds to the C data type
   21942      `float'.
   21943 
   21944 `remainderM3'
   21945      Store the remainder of dividing operand 1 by operand 2 into
   21946      operand 0, rounded to the nearest integer.
   21947 
   21948      The `remainder' built-in function of C always uses the mode which
   21949      corresponds to the C data type `double' and the `remainderf'
   21950      built-in function uses the mode which corresponds to the C data
   21951      type `float'.
   21952 
   21953 `cosM2'
   21954      Store the cosine of operand 1 into operand 0.
   21955 
   21956      The `cos' built-in function of C always uses the mode which
   21957      corresponds to the C data type `double' and the `cosf' built-in
   21958      function uses the mode which corresponds to the C data type
   21959      `float'.
   21960 
   21961 `sinM2'
   21962      Store the sine of operand 1 into operand 0.
   21963 
   21964      The `sin' built-in function of C always uses the mode which
   21965      corresponds to the C data type `double' and the `sinf' built-in
   21966      function uses the mode which corresponds to the C data type
   21967      `float'.
   21968 
   21969 `expM2'
   21970      Store the exponential of operand 1 into operand 0.
   21971 
   21972      The `exp' built-in function of C always uses the mode which
   21973      corresponds to the C data type `double' and the `expf' built-in
   21974      function uses the mode which corresponds to the C data type
   21975      `float'.
   21976 
   21977 `logM2'
   21978      Store the natural logarithm of operand 1 into operand 0.
   21979 
   21980      The `log' built-in function of C always uses the mode which
   21981      corresponds to the C data type `double' and the `logf' built-in
   21982      function uses the mode which corresponds to the C data type
   21983      `float'.
   21984 
   21985 `powM3'
   21986      Store the value of operand 1 raised to the exponent operand 2 into
   21987      operand 0.
   21988 
   21989      The `pow' built-in function of C always uses the mode which
   21990      corresponds to the C data type `double' and the `powf' built-in
   21991      function uses the mode which corresponds to the C data type
   21992      `float'.
   21993 
   21994 `atan2M3'
   21995      Store the arc tangent (inverse tangent) of operand 1 divided by
   21996      operand 2 into operand 0, using the signs of both arguments to
   21997      determine the quadrant of the result.
   21998 
   21999      The `atan2' built-in function of C always uses the mode which
   22000      corresponds to the C data type `double' and the `atan2f' built-in
   22001      function uses the mode which corresponds to the C data type
   22002      `float'.
   22003 
   22004 `floorM2'
   22005      Store the largest integral value not greater than argument.
   22006 
   22007      The `floor' built-in function of C always uses the mode which
   22008      corresponds to the C data type `double' and the `floorf' built-in
   22009      function uses the mode which corresponds to the C data type
   22010      `float'.
   22011 
   22012 `btruncM2'
   22013      Store the argument rounded to integer towards zero.
   22014 
   22015      The `trunc' built-in function of C always uses the mode which
   22016      corresponds to the C data type `double' and the `truncf' built-in
   22017      function uses the mode which corresponds to the C data type
   22018      `float'.
   22019 
   22020 `roundM2'
   22021      Store the argument rounded to integer away from zero.
   22022 
   22023      The `round' built-in function of C always uses the mode which
   22024      corresponds to the C data type `double' and the `roundf' built-in
   22025      function uses the mode which corresponds to the C data type
   22026      `float'.
   22027 
   22028 `ceilM2'
   22029      Store the argument rounded to integer away from zero.
   22030 
   22031      The `ceil' built-in function of C always uses the mode which
   22032      corresponds to the C data type `double' and the `ceilf' built-in
   22033      function uses the mode which corresponds to the C data type
   22034      `float'.
   22035 
   22036 `nearbyintM2'
   22037      Store the argument rounded according to the default rounding mode
   22038 
   22039      The `nearbyint' built-in function of C always uses the mode which
   22040      corresponds to the C data type `double' and the `nearbyintf'
   22041      built-in function uses the mode which corresponds to the C data
   22042      type `float'.
   22043 
   22044 `rintM2'
   22045      Store the argument rounded according to the default rounding mode
   22046      and raise the inexact exception when the result differs in value
   22047      from the argument
   22048 
   22049      The `rint' built-in function of C always uses the mode which
   22050      corresponds to the C data type `double' and the `rintf' built-in
   22051      function uses the mode which corresponds to the C data type
   22052      `float'.
   22053 
   22054 `lrintMN2'
   22055      Convert operand 1 (valid for floating point mode M) to fixed point
   22056      mode N as a signed number according to the current rounding mode
   22057      and store in operand 0 (which has mode N).
   22058 
   22059 `lroundMN2'
   22060      Convert operand 1 (valid for floating point mode M) to fixed point
   22061      mode N as a signed number rounding to nearest and away from zero
   22062      and store in operand 0 (which has mode N).
   22063 
   22064 `lfloorMN2'
   22065      Convert operand 1 (valid for floating point mode M) to fixed point
   22066      mode N as a signed number rounding down and store in operand 0
   22067      (which has mode N).
   22068 
   22069 `lceilMN2'
   22070      Convert operand 1 (valid for floating point mode M) to fixed point
   22071      mode N as a signed number rounding up and store in operand 0
   22072      (which has mode N).
   22073 
   22074 `copysignM3'
   22075      Store a value with the magnitude of operand 1 and the sign of
   22076      operand 2 into operand 0.
   22077 
   22078      The `copysign' built-in function of C always uses the mode which
   22079      corresponds to the C data type `double' and the `copysignf'
   22080      built-in function uses the mode which corresponds to the C data
   22081      type `float'.
   22082 
   22083 `ffsM2'
   22084      Store into operand 0 one plus the index of the least significant
   22085      1-bit of operand 1.  If operand 1 is zero, store zero.  M is the
   22086      mode of operand 0; operand 1's mode is specified by the instruction
   22087      pattern, and the compiler will convert the operand to that mode
   22088      before generating the instruction.
   22089 
   22090      The `ffs' built-in function of C always uses the mode which
   22091      corresponds to the C data type `int'.
   22092 
   22093 `clzM2'
   22094      Store into operand 0 the number of leading 0-bits in X, starting
   22095      at the most significant bit position.  If X is 0, the
   22096      `CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
   22097      result is undefined or has a useful value.  M is the mode of
   22098      operand 0; operand 1's mode is specified by the instruction
   22099      pattern, and the compiler will convert the operand to that mode
   22100      before generating the instruction.
   22101 
   22102 `ctzM2'
   22103      Store into operand 0 the number of trailing 0-bits in X, starting
   22104      at the least significant bit position.  If X is 0, the
   22105      `CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
   22106      result is undefined or has a useful value.  M is the mode of
   22107      operand 0; operand 1's mode is specified by the instruction
   22108      pattern, and the compiler will convert the operand to that mode
   22109      before generating the instruction.
   22110 
   22111 `popcountM2'
   22112      Store into operand 0 the number of 1-bits in X.  M is the mode of
   22113      operand 0; operand 1's mode is specified by the instruction
   22114      pattern, and the compiler will convert the operand to that mode
   22115      before generating the instruction.
   22116 
   22117 `parityM2'
   22118      Store into operand 0 the parity of X, i.e. the number of 1-bits in
   22119      X modulo 2.  M is the mode of operand 0; operand 1's mode is
   22120      specified by the instruction pattern, and the compiler will convert
   22121      the operand to that mode before generating the instruction.
   22122 
   22123 `one_cmplM2'
   22124      Store the bitwise-complement of operand 1 into operand 0.
   22125 
   22126 `movmemM'
   22127      Block move instruction.  The destination and source blocks of
   22128      memory are the first two operands, and both are `mem:BLK's with an
   22129      address in mode `Pmode'.
   22130 
   22131      The number of bytes to move is the third operand, in mode M.
   22132      Usually, you specify `word_mode' for M.  However, if you can
   22133      generate better code knowing the range of valid lengths is smaller
   22134      than those representable in a full word, you should provide a
   22135      pattern with a mode corresponding to the range of values you can
   22136      handle efficiently (e.g., `QImode' for values in the range 0-127;
   22137      note we avoid numbers that appear negative) and also a pattern
   22138      with `word_mode'.
   22139 
   22140      The fourth operand is the known shared alignment of the source and
   22141      destination, in the form of a `const_int' rtx.  Thus, if the
   22142      compiler knows that both source and destination are word-aligned,
   22143      it may provide the value 4 for this operand.
   22144 
   22145      Optional operands 5 and 6 specify expected alignment and size of
   22146      block respectively.  The expected alignment differs from alignment
   22147      in operand 4 in a way that the blocks are not required to be
   22148      aligned according to it in all cases. This expected alignment is
   22149      also in bytes, just like operand 4.  Expected size, when unknown,
   22150      is set to `(const_int -1)'.
   22151 
   22152      Descriptions of multiple `movmemM' patterns can only be beneficial
   22153      if the patterns for smaller modes have fewer restrictions on their
   22154      first, second and fourth operands.  Note that the mode M in
   22155      `movmemM' does not impose any restriction on the mode of
   22156      individually moved data units in the block.
   22157 
   22158      These patterns need not give special consideration to the
   22159      possibility that the source and destination strings might overlap.
   22160 
   22161 `movstr'
   22162      String copy instruction, with `stpcpy' semantics.  Operand 0 is an
   22163      output operand in mode `Pmode'.  The addresses of the destination
   22164      and source strings are operands 1 and 2, and both are `mem:BLK's
   22165      with addresses in mode `Pmode'.  The execution of the expansion of
   22166      this pattern should store in operand 0 the address in which the
   22167      `NUL' terminator was stored in the destination string.
   22168 
   22169 `setmemM'
   22170      Block set instruction.  The destination string is the first
   22171      operand, given as a `mem:BLK' whose address is in mode `Pmode'.
   22172      The number of bytes to set is the second operand, in mode M.  The
   22173      value to initialize the memory with is the third operand. Targets
   22174      that only support the clearing of memory should reject any value
   22175      that is not the constant 0.  See `movmemM' for a discussion of the
   22176      choice of mode.
   22177 
   22178      The fourth operand is the known alignment of the destination, in
   22179      the form of a `const_int' rtx.  Thus, if the compiler knows that
   22180      the destination is word-aligned, it may provide the value 4 for
   22181      this operand.
   22182 
   22183      Optional operands 5 and 6 specify expected alignment and size of
   22184      block respectively.  The expected alignment differs from alignment
   22185      in operand 4 in a way that the blocks are not required to be
   22186      aligned according to it in all cases. This expected alignment is
   22187      also in bytes, just like operand 4.  Expected size, when unknown,
   22188      is set to `(const_int -1)'.
   22189 
   22190      The use for multiple `setmemM' is as for `movmemM'.
   22191 
   22192 `cmpstrnM'
   22193      String compare instruction, with five operands.  Operand 0 is the
   22194      output; it has mode M.  The remaining four operands are like the
   22195      operands of `movmemM'.  The two memory blocks specified are
   22196      compared byte by byte in lexicographic order starting at the
   22197      beginning of each string.  The instruction is not allowed to
   22198      prefetch more than one byte at a time since either string may end
   22199      in the first byte and reading past that may access an invalid page
   22200      or segment and cause a fault.  The comparison terminates early if
   22201      the fetched bytes are different or if they are equal to zero.  The
   22202      effect of the instruction is to store a value in operand 0 whose
   22203      sign indicates the result of the comparison.
   22204 
   22205 `cmpstrM'
   22206      String compare instruction, without known maximum length.  Operand
   22207      0 is the output; it has mode M.  The second and third operand are
   22208      the blocks of memory to be compared; both are `mem:BLK' with an
   22209      address in mode `Pmode'.
   22210 
   22211      The fourth operand is the known shared alignment of the source and
   22212      destination, in the form of a `const_int' rtx.  Thus, if the
   22213      compiler knows that both source and destination are word-aligned,
   22214      it may provide the value 4 for this operand.
   22215 
   22216      The two memory blocks specified are compared byte by byte in
   22217      lexicographic order starting at the beginning of each string.  The
   22218      instruction is not allowed to prefetch more than one byte at a
   22219      time since either string may end in the first byte and reading
   22220      past that may access an invalid page or segment and cause a fault.
   22221      The comparison will terminate when the fetched bytes are different
   22222      or if they are equal to zero.  The effect of the instruction is to
   22223      store a value in operand 0 whose sign indicates the result of the
   22224      comparison.
   22225 
   22226 `cmpmemM'
   22227      Block compare instruction, with five operands like the operands of
   22228      `cmpstrM'.  The two memory blocks specified are compared byte by
   22229      byte in lexicographic order starting at the beginning of each
   22230      block.  Unlike `cmpstrM' the instruction can prefetch any bytes in
   22231      the two memory blocks.  Also unlike `cmpstrM' the comparison will
   22232      not stop if both bytes are zero.  The effect of the instruction is
   22233      to store a value in operand 0 whose sign indicates the result of
   22234      the comparison.
   22235 
   22236 `strlenM'
   22237      Compute the length of a string, with three operands.  Operand 0 is
   22238      the result (of mode M), operand 1 is a `mem' referring to the
   22239      first character of the string, operand 2 is the character to
   22240      search for (normally zero), and operand 3 is a constant describing
   22241      the known alignment of the beginning of the string.
   22242 
   22243 `floatMN2'
   22244      Convert signed integer operand 1 (valid for fixed point mode M) to
   22245      floating point mode N and store in operand 0 (which has mode N).
   22246 
   22247 `floatunsMN2'
   22248      Convert unsigned integer operand 1 (valid for fixed point mode M)
   22249      to floating point mode N and store in operand 0 (which has mode N).
   22250 
   22251 `fixMN2'
   22252      Convert operand 1 (valid for floating point mode M) to fixed point
   22253      mode N as a signed number and store in operand 0 (which has mode
   22254      N).  This instruction's result is defined only when the value of
   22255      operand 1 is an integer.
   22256 
   22257      If the machine description defines this pattern, it also needs to
   22258      define the `ftrunc' pattern.
   22259 
   22260 `fixunsMN2'
   22261      Convert operand 1 (valid for floating point mode M) to fixed point
   22262      mode N as an unsigned number and store in operand 0 (which has
   22263      mode N).  This instruction's result is defined only when the value
   22264      of operand 1 is an integer.
   22265 
   22266 `ftruncM2'
   22267      Convert operand 1 (valid for floating point mode M) to an integer
   22268      value, still represented in floating point mode M, and store it in
   22269      operand 0 (valid for floating point mode M).
   22270 
   22271 `fix_truncMN2'
   22272      Like `fixMN2' but works for any floating point value of mode M by
   22273      converting the value to an integer.
   22274 
   22275 `fixuns_truncMN2'
   22276      Like `fixunsMN2' but works for any floating point value of mode M
   22277      by converting the value to an integer.
   22278 
   22279 `truncMN2'
   22280      Truncate operand 1 (valid for mode M) to mode N and store in
   22281      operand 0 (which has mode N).  Both modes must be fixed point or
   22282      both floating point.
   22283 
   22284 `extendMN2'
   22285      Sign-extend operand 1 (valid for mode M) to mode N and store in
   22286      operand 0 (which has mode N).  Both modes must be fixed point or
   22287      both floating point.
   22288 
   22289 `zero_extendMN2'
   22290      Zero-extend operand 1 (valid for mode M) to mode N and store in
   22291      operand 0 (which has mode N).  Both modes must be fixed point.
   22292 
   22293 `fractMN2'
   22294      Convert operand 1 of mode M to mode N and store in operand 0
   22295      (which has mode N).  Mode M and mode N could be fixed-point to
   22296      fixed-point, signed integer to fixed-point, fixed-point to signed
   22297      integer, floating-point to fixed-point, or fixed-point to
   22298      floating-point.  When overflows or underflows happen, the results
   22299      are undefined.
   22300 
   22301 `satfractMN2'
   22302      Convert operand 1 of mode M to mode N and store in operand 0
   22303      (which has mode N).  Mode M and mode N could be fixed-point to
   22304      fixed-point, signed integer to fixed-point, or floating-point to
   22305      fixed-point.  When overflows or underflows happen, the instruction
   22306      saturates the results to the maximum or the minimum.
   22307 
   22308 `fractunsMN2'
   22309      Convert operand 1 of mode M to mode N and store in operand 0
   22310      (which has mode N).  Mode M and mode N could be unsigned integer
   22311      to fixed-point, or fixed-point to unsigned integer.  When
   22312      overflows or underflows happen, the results are undefined.
   22313 
   22314 `satfractunsMN2'
   22315      Convert unsigned integer operand 1 of mode M to fixed-point mode N
   22316      and store in operand 0 (which has mode N).  When overflows or
   22317      underflows happen, the instruction saturates the results to the
   22318      maximum or the minimum.
   22319 
   22320 `extv'
   22321      Extract a bit-field from operand 1 (a register or memory operand),
   22322      where operand 2 specifies the width in bits and operand 3 the
   22323      starting bit, and store it in operand 0.  Operand 0 must have mode
   22324      `word_mode'.  Operand 1 may have mode `byte_mode' or `word_mode';
   22325      often `word_mode' is allowed only for registers.  Operands 2 and 3
   22326      must be valid for `word_mode'.
   22327 
   22328      The RTL generation pass generates this instruction only with
   22329      constants for operands 2 and 3 and the constant is never zero for
   22330      operand 2.
   22331 
   22332      The bit-field value is sign-extended to a full word integer before
   22333      it is stored in operand 0.
   22334 
   22335 `extzv'
   22336      Like `extv' except that the bit-field value is zero-extended.
   22337 
   22338 `insv'
   22339      Store operand 3 (which must be valid for `word_mode') into a
   22340      bit-field in operand 0, where operand 1 specifies the width in
   22341      bits and operand 2 the starting bit.  Operand 0 may have mode
   22342      `byte_mode' or `word_mode'; often `word_mode' is allowed only for
   22343      registers.  Operands 1 and 2 must be valid for `word_mode'.
   22344 
   22345      The RTL generation pass generates this instruction only with
   22346      constants for operands 1 and 2 and the constant is never zero for
   22347      operand 1.
   22348 
   22349 `movMODEcc'
   22350      Conditionally move operand 2 or operand 3 into operand 0 according
   22351      to the comparison in operand 1.  If the comparison is true,
   22352      operand 2 is moved into operand 0, otherwise operand 3 is moved.
   22353 
   22354      The mode of the operands being compared need not be the same as
   22355      the operands being moved.  Some machines, sparc64 for example,
   22356      have instructions that conditionally move an integer value based
   22357      on the floating point condition codes and vice versa.
   22358 
   22359      If the machine does not have conditional move instructions, do not
   22360      define these patterns.
   22361 
   22362 `addMODEcc'
   22363      Similar to `movMODEcc' but for conditional addition.  Conditionally
   22364      move operand 2 or (operands 2 + operand 3) into operand 0
   22365      according to the comparison in operand 1.  If the comparison is
   22366      true, operand 2 is moved into operand 0, otherwise (operand 2 +
   22367      operand 3) is moved.
   22368 
   22369 `cstoreMODE4'
   22370      Store zero or nonzero in operand 0 according to whether a
   22371      comparison is true.  Operand 1 is a comparison operator.  Operand
   22372      2 and operand 3 are the first and second operand of the
   22373      comparison, respectively.  You specify the mode that operand 0
   22374      must have when you write the `match_operand' expression.  The
   22375      compiler automatically sees which mode you have used and supplies
   22376      an operand of that mode.
   22377 
   22378      The value stored for a true condition must have 1 as its low bit,
   22379      or else must be negative.  Otherwise the instruction is not
   22380      suitable and you should omit it from the machine description.  You
   22381      describe to the compiler exactly which value is stored by defining
   22382      the macro `STORE_FLAG_VALUE' (*note Misc::).  If a description
   22383      cannot be found that can be used for all the possible comparison
   22384      operators, you should pick one and use a `define_expand' to map
   22385      all results onto the one you chose.
   22386 
   22387      These operations may `FAIL', but should do so only in relatively
   22388      uncommon cases; if they would `FAIL' for common cases involving
   22389      integer comparisons, it is best to restrict the predicates to not
   22390      allow these operands.  Likewise if a given comparison operator will
   22391      always fail, independent of the operands (for floating-point
   22392      modes, the `ordered_comparison_operator' predicate is often useful
   22393      in this case).
   22394 
   22395      If this pattern is omitted, the compiler will generate a
   22396      conditional branch--for example, it may copy a constant one to the
   22397      target and branching around an assignment of zero to the
   22398      target--or a libcall.  If the predicate for operand 1 only rejects
   22399      some operators, it will also try reordering the operands and/or
   22400      inverting the result value (e.g. by an exclusive OR).  These
   22401      possibilities could be cheaper or equivalent to the instructions
   22402      used for the `cstoreMODE4' pattern followed by those required to
   22403      convert a positive result from `STORE_FLAG_VALUE' to 1; in this
   22404      case, you can and should make operand 1's predicate reject some
   22405      operators in the `cstoreMODE4' pattern, or remove the pattern
   22406      altogether from the machine description.
   22407 
   22408 `cbranchMODE4'
   22409      Conditional branch instruction combined with a compare instruction.
   22410      Operand 0 is a comparison operator.  Operand 1 and operand 2 are
   22411      the first and second operands of the comparison, respectively.
   22412      Operand 3 is a `label_ref' that refers to the label to jump to.
   22413 
   22414 `jump'
   22415      A jump inside a function; an unconditional branch.  Operand 0 is
   22416      the `label_ref' of the label to jump to.  This pattern name is
   22417      mandatory on all machines.
   22418 
   22419 `call'
   22420      Subroutine call instruction returning no value.  Operand 0 is the
   22421      function to call; operand 1 is the number of bytes of arguments
   22422      pushed as a `const_int'; operand 2 is the number of registers used
   22423      as operands.
   22424 
   22425      On most machines, operand 2 is not actually stored into the RTL
   22426      pattern.  It is supplied for the sake of some RISC machines which
   22427      need to put this information into the assembler code; they can put
   22428      it in the RTL instead of operand 1.
   22429 
   22430      Operand 0 should be a `mem' RTX whose address is the address of the
   22431      function.  Note, however, that this address can be a `symbol_ref'
   22432      expression even if it would not be a legitimate memory address on
   22433      the target machine.  If it is also not a valid argument for a call
   22434      instruction, the pattern for this operation should be a
   22435      `define_expand' (*note Expander Definitions::) that places the
   22436      address into a register and uses that register in the call
   22437      instruction.
   22438 
   22439 `call_value'
   22440      Subroutine call instruction returning a value.  Operand 0 is the
   22441      hard register in which the value is returned.  There are three more
   22442      operands, the same as the three operands of the `call' instruction
   22443      (but with numbers increased by one).
   22444 
   22445      Subroutines that return `BLKmode' objects use the `call' insn.
   22446 
   22447 `call_pop', `call_value_pop'
   22448      Similar to `call' and `call_value', except used if defined and if
   22449      `RETURN_POPS_ARGS' is nonzero.  They should emit a `parallel' that
   22450      contains both the function call and a `set' to indicate the
   22451      adjustment made to the frame pointer.
   22452 
   22453      For machines where `RETURN_POPS_ARGS' can be nonzero, the use of
   22454      these patterns increases the number of functions for which the
   22455      frame pointer can be eliminated, if desired.
   22456 
   22457 `untyped_call'
   22458      Subroutine call instruction returning a value of any type.
   22459      Operand 0 is the function to call; operand 1 is a memory location
   22460      where the result of calling the function is to be stored; operand
   22461      2 is a `parallel' expression where each element is a `set'
   22462      expression that indicates the saving of a function return value
   22463      into the result block.
   22464 
   22465      This instruction pattern should be defined to support
   22466      `__builtin_apply' on machines where special instructions are needed
   22467      to call a subroutine with arbitrary arguments or to save the value
   22468      returned.  This instruction pattern is required on machines that
   22469      have multiple registers that can hold a return value (i.e.
   22470      `FUNCTION_VALUE_REGNO_P' is true for more than one register).
   22471 
   22472 `return'
   22473      Subroutine return instruction.  This instruction pattern name
   22474      should be defined only if a single instruction can do all the work
   22475      of returning from a function.
   22476 
   22477      Like the `movM' patterns, this pattern is also used after the RTL
   22478      generation phase.  In this case it is to support machines where
   22479      multiple instructions are usually needed to return from a
   22480      function, but some class of functions only requires one
   22481      instruction to implement a return.  Normally, the applicable
   22482      functions are those which do not need to save any registers or
   22483      allocate stack space.
   22484 
   22485      For such machines, the condition specified in this pattern should
   22486      only be true when `reload_completed' is nonzero and the function's
   22487      epilogue would only be a single instruction.  For machines with
   22488      register windows, the routine `leaf_function_p' may be used to
   22489      determine if a register window push is required.
   22490 
   22491      Machines that have conditional return instructions should define
   22492      patterns such as
   22493 
   22494           (define_insn ""
   22495             [(set (pc)
   22496                   (if_then_else (match_operator
   22497                                    0 "comparison_operator"
   22498                                    [(cc0) (const_int 0)])
   22499                                 (return)
   22500                                 (pc)))]
   22501             "CONDITION"
   22502             "...")
   22503 
   22504      where CONDITION would normally be the same condition specified on
   22505      the named `return' pattern.
   22506 
   22507 `untyped_return'
   22508      Untyped subroutine return instruction.  This instruction pattern
   22509      should be defined to support `__builtin_return' on machines where
   22510      special instructions are needed to return a value of any type.
   22511 
   22512      Operand 0 is a memory location where the result of calling a
   22513      function with `__builtin_apply' is stored; operand 1 is a
   22514      `parallel' expression where each element is a `set' expression
   22515      that indicates the restoring of a function return value from the
   22516      result block.
   22517 
   22518 `nop'
   22519      No-op instruction.  This instruction pattern name should always be
   22520      defined to output a no-op in assembler code.  `(const_int 0)' will
   22521      do as an RTL pattern.
   22522 
   22523 `indirect_jump'
   22524      An instruction to jump to an address which is operand zero.  This
   22525      pattern name is mandatory on all machines.
   22526 
   22527 `casesi'
   22528      Instruction to jump through a dispatch table, including bounds
   22529      checking.  This instruction takes five operands:
   22530 
   22531        1. The index to dispatch on, which has mode `SImode'.
   22532 
   22533        2. The lower bound for indices in the table, an integer constant.
   22534 
   22535        3. The total range of indices in the table--the largest index
   22536           minus the smallest one (both inclusive).
   22537 
   22538        4. A label that precedes the table itself.
   22539 
   22540        5. A label to jump to if the index has a value outside the
   22541           bounds.
   22542 
   22543      The table is an `addr_vec' or `addr_diff_vec' inside of a
   22544      `jump_insn'.  The number of elements in the table is one plus the
   22545      difference between the upper bound and the lower bound.
   22546 
   22547 `tablejump'
   22548      Instruction to jump to a variable address.  This is a low-level
   22549      capability which can be used to implement a dispatch table when
   22550      there is no `casesi' pattern.
   22551 
   22552      This pattern requires two operands: the address or offset, and a
   22553      label which should immediately precede the jump table.  If the
   22554      macro `CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then
   22555      the first operand is an offset which counts from the address of
   22556      the table; otherwise, it is an absolute address to jump to.  In
   22557      either case, the first operand has mode `Pmode'.
   22558 
   22559      The `tablejump' insn is always the last insn before the jump table
   22560      it uses.  Its assembler code normally has no need to use the
   22561      second operand, but you should incorporate it in the RTL pattern so
   22562      that the jump optimizer will not delete the table as unreachable
   22563      code.
   22564 
   22565 `decrement_and_branch_until_zero'
   22566      Conditional branch instruction that decrements a register and
   22567      jumps if the register is nonzero.  Operand 0 is the register to
   22568      decrement and test; operand 1 is the label to jump to if the
   22569      register is nonzero.  *Note Looping Patterns::.
   22570 
   22571      This optional instruction pattern is only used by the combiner,
   22572      typically for loops reversed by the loop optimizer when strength
   22573      reduction is enabled.
   22574 
   22575 `doloop_end'
   22576      Conditional branch instruction that decrements a register and
   22577      jumps if the register is nonzero.  This instruction takes five
   22578      operands: Operand 0 is the register to decrement and test; operand
   22579      1 is the number of loop iterations as a `const_int' or
   22580      `const0_rtx' if this cannot be determined until run-time; operand
   22581      2 is the actual or estimated maximum number of iterations as a
   22582      `const_int'; operand 3 is the number of enclosed loops as a
   22583      `const_int' (an innermost loop has a value of 1); operand 4 is the
   22584      label to jump to if the register is nonzero.  *Note Looping
   22585      Patterns::.
   22586 
   22587      This optional instruction pattern should be defined for machines
   22588      with low-overhead looping instructions as the loop optimizer will
   22589      try to modify suitable loops to utilize it.  If nested
   22590      low-overhead looping is not supported, use a `define_expand'
   22591      (*note Expander Definitions::) and make the pattern fail if
   22592      operand 3 is not `const1_rtx'.  Similarly, if the actual or
   22593      estimated maximum number of iterations is too large for this
   22594      instruction, make it fail.
   22595 
   22596 `doloop_begin'
   22597      Companion instruction to `doloop_end' required for machines that
   22598      need to perform some initialization, such as loading special
   22599      registers used by a low-overhead looping instruction.  If
   22600      initialization insns do not always need to be emitted, use a
   22601      `define_expand' (*note Expander Definitions::) and make it fail.
   22602 
   22603 `canonicalize_funcptr_for_compare'
   22604      Canonicalize the function pointer in operand 1 and store the result
   22605      into operand 0.
   22606 
   22607      Operand 0 is always a `reg' and has mode `Pmode'; operand 1 may be
   22608      a `reg', `mem', `symbol_ref', `const_int', etc and also has mode
   22609      `Pmode'.
   22610 
   22611      Canonicalization of a function pointer usually involves computing
   22612      the address of the function which would be called if the function
   22613      pointer were used in an indirect call.
   22614 
   22615      Only define this pattern if function pointers on the target machine
   22616      can have different values but still call the same function when
   22617      used in an indirect call.
   22618 
   22619 `save_stack_block'
   22620 `save_stack_function'
   22621 `save_stack_nonlocal'
   22622 `restore_stack_block'
   22623 `restore_stack_function'
   22624 `restore_stack_nonlocal'
   22625      Most machines save and restore the stack pointer by copying it to
   22626      or from an object of mode `Pmode'.  Do not define these patterns on
   22627      such machines.
   22628 
   22629      Some machines require special handling for stack pointer saves and
   22630      restores.  On those machines, define the patterns corresponding to
   22631      the non-standard cases by using a `define_expand' (*note Expander
   22632      Definitions::) that produces the required insns.  The three types
   22633      of saves and restores are:
   22634 
   22635        1. `save_stack_block' saves the stack pointer at the start of a
   22636           block that allocates a variable-sized object, and
   22637           `restore_stack_block' restores the stack pointer when the
   22638           block is exited.
   22639 
   22640        2. `save_stack_function' and `restore_stack_function' do a
   22641           similar job for the outermost block of a function and are
   22642           used when the function allocates variable-sized objects or
   22643           calls `alloca'.  Only the epilogue uses the restored stack
   22644           pointer, allowing a simpler save or restore sequence on some
   22645           machines.
   22646 
   22647        3. `save_stack_nonlocal' is used in functions that contain labels
   22648           branched to by nested functions.  It saves the stack pointer
   22649           in such a way that the inner function can use
   22650           `restore_stack_nonlocal' to restore the stack pointer.  The
   22651           compiler generates code to restore the frame and argument
   22652           pointer registers, but some machines require saving and
   22653           restoring additional data such as register window information
   22654           or stack backchains.  Place insns in these patterns to save
   22655           and restore any such required data.
   22656 
   22657      When saving the stack pointer, operand 0 is the save area and
   22658      operand 1 is the stack pointer.  The mode used to allocate the
   22659      save area defaults to `Pmode' but you can override that choice by
   22660      defining the `STACK_SAVEAREA_MODE' macro (*note Storage Layout::).
   22661      You must specify an integral mode, or `VOIDmode' if no save area
   22662      is needed for a particular type of save (either because no save is
   22663      needed or because a machine-specific save area can be used).
   22664      Operand 0 is the stack pointer and operand 1 is the save area for
   22665      restore operations.  If `save_stack_block' is defined, operand 0
   22666      must not be `VOIDmode' since these saves can be arbitrarily nested.
   22667 
   22668      A save area is a `mem' that is at a constant offset from
   22669      `virtual_stack_vars_rtx' when the stack pointer is saved for use by
   22670      nonlocal gotos and a `reg' in the other two cases.
   22671 
   22672 `allocate_stack'
   22673      Subtract (or add if `STACK_GROWS_DOWNWARD' is undefined) operand 1
   22674      from the stack pointer to create space for dynamically allocated
   22675      data.
   22676 
   22677      Store the resultant pointer to this space into operand 0.  If you
   22678      are allocating space from the main stack, do this by emitting a
   22679      move insn to copy `virtual_stack_dynamic_rtx' to operand 0.  If
   22680      you are allocating the space elsewhere, generate code to copy the
   22681      location of the space to operand 0.  In the latter case, you must
   22682      ensure this space gets freed when the corresponding space on the
   22683      main stack is free.
   22684 
   22685      Do not define this pattern if all that must be done is the
   22686      subtraction.  Some machines require other operations such as stack
   22687      probes or maintaining the back chain.  Define this pattern to emit
   22688      those operations in addition to updating the stack pointer.
   22689 
   22690 `check_stack'
   22691      If stack checking (*note Stack Checking::) cannot be done on your
   22692      system by probing the stack, define this pattern to perform the
   22693      needed check and signal an error if the stack has overflowed.  The
   22694      single operand is the address in the stack farthest from the
   22695      current stack pointer that you need to validate.  Normally, on
   22696      platforms where this pattern is needed, you would obtain the stack
   22697      limit from a global or thread-specific variable or register.
   22698 
   22699 `probe_stack'
   22700      If stack checking (*note Stack Checking::) can be done on your
   22701      system by probing the stack but doing it with a "store zero"
   22702      instruction is not valid or optimal, define this pattern to do the
   22703      probing differently and signal an error if the stack has
   22704      overflowed.  The single operand is the memory reference in the
   22705      stack that needs to be probed.
   22706 
   22707 `nonlocal_goto'
   22708      Emit code to generate a non-local goto, e.g., a jump from one
   22709      function to a label in an outer function.  This pattern has four
   22710      arguments, each representing a value to be used in the jump.  The
   22711      first argument is to be loaded into the frame pointer, the second
   22712      is the address to branch to (code to dispatch to the actual label),
   22713      the third is the address of a location where the stack is saved,
   22714      and the last is the address of the label, to be placed in the
   22715      location for the incoming static chain.
   22716 
   22717      On most machines you need not define this pattern, since GCC will
   22718      already generate the correct code, which is to load the frame
   22719      pointer and static chain, restore the stack (using the
   22720      `restore_stack_nonlocal' pattern, if defined), and jump indirectly
   22721      to the dispatcher.  You need only define this pattern if this code
   22722      will not work on your machine.
   22723 
   22724 `nonlocal_goto_receiver'
   22725      This pattern, if defined, contains code needed at the target of a
   22726      nonlocal goto after the code already generated by GCC.  You will
   22727      not normally need to define this pattern.  A typical reason why
   22728      you might need this pattern is if some value, such as a pointer to
   22729      a global table, must be restored when the frame pointer is
   22730      restored.  Note that a nonlocal goto only occurs within a
   22731      unit-of-translation, so a global table pointer that is shared by
   22732      all functions of a given module need not be restored.  There are
   22733      no arguments.
   22734 
   22735 `exception_receiver'
   22736      This pattern, if defined, contains code needed at the site of an
   22737      exception handler that isn't needed at the site of a nonlocal
   22738      goto.  You will not normally need to define this pattern.  A
   22739      typical reason why you might need this pattern is if some value,
   22740      such as a pointer to a global table, must be restored after
   22741      control flow is branched to the handler of an exception.  There
   22742      are no arguments.
   22743 
   22744 `builtin_setjmp_setup'
   22745      This pattern, if defined, contains additional code needed to
   22746      initialize the `jmp_buf'.  You will not normally need to define
   22747      this pattern.  A typical reason why you might need this pattern is
   22748      if some value, such as a pointer to a global table, must be
   22749      restored.  Though it is preferred that the pointer value be
   22750      recalculated if possible (given the address of a label for
   22751      instance).  The single argument is a pointer to the `jmp_buf'.
   22752      Note that the buffer is five words long and that the first three
   22753      are normally used by the generic mechanism.
   22754 
   22755 `builtin_setjmp_receiver'
   22756      This pattern, if defined, contains code needed at the site of a
   22757      built-in setjmp that isn't needed at the site of a nonlocal goto.
   22758      You will not normally need to define this pattern.  A typical
   22759      reason why you might need this pattern is if some value, such as a
   22760      pointer to a global table, must be restored.  It takes one
   22761      argument, which is the label to which builtin_longjmp transfered
   22762      control; this pattern may be emitted at a small offset from that
   22763      label.
   22764 
   22765 `builtin_longjmp'
   22766      This pattern, if defined, performs the entire action of the
   22767      longjmp.  You will not normally need to define this pattern unless
   22768      you also define `builtin_setjmp_setup'.  The single argument is a
   22769      pointer to the `jmp_buf'.
   22770 
   22771 `eh_return'
   22772      This pattern, if defined, affects the way `__builtin_eh_return',
   22773      and thence the call frame exception handling library routines, are
   22774      built.  It is intended to handle non-trivial actions needed along
   22775      the abnormal return path.
   22776 
   22777      The address of the exception handler to which the function should
   22778      return is passed as operand to this pattern.  It will normally
   22779      need to copied by the pattern to some special register or memory
   22780      location.  If the pattern needs to determine the location of the
   22781      target call frame in order to do so, it may use
   22782      `EH_RETURN_STACKADJ_RTX', if defined; it will have already been
   22783      assigned.
   22784 
   22785      If this pattern is not defined, the default action will be to
   22786      simply copy the return address to `EH_RETURN_HANDLER_RTX'.  Either
   22787      that macro or this pattern needs to be defined if call frame
   22788      exception handling is to be used.
   22789 
   22790 `prologue'
   22791      This pattern, if defined, emits RTL for entry to a function.  The
   22792      function entry is responsible for setting up the stack frame,
   22793      initializing the frame pointer register, saving callee saved
   22794      registers, etc.
   22795 
   22796      Using a prologue pattern is generally preferred over defining
   22797      `TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the
   22798      prologue.
   22799 
   22800      The `prologue' pattern is particularly useful for targets which
   22801      perform instruction scheduling.
   22802 
   22803 `epilogue'
   22804      This pattern emits RTL for exit from a function.  The function
   22805      exit is responsible for deallocating the stack frame, restoring
   22806      callee saved registers and emitting the return instruction.
   22807 
   22808      Using an epilogue pattern is generally preferred over defining
   22809      `TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the
   22810      epilogue.
   22811 
   22812      The `epilogue' pattern is particularly useful for targets which
   22813      perform instruction scheduling or which have delay slots for their
   22814      return instruction.
   22815 
   22816 `sibcall_epilogue'
   22817      This pattern, if defined, emits RTL for exit from a function
   22818      without the final branch back to the calling function.  This
   22819      pattern will be emitted before any sibling call (aka tail call)
   22820      sites.
   22821 
   22822      The `sibcall_epilogue' pattern must not clobber any arguments used
   22823      for parameter passing or any stack slots for arguments passed to
   22824      the current function.
   22825 
   22826 `trap'
   22827      This pattern, if defined, signals an error, typically by causing
   22828      some kind of signal to be raised.  Among other places, it is used
   22829      by the Java front end to signal `invalid array index' exceptions.
   22830 
   22831 `ctrapMM4'
   22832      Conditional trap instruction.  Operand 0 is a piece of RTL which
   22833      performs a comparison, and operands 1 and 2 are the arms of the
   22834      comparison.  Operand 3 is the trap code, an integer.
   22835 
   22836      A typical `ctrap' pattern looks like
   22837 
   22838           (define_insn "ctrapsi4"
   22839             [(trap_if (match_operator 0 "trap_operator"
   22840                        [(match_operand 1 "register_operand")
   22841                         (match_operand 2 "immediate_operand")])
   22842                       (match_operand 3 "const_int_operand" "i"))]
   22843             ""
   22844             "...")
   22845 
   22846 `prefetch'
   22847      This pattern, if defined, emits code for a non-faulting data
   22848      prefetch instruction.  Operand 0 is the address of the memory to
   22849      prefetch.  Operand 1 is a constant 1 if the prefetch is preparing
   22850      for a write to the memory address, or a constant 0 otherwise.
   22851      Operand 2 is the expected degree of temporal locality of the data
   22852      and is a value between 0 and 3, inclusive; 0 means that the data
   22853      has no temporal locality, so it need not be left in the cache
   22854      after the access; 3 means that the data has a high degree of
   22855      temporal locality and should be left in all levels of cache
   22856      possible;  1 and 2 mean, respectively, a low or moderate degree of
   22857      temporal locality.
   22858 
   22859      Targets that do not support write prefetches or locality hints can
   22860      ignore the values of operands 1 and 2.
   22861 
   22862 `blockage'
   22863      This pattern defines a pseudo insn that prevents the instruction
   22864      scheduler from moving instructions across the boundary defined by
   22865      the blockage insn.  Normally an UNSPEC_VOLATILE pattern.
   22866 
   22867 `memory_barrier'
   22868      If the target memory model is not fully synchronous, then this
   22869      pattern should be defined to an instruction that orders both loads
   22870      and stores before the instruction with respect to loads and stores
   22871      after the instruction.  This pattern has no operands.
   22872 
   22873 `sync_compare_and_swapMODE'
   22874      This pattern, if defined, emits code for an atomic compare-and-swap
   22875      operation.  Operand 1 is the memory on which the atomic operation
   22876      is performed.  Operand 2 is the "old" value to be compared against
   22877      the current contents of the memory location.  Operand 3 is the
   22878      "new" value to store in the memory if the compare succeeds.
   22879      Operand 0 is the result of the operation; it should contain the
   22880      contents of the memory before the operation.  If the compare
   22881      succeeds, this should obviously be a copy of operand 2.
   22882 
   22883      This pattern must show that both operand 0 and operand 1 are
   22884      modified.
   22885 
   22886      This pattern must issue any memory barrier instructions such that
   22887      all memory operations before the atomic operation occur before the
   22888      atomic operation and all memory operations after the atomic
   22889      operation occur after the atomic operation.
   22890 
   22891      For targets where the success or failure of the compare-and-swap
   22892      operation is available via the status flags, it is possible to
   22893      avoid a separate compare operation and issue the subsequent branch
   22894      or store-flag operation immediately after the compare-and-swap.
   22895      To this end, GCC will look for a `MODE_CC' set in the output of
   22896      `sync_compare_and_swapMODE'; if the machine description includes
   22897      such a set, the target should also define special `cbranchcc4'
   22898      and/or `cstorecc4' instructions.  GCC will then be able to take
   22899      the destination of the `MODE_CC' set and pass it to the
   22900      `cbranchcc4' or `cstorecc4' pattern as the first operand of the
   22901      comparison (the second will be `(const_int 0)').
   22902 
   22903 `sync_addMODE', `sync_subMODE'
   22904 `sync_iorMODE', `sync_andMODE'
   22905 `sync_xorMODE', `sync_nandMODE'
   22906      These patterns emit code for an atomic operation on memory.
   22907      Operand 0 is the memory on which the atomic operation is performed.
   22908      Operand 1 is the second operand to the binary operator.
   22909 
   22910      This pattern must issue any memory barrier instructions such that
   22911      all memory operations before the atomic operation occur before the
   22912      atomic operation and all memory operations after the atomic
   22913      operation occur after the atomic operation.
   22914 
   22915      If these patterns are not defined, the operation will be
   22916      constructed from a compare-and-swap operation, if defined.
   22917 
   22918 `sync_old_addMODE', `sync_old_subMODE'
   22919 `sync_old_iorMODE', `sync_old_andMODE'
   22920 `sync_old_xorMODE', `sync_old_nandMODE'
   22921      These patterns are emit code for an atomic operation on memory,
   22922      and return the value that the memory contained before the
   22923      operation.  Operand 0 is the result value, operand 1 is the memory
   22924      on which the atomic operation is performed, and operand 2 is the
   22925      second operand to the binary operator.
   22926 
   22927      This pattern must issue any memory barrier instructions such that
   22928      all memory operations before the atomic operation occur before the
   22929      atomic operation and all memory operations after the atomic
   22930      operation occur after the atomic operation.
   22931 
   22932      If these patterns are not defined, the operation will be
   22933      constructed from a compare-and-swap operation, if defined.
   22934 
   22935 `sync_new_addMODE', `sync_new_subMODE'
   22936 `sync_new_iorMODE', `sync_new_andMODE'
   22937 `sync_new_xorMODE', `sync_new_nandMODE'
   22938      These patterns are like their `sync_old_OP' counterparts, except
   22939      that they return the value that exists in the memory location
   22940      after the operation, rather than before the operation.
   22941 
   22942 `sync_lock_test_and_setMODE'
   22943      This pattern takes two forms, based on the capabilities of the
   22944      target.  In either case, operand 0 is the result of the operand,
   22945      operand 1 is the memory on which the atomic operation is
   22946      performed, and operand 2 is the value to set in the lock.
   22947 
   22948      In the ideal case, this operation is an atomic exchange operation,
   22949      in which the previous value in memory operand is copied into the
   22950      result operand, and the value operand is stored in the memory
   22951      operand.
   22952 
   22953      For less capable targets, any value operand that is not the
   22954      constant 1 should be rejected with `FAIL'.  In this case the
   22955      target may use an atomic test-and-set bit operation.  The result
   22956      operand should contain 1 if the bit was previously set and 0 if
   22957      the bit was previously clear.  The true contents of the memory
   22958      operand are implementation defined.
   22959 
   22960      This pattern must issue any memory barrier instructions such that
   22961      the pattern as a whole acts as an acquire barrier, that is all
   22962      memory operations after the pattern do not occur until the lock is
   22963      acquired.
   22964 
   22965      If this pattern is not defined, the operation will be constructed
   22966      from a compare-and-swap operation, if defined.
   22967 
   22968 `sync_lock_releaseMODE'
   22969      This pattern, if defined, releases a lock set by
   22970      `sync_lock_test_and_setMODE'.  Operand 0 is the memory that
   22971      contains the lock; operand 1 is the value to store in the lock.
   22972 
   22973      If the target doesn't implement full semantics for
   22974      `sync_lock_test_and_setMODE', any value operand which is not the
   22975      constant 0 should be rejected with `FAIL', and the true contents
   22976      of the memory operand are implementation defined.
   22977 
   22978      This pattern must issue any memory barrier instructions such that
   22979      the pattern as a whole acts as a release barrier, that is the lock
   22980      is released only after all previous memory operations have
   22981      completed.
   22982 
   22983      If this pattern is not defined, then a `memory_barrier' pattern
   22984      will be emitted, followed by a store of the value to the memory
   22985      operand.
   22986 
   22987 `stack_protect_set'
   22988      This pattern, if defined, moves a `ptr_mode' value from the memory
   22989      in operand 1 to the memory in operand 0 without leaving the value
   22990      in a register afterward.  This is to avoid leaking the value some
   22991      place that an attacker might use to rewrite the stack guard slot
   22992      after having clobbered it.
   22993 
   22994      If this pattern is not defined, then a plain move pattern is
   22995      generated.
   22996 
   22997 `stack_protect_test'
   22998      This pattern, if defined, compares a `ptr_mode' value from the
   22999      memory in operand 1 with the memory in operand 0 without leaving
   23000      the value in a register afterward and branches to operand 2 if the
   23001      values weren't equal.
   23002 
   23003      If this pattern is not defined, then a plain compare pattern and
   23004      conditional branch pattern is used.
   23005 
   23006 `clear_cache'
   23007      This pattern, if defined, flushes the instruction cache for a
   23008      region of memory.  The region is bounded to by the Pmode pointers
   23009      in operand 0 inclusive and operand 1 exclusive.
   23010 
   23011      If this pattern is not defined, a call to the library function
   23012      `__clear_cache' is used.
   23013 
   23014 
   23015 
   23016 File: gccint.info,  Node: Pattern Ordering,  Next: Dependent Patterns,  Prev: Standard Names,  Up: Machine Desc
   23017 
   23018 16.10 When the Order of Patterns Matters
   23019 ========================================
   23020 
   23021 Sometimes an insn can match more than one instruction pattern.  Then the
   23022 pattern that appears first in the machine description is the one used.
   23023 Therefore, more specific patterns (patterns that will match fewer
   23024 things) and faster instructions (those that will produce better code
   23025 when they do match) should usually go first in the description.
   23026 
   23027  In some cases the effect of ordering the patterns can be used to hide
   23028 a pattern when it is not valid.  For example, the 68000 has an
   23029 instruction for converting a fullword to floating point and another for
   23030 converting a byte to floating point.  An instruction converting an
   23031 integer to floating point could match either one.  We put the pattern
   23032 to convert the fullword first to make sure that one will be used rather
   23033 than the other.  (Otherwise a large integer might be generated as a
   23034 single-byte immediate quantity, which would not work.)  Instead of
   23035 using this pattern ordering it would be possible to make the pattern
   23036 for convert-a-byte smart enough to deal properly with any constant
   23037 value.
   23038 
   23039 
   23040 File: gccint.info,  Node: Dependent Patterns,  Next: Jump Patterns,  Prev: Pattern Ordering,  Up: Machine Desc
   23041 
   23042 16.11 Interdependence of Patterns
   23043 =================================
   23044 
   23045 In some cases machines support instructions identical except for the
   23046 machine mode of one or more operands.  For example, there may be
   23047 "sign-extend halfword" and "sign-extend byte" instructions whose
   23048 patterns are
   23049 
   23050      (set (match_operand:SI 0 ...)
   23051           (extend:SI (match_operand:HI 1 ...)))
   23052 
   23053      (set (match_operand:SI 0 ...)
   23054           (extend:SI (match_operand:QI 1 ...)))
   23055 
   23056 Constant integers do not specify a machine mode, so an instruction to
   23057 extend a constant value could match either pattern.  The pattern it
   23058 actually will match is the one that appears first in the file.  For
   23059 correct results, this must be the one for the widest possible mode
   23060 (`HImode', here).  If the pattern matches the `QImode' instruction, the
   23061 results will be incorrect if the constant value does not actually fit
   23062 that mode.
   23063 
   23064  Such instructions to extend constants are rarely generated because
   23065 they are optimized away, but they do occasionally happen in nonoptimized
   23066 compilations.
   23067 
   23068  If a constraint in a pattern allows a constant, the reload pass may
   23069 replace a register with a constant permitted by the constraint in some
   23070 cases.  Similarly for memory references.  Because of this substitution,
   23071 you should not provide separate patterns for increment and decrement
   23072 instructions.  Instead, they should be generated from the same pattern
   23073 that supports register-register add insns by examining the operands and
   23074 generating the appropriate machine instruction.
   23075 
   23076 
   23077 File: gccint.info,  Node: Jump Patterns,  Next: Looping Patterns,  Prev: Dependent Patterns,  Up: Machine Desc
   23078 
   23079 16.12 Defining Jump Instruction Patterns
   23080 ========================================
   23081 
   23082 GCC does not assume anything about how the machine realizes jumps.  The
   23083 machine description should define a single pattern, usually a
   23084 `define_expand', which expands to all the required insns.
   23085 
   23086  Usually, this would be a comparison insn to set the condition code and
   23087 a separate branch insn testing the condition code and branching or not
   23088 according to its value.  For many machines, however, separating
   23089 compares and branches is limiting, which is why the more flexible
   23090 approach with one `define_expand' is used in GCC.  The machine
   23091 description becomes clearer for architectures that have
   23092 compare-and-branch instructions but no condition code.  It also works
   23093 better when different sets of comparison operators are supported by
   23094 different kinds of conditional branches (e.g. integer vs.
   23095 floating-point), or by conditional branches with respect to conditional
   23096 stores.
   23097 
   23098  Two separate insns are always used if the machine description
   23099 represents a condition code register using the legacy RTL expression
   23100 `(cc0)', and on most machines that use a separate condition code
   23101 register (*note Condition Code::).  For machines that use `(cc0)', in
   23102 fact, the set and use of the condition code must be separate and
   23103 adjacent(1), thus allowing flags in `cc_status' to be used (*note
   23104 Condition Code::) and so that the comparison and branch insns could be
   23105 located from each other by using the functions `prev_cc0_setter' and
   23106 `next_cc0_user'.
   23107 
   23108  Even in this case having a single entry point for conditional branches
   23109 is advantageous, because it handles equally well the case where a single
   23110 comparison instruction records the results of both signed and unsigned
   23111 comparison of the given operands (with the branch insns coming in
   23112 distinct signed and unsigned flavors) as in the x86 or SPARC, and the
   23113 case where there are distinct signed and unsigned compare instructions
   23114 and only one set of conditional branch instructions as in the PowerPC.
   23115 
   23116  ---------- Footnotes ----------
   23117 
   23118  (1) `note' insns can separate them, though.
   23119 
   23120 
   23121 File: gccint.info,  Node: Looping Patterns,  Next: Insn Canonicalizations,  Prev: Jump Patterns,  Up: Machine Desc
   23122 
   23123 16.13 Defining Looping Instruction Patterns
   23124 ===========================================
   23125 
   23126 Some machines have special jump instructions that can be utilized to
   23127 make loops more efficient.  A common example is the 68000 `dbra'
   23128 instruction which performs a decrement of a register and a branch if the
   23129 result was greater than zero.  Other machines, in particular digital
   23130 signal processors (DSPs), have special block repeat instructions to
   23131 provide low-overhead loop support.  For example, the TI TMS320C3x/C4x
   23132 DSPs have a block repeat instruction that loads special registers to
   23133 mark the top and end of a loop and to count the number of loop
   23134 iterations.  This avoids the need for fetching and executing a
   23135 `dbra'-like instruction and avoids pipeline stalls associated with the
   23136 jump.
   23137 
   23138  GCC has three special named patterns to support low overhead looping.
   23139 They are `decrement_and_branch_until_zero', `doloop_begin', and
   23140 `doloop_end'.  The first pattern, `decrement_and_branch_until_zero', is
   23141 not emitted during RTL generation but may be emitted during the
   23142 instruction combination phase.  This requires the assistance of the
   23143 loop optimizer, using information collected during strength reduction,
   23144 to reverse a loop to count down to zero.  Some targets also require the
   23145 loop optimizer to add a `REG_NONNEG' note to indicate that the
   23146 iteration count is always positive.  This is needed if the target
   23147 performs a signed loop termination test.  For example, the 68000 uses a
   23148 pattern similar to the following for its `dbra' instruction:
   23149 
   23150      (define_insn "decrement_and_branch_until_zero"
   23151        [(set (pc)
   23152              (if_then_else
   23153                (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am")
   23154                             (const_int -1))
   23155                    (const_int 0))
   23156                (label_ref (match_operand 1 "" ""))
   23157                (pc)))
   23158         (set (match_dup 0)
   23159              (plus:SI (match_dup 0)
   23160                       (const_int -1)))]
   23161        "find_reg_note (insn, REG_NONNEG, 0)"
   23162        "...")
   23163 
   23164  Note that since the insn is both a jump insn and has an output, it must
   23165 deal with its own reloads, hence the `m' constraints.  Also note that
   23166 since this insn is generated by the instruction combination phase
   23167 combining two sequential insns together into an implicit parallel insn,
   23168 the iteration counter needs to be biased by the same amount as the
   23169 decrement operation, in this case -1.  Note that the following similar
   23170 pattern will not be matched by the combiner.
   23171 
   23172      (define_insn "decrement_and_branch_until_zero"
   23173        [(set (pc)
   23174              (if_then_else
   23175                (ge (match_operand:SI 0 "general_operand" "+d*am")
   23176                    (const_int 1))
   23177                (label_ref (match_operand 1 "" ""))
   23178                (pc)))
   23179         (set (match_dup 0)
   23180              (plus:SI (match_dup 0)
   23181                       (const_int -1)))]
   23182        "find_reg_note (insn, REG_NONNEG, 0)"
   23183        "...")
   23184 
   23185  The other two special looping patterns, `doloop_begin' and
   23186 `doloop_end', are emitted by the loop optimizer for certain
   23187 well-behaved loops with a finite number of loop iterations using
   23188 information collected during strength reduction.
   23189 
   23190  The `doloop_end' pattern describes the actual looping instruction (or
   23191 the implicit looping operation) and the `doloop_begin' pattern is an
   23192 optional companion pattern that can be used for initialization needed
   23193 for some low-overhead looping instructions.
   23194 
   23195  Note that some machines require the actual looping instruction to be
   23196 emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs).  Emitting
   23197 the true RTL for a looping instruction at the top of the loop can cause
   23198 problems with flow analysis.  So instead, a dummy `doloop' insn is
   23199 emitted at the end of the loop.  The machine dependent reorg pass checks
   23200 for the presence of this `doloop' insn and then searches back to the
   23201 top of the loop, where it inserts the true looping insn (provided there
   23202 are no instructions in the loop which would cause problems).  Any
   23203 additional labels can be emitted at this point.  In addition, if the
   23204 desired special iteration counter register was not allocated, this
   23205 machine dependent reorg pass could emit a traditional compare and jump
   23206 instruction pair.
   23207 
   23208  The essential difference between the `decrement_and_branch_until_zero'
   23209 and the `doloop_end' patterns is that the loop optimizer allocates an
   23210 additional pseudo register for the latter as an iteration counter.
   23211 This pseudo register cannot be used within the loop (i.e., general
   23212 induction variables cannot be derived from it), however, in many cases
   23213 the loop induction variable may become redundant and removed by the
   23214 flow pass.
   23215 
   23216 
   23217 File: gccint.info,  Node: Insn Canonicalizations,  Next: Expander Definitions,  Prev: Looping Patterns,  Up: Machine Desc
   23218 
   23219 16.14 Canonicalization of Instructions
   23220 ======================================
   23221 
   23222 There are often cases where multiple RTL expressions could represent an
   23223 operation performed by a single machine instruction.  This situation is
   23224 most commonly encountered with logical, branch, and multiply-accumulate
   23225 instructions.  In such cases, the compiler attempts to convert these
   23226 multiple RTL expressions into a single canonical form to reduce the
   23227 number of insn patterns required.
   23228 
   23229  In addition to algebraic simplifications, following canonicalizations
   23230 are performed:
   23231 
   23232    * For commutative and comparison operators, a constant is always
   23233      made the second operand.  If a machine only supports a constant as
   23234      the second operand, only patterns that match a constant in the
   23235      second operand need be supplied.
   23236 
   23237    * For associative operators, a sequence of operators will always
   23238      chain to the left; for instance, only the left operand of an
   23239      integer `plus' can itself be a `plus'.  `and', `ior', `xor',
   23240      `plus', `mult', `smin', `smax', `umin', and `umax' are associative
   23241      when applied to integers, and sometimes to floating-point.
   23242 
   23243    * For these operators, if only one operand is a `neg', `not',
   23244      `mult', `plus', or `minus' expression, it will be the first
   23245      operand.
   23246 
   23247    * In combinations of `neg', `mult', `plus', and `minus', the `neg'
   23248      operations (if any) will be moved inside the operations as far as
   23249      possible.  For instance, `(neg (mult A B))' is canonicalized as
   23250      `(mult (neg A) B)', but `(plus (mult (neg B) C) A)' is
   23251      canonicalized as `(minus A (mult B C))'.
   23252 
   23253    * For the `compare' operator, a constant is always the second operand
   23254      if the first argument is a condition code register or `(cc0)'.
   23255 
   23256    * An operand of `neg', `not', `mult', `plus', or `minus' is made the
   23257      first operand under the same conditions as above.
   23258 
   23259    * `(ltu (plus A B) B)' is converted to `(ltu (plus A B) A)'.
   23260      Likewise with `geu' instead of `ltu'.
   23261 
   23262    * `(minus X (const_int N))' is converted to `(plus X (const_int
   23263      -N))'.
   23264 
   23265    * Within address computations (i.e., inside `mem'), a left shift is
   23266      converted into the appropriate multiplication by a power of two.
   23267 
   23268    * De Morgan's Law is used to move bitwise negation inside a bitwise
   23269      logical-and or logical-or operation.  If this results in only one
   23270      operand being a `not' expression, it will be the first one.
   23271 
   23272      A machine that has an instruction that performs a bitwise
   23273      logical-and of one operand with the bitwise negation of the other
   23274      should specify the pattern for that instruction as
   23275 
   23276           (define_insn ""
   23277             [(set (match_operand:M 0 ...)
   23278                   (and:M (not:M (match_operand:M 1 ...))
   23279                                (match_operand:M 2 ...)))]
   23280             "..."
   23281             "...")
   23282 
   23283      Similarly, a pattern for a "NAND" instruction should be written
   23284 
   23285           (define_insn ""
   23286             [(set (match_operand:M 0 ...)
   23287                   (ior:M (not:M (match_operand:M 1 ...))
   23288                                (not:M (match_operand:M 2 ...))))]
   23289             "..."
   23290             "...")
   23291 
   23292      In both cases, it is not necessary to include patterns for the many
   23293      logically equivalent RTL expressions.
   23294 
   23295    * The only possible RTL expressions involving both bitwise
   23296      exclusive-or and bitwise negation are `(xor:M X Y)' and `(not:M
   23297      (xor:M X Y))'.
   23298 
   23299    * The sum of three items, one of which is a constant, will only
   23300      appear in the form
   23301 
   23302           (plus:M (plus:M X Y) CONSTANT)
   23303 
   23304    * Equality comparisons of a group of bits (usually a single bit)
   23305      with zero will be written using `zero_extract' rather than the
   23306      equivalent `and' or `sign_extract' operations.
   23307 
   23308 
   23309  Further canonicalization rules are defined in the function
   23310 `commutative_operand_precedence' in `gcc/rtlanal.c'.
   23311 
   23312 
   23313 File: gccint.info,  Node: Expander Definitions,  Next: Insn Splitting,  Prev: Insn Canonicalizations,  Up: Machine Desc
   23314 
   23315 16.15 Defining RTL Sequences for Code Generation
   23316 ================================================
   23317 
   23318 On some target machines, some standard pattern names for RTL generation
   23319 cannot be handled with single insn, but a sequence of RTL insns can
   23320 represent them.  For these target machines, you can write a
   23321 `define_expand' to specify how to generate the sequence of RTL.
   23322 
   23323  A `define_expand' is an RTL expression that looks almost like a
   23324 `define_insn'; but, unlike the latter, a `define_expand' is used only
   23325 for RTL generation and it can produce more than one RTL insn.
   23326 
   23327  A `define_expand' RTX has four operands:
   23328 
   23329    * The name.  Each `define_expand' must have a name, since the only
   23330      use for it is to refer to it by name.
   23331 
   23332    * The RTL template.  This is a vector of RTL expressions representing
   23333      a sequence of separate instructions.  Unlike `define_insn', there
   23334      is no implicit surrounding `PARALLEL'.
   23335 
   23336    * The condition, a string containing a C expression.  This
   23337      expression is used to express how the availability of this pattern
   23338      depends on subclasses of target machine, selected by command-line
   23339      options when GCC is run.  This is just like the condition of a
   23340      `define_insn' that has a standard name.  Therefore, the condition
   23341      (if present) may not depend on the data in the insn being matched,
   23342      but only the target-machine-type flags.  The compiler needs to
   23343      test these conditions during initialization in order to learn
   23344      exactly which named instructions are available in a particular run.
   23345 
   23346    * The preparation statements, a string containing zero or more C
   23347      statements which are to be executed before RTL code is generated
   23348      from the RTL template.
   23349 
   23350      Usually these statements prepare temporary registers for use as
   23351      internal operands in the RTL template, but they can also generate
   23352      RTL insns directly by calling routines such as `emit_insn', etc.
   23353      Any such insns precede the ones that come from the RTL template.
   23354 
   23355  Every RTL insn emitted by a `define_expand' must match some
   23356 `define_insn' in the machine description.  Otherwise, the compiler will
   23357 crash when trying to generate code for the insn or trying to optimize
   23358 it.
   23359 
   23360  The RTL template, in addition to controlling generation of RTL insns,
   23361 also describes the operands that need to be specified when this pattern
   23362 is used.  In particular, it gives a predicate for each operand.
   23363 
   23364  A true operand, which needs to be specified in order to generate RTL
   23365 from the pattern, should be described with a `match_operand' in its
   23366 first occurrence in the RTL template.  This enters information on the
   23367 operand's predicate into the tables that record such things.  GCC uses
   23368 the information to preload the operand into a register if that is
   23369 required for valid RTL code.  If the operand is referred to more than
   23370 once, subsequent references should use `match_dup'.
   23371 
   23372  The RTL template may also refer to internal "operands" which are
   23373 temporary registers or labels used only within the sequence made by the
   23374 `define_expand'.  Internal operands are substituted into the RTL
   23375 template with `match_dup', never with `match_operand'.  The values of
   23376 the internal operands are not passed in as arguments by the compiler
   23377 when it requests use of this pattern.  Instead, they are computed
   23378 within the pattern, in the preparation statements.  These statements
   23379 compute the values and store them into the appropriate elements of
   23380 `operands' so that `match_dup' can find them.
   23381 
   23382  There are two special macros defined for use in the preparation
   23383 statements: `DONE' and `FAIL'.  Use them with a following semicolon, as
   23384 a statement.
   23385 
   23386 `DONE'
   23387      Use the `DONE' macro to end RTL generation for the pattern.  The
   23388      only RTL insns resulting from the pattern on this occasion will be
   23389      those already emitted by explicit calls to `emit_insn' within the
   23390      preparation statements; the RTL template will not be generated.
   23391 
   23392 `FAIL'
   23393      Make the pattern fail on this occasion.  When a pattern fails, it
   23394      means that the pattern was not truly available.  The calling
   23395      routines in the compiler will try other strategies for code
   23396      generation using other patterns.
   23397 
   23398      Failure is currently supported only for binary (addition,
   23399      multiplication, shifting, etc.) and bit-field (`extv', `extzv',
   23400      and `insv') operations.
   23401 
   23402  If the preparation falls through (invokes neither `DONE' nor `FAIL'),
   23403 then the `define_expand' acts like a `define_insn' in that the RTL
   23404 template is used to generate the insn.
   23405 
   23406  The RTL template is not used for matching, only for generating the
   23407 initial insn list.  If the preparation statement always invokes `DONE'
   23408 or `FAIL', the RTL template may be reduced to a simple list of
   23409 operands, such as this example:
   23410 
   23411      (define_expand "addsi3"
   23412        [(match_operand:SI 0 "register_operand" "")
   23413         (match_operand:SI 1 "register_operand" "")
   23414         (match_operand:SI 2 "register_operand" "")]
   23415        ""
   23416        "
   23417      {
   23418        handle_add (operands[0], operands[1], operands[2]);
   23419        DONE;
   23420      }")
   23421 
   23422  Here is an example, the definition of left-shift for the SPUR chip:
   23423 
   23424      (define_expand "ashlsi3"
   23425        [(set (match_operand:SI 0 "register_operand" "")
   23426              (ashift:SI
   23427                (match_operand:SI 1 "register_operand" "")
   23428                (match_operand:SI 2 "nonmemory_operand" "")))]
   23429        ""
   23430        "
   23431 
   23432      {
   23433        if (GET_CODE (operands[2]) != CONST_INT
   23434            || (unsigned) INTVAL (operands[2]) > 3)
   23435          FAIL;
   23436      }")
   23437 
   23438 This example uses `define_expand' so that it can generate an RTL insn
   23439 for shifting when the shift-count is in the supported range of 0 to 3
   23440 but fail in other cases where machine insns aren't available.  When it
   23441 fails, the compiler tries another strategy using different patterns
   23442 (such as, a library call).
   23443 
   23444  If the compiler were able to handle nontrivial condition-strings in
   23445 patterns with names, then it would be possible to use a `define_insn'
   23446 in that case.  Here is another case (zero-extension on the 68000) which
   23447 makes more use of the power of `define_expand':
   23448 
   23449      (define_expand "zero_extendhisi2"
   23450        [(set (match_operand:SI 0 "general_operand" "")
   23451              (const_int 0))
   23452         (set (strict_low_part
   23453                (subreg:HI
   23454                  (match_dup 0)
   23455                  0))
   23456              (match_operand:HI 1 "general_operand" ""))]
   23457        ""
   23458        "operands[1] = make_safe_from (operands[1], operands[0]);")
   23459 
   23460 Here two RTL insns are generated, one to clear the entire output operand
   23461 and the other to copy the input operand into its low half.  This
   23462 sequence is incorrect if the input operand refers to [the old value of]
   23463 the output operand, so the preparation statement makes sure this isn't
   23464 so.  The function `make_safe_from' copies the `operands[1]' into a
   23465 temporary register if it refers to `operands[0]'.  It does this by
   23466 emitting another RTL insn.
   23467 
   23468  Finally, a third example shows the use of an internal operand.
   23469 Zero-extension on the SPUR chip is done by `and'-ing the result against
   23470 a halfword mask.  But this mask cannot be represented by a `const_int'
   23471 because the constant value is too large to be legitimate on this
   23472 machine.  So it must be copied into a register with `force_reg' and
   23473 then the register used in the `and'.
   23474 
   23475      (define_expand "zero_extendhisi2"
   23476        [(set (match_operand:SI 0 "register_operand" "")
   23477              (and:SI (subreg:SI
   23478                        (match_operand:HI 1 "register_operand" "")
   23479                        0)
   23480                      (match_dup 2)))]
   23481        ""
   23482        "operands[2]
   23483           = force_reg (SImode, GEN_INT (65535)); ")
   23484 
   23485  _Note:_ If the `define_expand' is used to serve a standard binary or
   23486 unary arithmetic operation or a bit-field operation, then the last insn
   23487 it generates must not be a `code_label', `barrier' or `note'.  It must
   23488 be an `insn', `jump_insn' or `call_insn'.  If you don't need a real insn
   23489 at the end, emit an insn to copy the result of the operation into
   23490 itself.  Such an insn will generate no code, but it can avoid problems
   23491 in the compiler.
   23492 
   23493 
   23494 File: gccint.info,  Node: Insn Splitting,  Next: Including Patterns,  Prev: Expander Definitions,  Up: Machine Desc
   23495 
   23496 16.16 Defining How to Split Instructions
   23497 ========================================
   23498 
   23499 There are two cases where you should specify how to split a pattern
   23500 into multiple insns.  On machines that have instructions requiring
   23501 delay slots (*note Delay Slots::) or that have instructions whose
   23502 output is not available for multiple cycles (*note Processor pipeline
   23503 description::), the compiler phases that optimize these cases need to
   23504 be able to move insns into one-instruction delay slots.  However, some
   23505 insns may generate more than one machine instruction.  These insns
   23506 cannot be placed into a delay slot.
   23507 
   23508  Often you can rewrite the single insn as a list of individual insns,
   23509 each corresponding to one machine instruction.  The disadvantage of
   23510 doing so is that it will cause the compilation to be slower and require
   23511 more space.  If the resulting insns are too complex, it may also
   23512 suppress some optimizations.  The compiler splits the insn if there is a
   23513 reason to believe that it might improve instruction or delay slot
   23514 scheduling.
   23515 
   23516  The insn combiner phase also splits putative insns.  If three insns are
   23517 merged into one insn with a complex expression that cannot be matched by
   23518 some `define_insn' pattern, the combiner phase attempts to split the
   23519 complex pattern into two insns that are recognized.  Usually it can
   23520 break the complex pattern into two patterns by splitting out some
   23521 subexpression.  However, in some other cases, such as performing an
   23522 addition of a large constant in two insns on a RISC machine, the way to
   23523 split the addition into two insns is machine-dependent.
   23524 
   23525  The `define_split' definition tells the compiler how to split a
   23526 complex insn into several simpler insns.  It looks like this:
   23527 
   23528      (define_split
   23529        [INSN-PATTERN]
   23530        "CONDITION"
   23531        [NEW-INSN-PATTERN-1
   23532         NEW-INSN-PATTERN-2
   23533         ...]
   23534        "PREPARATION-STATEMENTS")
   23535 
   23536  INSN-PATTERN is a pattern that needs to be split and CONDITION is the
   23537 final condition to be tested, as in a `define_insn'.  When an insn
   23538 matching INSN-PATTERN and satisfying CONDITION is found, it is replaced
   23539 in the insn list with the insns given by NEW-INSN-PATTERN-1,
   23540 NEW-INSN-PATTERN-2, etc.
   23541 
   23542  The PREPARATION-STATEMENTS are similar to those statements that are
   23543 specified for `define_expand' (*note Expander Definitions::) and are
   23544 executed before the new RTL is generated to prepare for the generated
   23545 code or emit some insns whose pattern is not fixed.  Unlike those in
   23546 `define_expand', however, these statements must not generate any new
   23547 pseudo-registers.  Once reload has completed, they also must not
   23548 allocate any space in the stack frame.
   23549 
   23550  Patterns are matched against INSN-PATTERN in two different
   23551 circumstances.  If an insn needs to be split for delay slot scheduling
   23552 or insn scheduling, the insn is already known to be valid, which means
   23553 that it must have been matched by some `define_insn' and, if
   23554 `reload_completed' is nonzero, is known to satisfy the constraints of
   23555 that `define_insn'.  In that case, the new insn patterns must also be
   23556 insns that are matched by some `define_insn' and, if `reload_completed'
   23557 is nonzero, must also satisfy the constraints of those definitions.
   23558 
   23559  As an example of this usage of `define_split', consider the following
   23560 example from `a29k.md', which splits a `sign_extend' from `HImode' to
   23561 `SImode' into a pair of shift insns:
   23562 
   23563      (define_split
   23564        [(set (match_operand:SI 0 "gen_reg_operand" "")
   23565              (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
   23566        ""
   23567        [(set (match_dup 0)
   23568              (ashift:SI (match_dup 1)
   23569                         (const_int 16)))
   23570         (set (match_dup 0)
   23571              (ashiftrt:SI (match_dup 0)
   23572                           (const_int 16)))]
   23573        "
   23574      { operands[1] = gen_lowpart (SImode, operands[1]); }")
   23575 
   23576  When the combiner phase tries to split an insn pattern, it is always
   23577 the case that the pattern is _not_ matched by any `define_insn'.  The
   23578 combiner pass first tries to split a single `set' expression and then
   23579 the same `set' expression inside a `parallel', but followed by a
   23580 `clobber' of a pseudo-reg to use as a scratch register.  In these
   23581 cases, the combiner expects exactly two new insn patterns to be
   23582 generated.  It will verify that these patterns match some `define_insn'
   23583 definitions, so you need not do this test in the `define_split' (of
   23584 course, there is no point in writing a `define_split' that will never
   23585 produce insns that match).
   23586 
   23587  Here is an example of this use of `define_split', taken from
   23588 `rs6000.md':
   23589 
   23590      (define_split
   23591        [(set (match_operand:SI 0 "gen_reg_operand" "")
   23592              (plus:SI (match_operand:SI 1 "gen_reg_operand" "")
   23593                       (match_operand:SI 2 "non_add_cint_operand" "")))]
   23594        ""
   23595        [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
   23596         (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
   23597      "
   23598      {
   23599        int low = INTVAL (operands[2]) & 0xffff;
   23600        int high = (unsigned) INTVAL (operands[2]) >> 16;
   23601 
   23602        if (low & 0x8000)
   23603          high++, low |= 0xffff0000;
   23604 
   23605        operands[3] = GEN_INT (high << 16);
   23606        operands[4] = GEN_INT (low);
   23607      }")
   23608 
   23609  Here the predicate `non_add_cint_operand' matches any `const_int' that
   23610 is _not_ a valid operand of a single add insn.  The add with the
   23611 smaller displacement is written so that it can be substituted into the
   23612 address of a subsequent operation.
   23613 
   23614  An example that uses a scratch register, from the same file, generates
   23615 an equality comparison of a register and a large constant:
   23616 
   23617      (define_split
   23618        [(set (match_operand:CC 0 "cc_reg_operand" "")
   23619              (compare:CC (match_operand:SI 1 "gen_reg_operand" "")
   23620                          (match_operand:SI 2 "non_short_cint_operand" "")))
   23621         (clobber (match_operand:SI 3 "gen_reg_operand" ""))]
   23622        "find_single_use (operands[0], insn, 0)
   23623         && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
   23624             || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
   23625        [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
   23626         (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
   23627        "
   23628      {
   23629        /* Get the constant we are comparing against, C, and see what it
   23630           looks like sign-extended to 16 bits.  Then see what constant
   23631           could be XOR'ed with C to get the sign-extended value.  */
   23632 
   23633        int c = INTVAL (operands[2]);
   23634        int sextc = (c << 16) >> 16;
   23635        int xorv = c ^ sextc;
   23636 
   23637        operands[4] = GEN_INT (xorv);
   23638        operands[5] = GEN_INT (sextc);
   23639      }")
   23640 
   23641  To avoid confusion, don't write a single `define_split' that accepts
   23642 some insns that match some `define_insn' as well as some insns that
   23643 don't.  Instead, write two separate `define_split' definitions, one for
   23644 the insns that are valid and one for the insns that are not valid.
   23645 
   23646  The splitter is allowed to split jump instructions into sequence of
   23647 jumps or create new jumps in while splitting non-jump instructions.  As
   23648 the central flowgraph and branch prediction information needs to be
   23649 updated, several restriction apply.
   23650 
   23651  Splitting of jump instruction into sequence that over by another jump
   23652 instruction is always valid, as compiler expect identical behavior of
   23653 new jump.  When new sequence contains multiple jump instructions or new
   23654 labels, more assistance is needed.  Splitter is required to create only
   23655 unconditional jumps, or simple conditional jump instructions.
   23656 Additionally it must attach a `REG_BR_PROB' note to each conditional
   23657 jump.  A global variable `split_branch_probability' holds the
   23658 probability of the original branch in case it was a simple conditional
   23659 jump, -1 otherwise.  To simplify recomputing of edge frequencies, the
   23660 new sequence is required to have only forward jumps to the newly
   23661 created labels.
   23662 
   23663  For the common case where the pattern of a define_split exactly
   23664 matches the pattern of a define_insn, use `define_insn_and_split'.  It
   23665 looks like this:
   23666 
   23667      (define_insn_and_split
   23668        [INSN-PATTERN]
   23669        "CONDITION"
   23670        "OUTPUT-TEMPLATE"
   23671        "SPLIT-CONDITION"
   23672        [NEW-INSN-PATTERN-1
   23673         NEW-INSN-PATTERN-2
   23674         ...]
   23675        "PREPARATION-STATEMENTS"
   23676        [INSN-ATTRIBUTES])
   23677 
   23678  INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used
   23679 as in `define_insn'.  The NEW-INSN-PATTERN vector and the
   23680 PREPARATION-STATEMENTS are used as in a `define_split'.  The
   23681 SPLIT-CONDITION is also used as in `define_split', with the additional
   23682 behavior that if the condition starts with `&&', the condition used for
   23683 the split will be the constructed as a logical "and" of the split
   23684 condition with the insn condition.  For example, from i386.md:
   23685 
   23686      (define_insn_and_split "zero_extendhisi2_and"
   23687        [(set (match_operand:SI 0 "register_operand" "=r")
   23688           (zero_extend:SI (match_operand:HI 1 "register_operand" "0")))
   23689         (clobber (reg:CC 17))]
   23690        "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size"
   23691        "#"
   23692        "&& reload_completed"
   23693        [(parallel [(set (match_dup 0)
   23694                         (and:SI (match_dup 0) (const_int 65535)))
   23695                    (clobber (reg:CC 17))])]
   23696        ""
   23697        [(set_attr "type" "alu1")])
   23698 
   23699  In this case, the actual split condition will be
   23700 `TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'.
   23701 
   23702  The `define_insn_and_split' construction provides exactly the same
   23703 functionality as two separate `define_insn' and `define_split'
   23704 patterns.  It exists for compactness, and as a maintenance tool to
   23705 prevent having to ensure the two patterns' templates match.
   23706 
   23707 
   23708 File: gccint.info,  Node: Including Patterns,  Next: Peephole Definitions,  Prev: Insn Splitting,  Up: Machine Desc
   23709 
   23710 16.17 Including Patterns in Machine Descriptions.
   23711 =================================================
   23712 
   23713 The `include' pattern tells the compiler tools where to look for
   23714 patterns that are in files other than in the file `.md'.  This is used
   23715 only at build time and there is no preprocessing allowed.
   23716 
   23717  It looks like:
   23718 
   23719 
   23720      (include
   23721        PATHNAME)
   23722 
   23723  For example:
   23724 
   23725 
   23726      (include "filestuff")
   23727 
   23728  Where PATHNAME is a string that specifies the location of the file,
   23729 specifies the include file to be in `gcc/config/target/filestuff'.  The
   23730 directory `gcc/config/target' is regarded as the default directory.
   23731 
   23732  Machine descriptions may be split up into smaller more manageable
   23733 subsections and placed into subdirectories.
   23734 
   23735  By specifying:
   23736 
   23737 
   23738      (include "BOGUS/filestuff")
   23739 
   23740  the include file is specified to be in
   23741 `gcc/config/TARGET/BOGUS/filestuff'.
   23742 
   23743  Specifying an absolute path for the include file such as;
   23744 
   23745      (include "/u2/BOGUS/filestuff")
   23746  is permitted but is not encouraged.
   23747 
   23748 16.17.1 RTL Generation Tool Options for Directory Search
   23749 --------------------------------------------------------
   23750 
   23751 The `-IDIR' option specifies directories to search for machine
   23752 descriptions.  For example:
   23753 
   23754 
   23755      genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md
   23756 
   23757  Add the directory DIR to the head of the list of directories to be
   23758 searched for header files.  This can be used to override a system
   23759 machine definition file, substituting your own version, since these
   23760 directories are searched before the default machine description file
   23761 directories.  If you use more than one `-I' option, the directories are
   23762 scanned in left-to-right order; the standard default directory come
   23763 after.
   23764 
   23765 
   23766 File: gccint.info,  Node: Peephole Definitions,  Next: Insn Attributes,  Prev: Including Patterns,  Up: Machine Desc
   23767 
   23768 16.18 Machine-Specific Peephole Optimizers
   23769 ==========================================
   23770 
   23771 In addition to instruction patterns the `md' file may contain
   23772 definitions of machine-specific peephole optimizations.
   23773 
   23774  The combiner does not notice certain peephole optimizations when the
   23775 data flow in the program does not suggest that it should try them.  For
   23776 example, sometimes two consecutive insns related in purpose can be
   23777 combined even though the second one does not appear to use a register
   23778 computed in the first one.  A machine-specific peephole optimizer can
   23779 detect such opportunities.
   23780 
   23781  There are two forms of peephole definitions that may be used.  The
   23782 original `define_peephole' is run at assembly output time to match
   23783 insns and substitute assembly text.  Use of `define_peephole' is
   23784 deprecated.
   23785 
   23786  A newer `define_peephole2' matches insns and substitutes new insns.
   23787 The `peephole2' pass is run after register allocation but before
   23788 scheduling, which may result in much better code for targets that do
   23789 scheduling.
   23790 
   23791 * Menu:
   23792 
   23793 * define_peephole::     RTL to Text Peephole Optimizers
   23794 * define_peephole2::    RTL to RTL Peephole Optimizers
   23795 
   23796 
   23797 File: gccint.info,  Node: define_peephole,  Next: define_peephole2,  Up: Peephole Definitions
   23798 
   23799 16.18.1 RTL to Text Peephole Optimizers
   23800 ---------------------------------------
   23801 
   23802 A definition looks like this:
   23803 
   23804      (define_peephole
   23805        [INSN-PATTERN-1
   23806         INSN-PATTERN-2
   23807         ...]
   23808        "CONDITION"
   23809        "TEMPLATE"
   23810        "OPTIONAL-INSN-ATTRIBUTES")
   23811 
   23812 The last string operand may be omitted if you are not using any
   23813 machine-specific information in this machine description.  If present,
   23814 it must obey the same rules as in a `define_insn'.
   23815 
   23816  In this skeleton, INSN-PATTERN-1 and so on are patterns to match
   23817 consecutive insns.  The optimization applies to a sequence of insns when
   23818 INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 matches the next,
   23819 and so on.
   23820 
   23821  Each of the insns matched by a peephole must also match a
   23822 `define_insn'.  Peepholes are checked only at the last stage just
   23823 before code generation, and only optionally.  Therefore, any insn which
   23824 would match a peephole but no `define_insn' will cause a crash in code
   23825 generation in an unoptimized compilation, or at various optimization
   23826 stages.
   23827 
   23828  The operands of the insns are matched with `match_operands',
   23829 `match_operator', and `match_dup', as usual.  What is not usual is that
   23830 the operand numbers apply to all the insn patterns in the definition.
   23831 So, you can check for identical operands in two insns by using
   23832 `match_operand' in one insn and `match_dup' in the other.
   23833 
   23834  The operand constraints used in `match_operand' patterns do not have
   23835 any direct effect on the applicability of the peephole, but they will
   23836 be validated afterward, so make sure your constraints are general enough
   23837 to apply whenever the peephole matches.  If the peephole matches but
   23838 the constraints are not satisfied, the compiler will crash.
   23839 
   23840  It is safe to omit constraints in all the operands of the peephole; or
   23841 you can write constraints which serve as a double-check on the criteria
   23842 previously tested.
   23843 
   23844  Once a sequence of insns matches the patterns, the CONDITION is
   23845 checked.  This is a C expression which makes the final decision whether
   23846 to perform the optimization (we do so if the expression is nonzero).  If
   23847 CONDITION is omitted (in other words, the string is empty) then the
   23848 optimization is applied to every sequence of insns that matches the
   23849 patterns.
   23850 
   23851  The defined peephole optimizations are applied after register
   23852 allocation is complete.  Therefore, the peephole definition can check
   23853 which operands have ended up in which kinds of registers, just by
   23854 looking at the operands.
   23855 
   23856  The way to refer to the operands in CONDITION is to write
   23857 `operands[I]' for operand number I (as matched by `(match_operand I
   23858 ...)').  Use the variable `insn' to refer to the last of the insns
   23859 being matched; use `prev_active_insn' to find the preceding insns.
   23860 
   23861  When optimizing computations with intermediate results, you can use
   23862 CONDITION to match only when the intermediate results are not used
   23863 elsewhere.  Use the C expression `dead_or_set_p (INSN, OP)', where INSN
   23864 is the insn in which you expect the value to be used for the last time
   23865 (from the value of `insn', together with use of `prev_nonnote_insn'),
   23866 and OP is the intermediate value (from `operands[I]').
   23867 
   23868  Applying the optimization means replacing the sequence of insns with
   23869 one new insn.  The TEMPLATE controls ultimate output of assembler code
   23870 for this combined insn.  It works exactly like the template of a
   23871 `define_insn'.  Operand numbers in this template are the same ones used
   23872 in matching the original sequence of insns.
   23873 
   23874  The result of a defined peephole optimizer does not need to match any
   23875 of the insn patterns in the machine description; it does not even have
   23876 an opportunity to match them.  The peephole optimizer definition itself
   23877 serves as the insn pattern to control how the insn is output.
   23878 
   23879  Defined peephole optimizers are run as assembler code is being output,
   23880 so the insns they produce are never combined or rearranged in any way.
   23881 
   23882  Here is an example, taken from the 68000 machine description:
   23883 
   23884      (define_peephole
   23885        [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
   23886         (set (match_operand:DF 0 "register_operand" "=f")
   23887              (match_operand:DF 1 "register_operand" "ad"))]
   23888        "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
   23889      {
   23890        rtx xoperands[2];
   23891        xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
   23892      #ifdef MOTOROLA
   23893        output_asm_insn ("move.l %1,(sp)", xoperands);
   23894        output_asm_insn ("move.l %1,-(sp)", operands);
   23895        return "fmove.d (sp)+,%0";
   23896      #else
   23897        output_asm_insn ("movel %1,sp@", xoperands);
   23898        output_asm_insn ("movel %1,sp@-", operands);
   23899        return "fmoved sp@+,%0";
   23900      #endif
   23901      })
   23902 
   23903  The effect of this optimization is to change
   23904 
   23905      jbsr _foobar
   23906      addql #4,sp
   23907      movel d1,sp@-
   23908      movel d0,sp@-
   23909      fmoved sp@+,fp0
   23910 
   23911 into
   23912 
   23913      jbsr _foobar
   23914      movel d1,sp@
   23915      movel d0,sp@-
   23916      fmoved sp@+,fp0
   23917 
   23918  INSN-PATTERN-1 and so on look _almost_ like the second operand of
   23919 `define_insn'.  There is one important difference: the second operand
   23920 of `define_insn' consists of one or more RTX's enclosed in square
   23921 brackets.  Usually, there is only one: then the same action can be
   23922 written as an element of a `define_peephole'.  But when there are
   23923 multiple actions in a `define_insn', they are implicitly enclosed in a
   23924 `parallel'.  Then you must explicitly write the `parallel', and the
   23925 square brackets within it, in the `define_peephole'.  Thus, if an insn
   23926 pattern looks like this,
   23927 
   23928      (define_insn "divmodsi4"
   23929        [(set (match_operand:SI 0 "general_operand" "=d")
   23930              (div:SI (match_operand:SI 1 "general_operand" "0")
   23931                      (match_operand:SI 2 "general_operand" "dmsK")))
   23932         (set (match_operand:SI 3 "general_operand" "=d")
   23933              (mod:SI (match_dup 1) (match_dup 2)))]
   23934        "TARGET_68020"
   23935        "divsl%.l %2,%3:%0")
   23936 
   23937 then the way to mention this insn in a peephole is as follows:
   23938 
   23939      (define_peephole
   23940        [...
   23941         (parallel
   23942          [(set (match_operand:SI 0 "general_operand" "=d")
   23943                (div:SI (match_operand:SI 1 "general_operand" "0")
   23944                        (match_operand:SI 2 "general_operand" "dmsK")))
   23945           (set (match_operand:SI 3 "general_operand" "=d")
   23946                (mod:SI (match_dup 1) (match_dup 2)))])
   23947         ...]
   23948        ...)
   23949 
   23950 
   23951 File: gccint.info,  Node: define_peephole2,  Prev: define_peephole,  Up: Peephole Definitions
   23952 
   23953 16.18.2 RTL to RTL Peephole Optimizers
   23954 --------------------------------------
   23955 
   23956 The `define_peephole2' definition tells the compiler how to substitute
   23957 one sequence of instructions for another sequence, what additional
   23958 scratch registers may be needed and what their lifetimes must be.
   23959 
   23960      (define_peephole2
   23961        [INSN-PATTERN-1
   23962         INSN-PATTERN-2
   23963         ...]
   23964        "CONDITION"
   23965        [NEW-INSN-PATTERN-1
   23966         NEW-INSN-PATTERN-2
   23967         ...]
   23968        "PREPARATION-STATEMENTS")
   23969 
   23970  The definition is almost identical to `define_split' (*note Insn
   23971 Splitting::) except that the pattern to match is not a single
   23972 instruction, but a sequence of instructions.
   23973 
   23974  It is possible to request additional scratch registers for use in the
   23975 output template.  If appropriate registers are not free, the pattern
   23976 will simply not match.
   23977 
   23978  Scratch registers are requested with a `match_scratch' pattern at the
   23979 top level of the input pattern.  The allocated register (initially) will
   23980 be dead at the point requested within the original sequence.  If the
   23981 scratch is used at more than a single point, a `match_dup' pattern at
   23982 the top level of the input pattern marks the last position in the input
   23983 sequence at which the register must be available.
   23984 
   23985  Here is an example from the IA-32 machine description:
   23986 
   23987      (define_peephole2
   23988        [(match_scratch:SI 2 "r")
   23989         (parallel [(set (match_operand:SI 0 "register_operand" "")
   23990                         (match_operator:SI 3 "arith_or_logical_operator"
   23991                           [(match_dup 0)
   23992                            (match_operand:SI 1 "memory_operand" "")]))
   23993                    (clobber (reg:CC 17))])]
   23994        "! optimize_size && ! TARGET_READ_MODIFY"
   23995        [(set (match_dup 2) (match_dup 1))
   23996         (parallel [(set (match_dup 0)
   23997                         (match_op_dup 3 [(match_dup 0) (match_dup 2)]))
   23998                    (clobber (reg:CC 17))])]
   23999        "")
   24000 
   24001 This pattern tries to split a load from its use in the hopes that we'll
   24002 be able to schedule around the memory load latency.  It allocates a
   24003 single `SImode' register of class `GENERAL_REGS' (`"r"') that needs to
   24004 be live only at the point just before the arithmetic.
   24005 
   24006  A real example requiring extended scratch lifetimes is harder to come
   24007 by, so here's a silly made-up example:
   24008 
   24009      (define_peephole2
   24010        [(match_scratch:SI 4 "r")
   24011         (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" ""))
   24012         (set (match_operand:SI 2 "" "") (match_dup 1))
   24013         (match_dup 4)
   24014         (set (match_operand:SI 3 "" "") (match_dup 1))]
   24015        "/* determine 1 does not overlap 0 and 2 */"
   24016        [(set (match_dup 4) (match_dup 1))
   24017         (set (match_dup 0) (match_dup 4))
   24018         (set (match_dup 2) (match_dup 4))]
   24019         (set (match_dup 3) (match_dup 4))]
   24020        "")
   24021 
   24022 If we had not added the `(match_dup 4)' in the middle of the input
   24023 sequence, it might have been the case that the register we chose at the
   24024 beginning of the sequence is killed by the first or second `set'.
   24025 
   24026 
   24027 File: gccint.info,  Node: Insn Attributes,  Next: Conditional Execution,  Prev: Peephole Definitions,  Up: Machine Desc
   24028 
   24029 16.19 Instruction Attributes
   24030 ============================
   24031 
   24032 In addition to describing the instruction supported by the target
   24033 machine, the `md' file also defines a group of "attributes" and a set of
   24034 values for each.  Every generated insn is assigned a value for each
   24035 attribute.  One possible attribute would be the effect that the insn
   24036 has on the machine's condition code.  This attribute can then be used
   24037 by `NOTICE_UPDATE_CC' to track the condition codes.
   24038 
   24039 * Menu:
   24040 
   24041 * Defining Attributes:: Specifying attributes and their values.
   24042 * Expressions::         Valid expressions for attribute values.
   24043 * Tagging Insns::       Assigning attribute values to insns.
   24044 * Attr Example::        An example of assigning attributes.
   24045 * Insn Lengths::        Computing the length of insns.
   24046 * Constant Attributes:: Defining attributes that are constant.
   24047 * Delay Slots::         Defining delay slots required for a machine.
   24048 * Processor pipeline description:: Specifying information for insn scheduling.
   24049 
   24050 
   24051 File: gccint.info,  Node: Defining Attributes,  Next: Expressions,  Up: Insn Attributes
   24052 
   24053 16.19.1 Defining Attributes and their Values
   24054 --------------------------------------------
   24055 
   24056 The `define_attr' expression is used to define each attribute required
   24057 by the target machine.  It looks like:
   24058 
   24059      (define_attr NAME LIST-OF-VALUES DEFAULT)
   24060 
   24061  NAME is a string specifying the name of the attribute being defined.
   24062 
   24063  LIST-OF-VALUES is either a string that specifies a comma-separated
   24064 list of values that can be assigned to the attribute, or a null string
   24065 to indicate that the attribute takes numeric values.
   24066 
   24067  DEFAULT is an attribute expression that gives the value of this
   24068 attribute for insns that match patterns whose definition does not
   24069 include an explicit value for this attribute.  *Note Attr Example::,
   24070 for more information on the handling of defaults.  *Note Constant
   24071 Attributes::, for information on attributes that do not depend on any
   24072 particular insn.
   24073 
   24074  For each defined attribute, a number of definitions are written to the
   24075 `insn-attr.h' file.  For cases where an explicit set of values is
   24076 specified for an attribute, the following are defined:
   24077 
   24078    * A `#define' is written for the symbol `HAVE_ATTR_NAME'.
   24079 
   24080    * An enumerated class is defined for `attr_NAME' with elements of
   24081      the form `UPPER-NAME_UPPER-VALUE' where the attribute name and
   24082      value are first converted to uppercase.
   24083 
   24084    * A function `get_attr_NAME' is defined that is passed an insn and
   24085      returns the attribute value for that insn.
   24086 
   24087  For example, if the following is present in the `md' file:
   24088 
   24089      (define_attr "type" "branch,fp,load,store,arith" ...)
   24090 
   24091 the following lines will be written to the file `insn-attr.h'.
   24092 
   24093      #define HAVE_ATTR_type
   24094      enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
   24095                       TYPE_STORE, TYPE_ARITH};
   24096      extern enum attr_type get_attr_type ();
   24097 
   24098  If the attribute takes numeric values, no `enum' type will be defined
   24099 and the function to obtain the attribute's value will return `int'.
   24100 
   24101  There are attributes which are tied to a specific meaning.  These
   24102 attributes are not free to use for other purposes:
   24103 
   24104 `length'
   24105      The `length' attribute is used to calculate the length of emitted
   24106      code chunks.  This is especially important when verifying branch
   24107      distances. *Note Insn Lengths::.
   24108 
   24109 `enabled'
   24110      The `enabled' attribute can be defined to prevent certain
   24111      alternatives of an insn definition from being used during code
   24112      generation. *Note Disable Insn Alternatives::.
   24113 
   24114  Another way of defining an attribute is to use:
   24115 
   24116      (define_enum_attr "ATTR" "ENUM" DEFAULT)
   24117 
   24118  This works in just the same way as `define_attr', except that the list
   24119 of values is taken from a separate enumeration called ENUM (*note
   24120 define_enum::).  This form allows you to use the same list of values
   24121 for several attributes without having to repeat the list each time.
   24122 For example:
   24123 
   24124      (define_enum "processor" [
   24125        model_a
   24126        model_b
   24127        ...
   24128      ])
   24129      (define_enum_attr "arch" "processor"
   24130        (const (symbol_ref "target_arch")))
   24131      (define_enum_attr "tune" "processor"
   24132        (const (symbol_ref "target_tune")))
   24133 
   24134  defines the same attributes as:
   24135 
   24136      (define_attr "arch" "model_a,model_b,..."
   24137        (const (symbol_ref "target_arch")))
   24138      (define_attr "tune" "model_a,model_b,..."
   24139        (const (symbol_ref "target_tune")))
   24140 
   24141  but without duplicating the processor list.  The second example
   24142 defines two separate C enums (`attr_arch' and `attr_tune') whereas the
   24143 first defines a single C enum (`processor').
   24144 
   24145 
   24146 File: gccint.info,  Node: Expressions,  Next: Tagging Insns,  Prev: Defining Attributes,  Up: Insn Attributes
   24147 
   24148 16.19.2 Attribute Expressions
   24149 -----------------------------
   24150 
   24151 RTL expressions used to define attributes use the codes described above
   24152 plus a few specific to attribute definitions, to be discussed below.
   24153 Attribute value expressions must have one of the following forms:
   24154 
   24155 `(const_int I)'
   24156      The integer I specifies the value of a numeric attribute.  I must
   24157      be non-negative.
   24158 
   24159      The value of a numeric attribute can be specified either with a
   24160      `const_int', or as an integer represented as a string in
   24161      `const_string', `eq_attr' (see below), `attr', `symbol_ref',
   24162      simple arithmetic expressions, and `set_attr' overrides on
   24163      specific instructions (*note Tagging Insns::).
   24164 
   24165 `(const_string VALUE)'
   24166      The string VALUE specifies a constant attribute value.  If VALUE
   24167      is specified as `"*"', it means that the default value of the
   24168      attribute is to be used for the insn containing this expression.
   24169      `"*"' obviously cannot be used in the DEFAULT expression of a
   24170      `define_attr'.
   24171 
   24172      If the attribute whose value is being specified is numeric, VALUE
   24173      must be a string containing a non-negative integer (normally
   24174      `const_int' would be used in this case).  Otherwise, it must
   24175      contain one of the valid values for the attribute.
   24176 
   24177 `(if_then_else TEST TRUE-VALUE FALSE-VALUE)'
   24178      TEST specifies an attribute test, whose format is defined below.
   24179      The value of this expression is TRUE-VALUE if TEST is true,
   24180      otherwise it is FALSE-VALUE.
   24181 
   24182 `(cond [TEST1 VALUE1 ...] DEFAULT)'
   24183      The first operand of this expression is a vector containing an even
   24184      number of expressions and consisting of pairs of TEST and VALUE
   24185      expressions.  The value of the `cond' expression is that of the
   24186      VALUE corresponding to the first true TEST expression.  If none of
   24187      the TEST expressions are true, the value of the `cond' expression
   24188      is that of the DEFAULT expression.
   24189 
   24190  TEST expressions can have one of the following forms:
   24191 
   24192 `(const_int I)'
   24193      This test is true if I is nonzero and false otherwise.
   24194 
   24195 `(not TEST)'
   24196 `(ior TEST1 TEST2)'
   24197 `(and TEST1 TEST2)'
   24198      These tests are true if the indicated logical function is true.
   24199 
   24200 `(match_operand:M N PRED CONSTRAINTS)'
   24201      This test is true if operand N of the insn whose attribute value
   24202      is being determined has mode M (this part of the test is ignored
   24203      if M is `VOIDmode') and the function specified by the string PRED
   24204      returns a nonzero value when passed operand N and mode M (this
   24205      part of the test is ignored if PRED is the null string).
   24206 
   24207      The CONSTRAINTS operand is ignored and should be the null string.
   24208 
   24209 `(le ARITH1 ARITH2)'
   24210 `(leu ARITH1 ARITH2)'
   24211 `(lt ARITH1 ARITH2)'
   24212 `(ltu ARITH1 ARITH2)'
   24213 `(gt ARITH1 ARITH2)'
   24214 `(gtu ARITH1 ARITH2)'
   24215 `(ge ARITH1 ARITH2)'
   24216 `(geu ARITH1 ARITH2)'
   24217 `(ne ARITH1 ARITH2)'
   24218 `(eq ARITH1 ARITH2)'
   24219      These tests are true if the indicated comparison of the two
   24220      arithmetic expressions is true.  Arithmetic expressions are formed
   24221      with `plus', `minus', `mult', `div', `mod', `abs', `neg', `and',
   24222      `ior', `xor', `not', `ashift', `lshiftrt', and `ashiftrt'
   24223      expressions.
   24224 
   24225      `const_int' and `symbol_ref' are always valid terms (*note Insn
   24226      Lengths::,for additional forms).  `symbol_ref' is a string
   24227      denoting a C expression that yields an `int' when evaluated by the
   24228      `get_attr_...' routine.  It should normally be a global variable.
   24229 
   24230 `(eq_attr NAME VALUE)'
   24231      NAME is a string specifying the name of an attribute.
   24232 
   24233      VALUE is a string that is either a valid value for attribute NAME,
   24234      a comma-separated list of values, or `!' followed by a value or
   24235      list.  If VALUE does not begin with a `!', this test is true if
   24236      the value of the NAME attribute of the current insn is in the list
   24237      specified by VALUE.  If VALUE begins with a `!', this test is true
   24238      if the attribute's value is _not_ in the specified list.
   24239 
   24240      For example,
   24241 
   24242           (eq_attr "type" "load,store")
   24243 
   24244      is equivalent to
   24245 
   24246           (ior (eq_attr "type" "load") (eq_attr "type" "store"))
   24247 
   24248      If NAME specifies an attribute of `alternative', it refers to the
   24249      value of the compiler variable `which_alternative' (*note Output
   24250      Statement::) and the values must be small integers.  For example,
   24251 
   24252           (eq_attr "alternative" "2,3")
   24253 
   24254      is equivalent to
   24255 
   24256           (ior (eq (symbol_ref "which_alternative") (const_int 2))
   24257                (eq (symbol_ref "which_alternative") (const_int 3)))
   24258 
   24259      Note that, for most attributes, an `eq_attr' test is simplified in
   24260      cases where the value of the attribute being tested is known for
   24261      all insns matching a particular pattern.  This is by far the most
   24262      common case.
   24263 
   24264 `(attr_flag NAME)'
   24265      The value of an `attr_flag' expression is true if the flag
   24266      specified by NAME is true for the `insn' currently being scheduled.
   24267 
   24268      NAME is a string specifying one of a fixed set of flags to test.
   24269      Test the flags `forward' and `backward' to determine the direction
   24270      of a conditional branch.  Test the flags `very_likely', `likely',
   24271      `very_unlikely', and `unlikely' to determine if a conditional
   24272      branch is expected to be taken.
   24273 
   24274      If the `very_likely' flag is true, then the `likely' flag is also
   24275      true.  Likewise for the `very_unlikely' and `unlikely' flags.
   24276 
   24277      This example describes a conditional branch delay slot which can
   24278      be nullified for forward branches that are taken (annul-true) or
   24279      for backward branches which are not taken (annul-false).
   24280 
   24281           (define_delay (eq_attr "type" "cbranch")
   24282             [(eq_attr "in_branch_delay" "true")
   24283              (and (eq_attr "in_branch_delay" "true")
   24284                   (attr_flag "forward"))
   24285              (and (eq_attr "in_branch_delay" "true")
   24286                   (attr_flag "backward"))])
   24287 
   24288      The `forward' and `backward' flags are false if the current `insn'
   24289      being scheduled is not a conditional branch.
   24290 
   24291      The `very_likely' and `likely' flags are true if the `insn' being
   24292      scheduled is not a conditional branch.  The `very_unlikely' and
   24293      `unlikely' flags are false if the `insn' being scheduled is not a
   24294      conditional branch.
   24295 
   24296      `attr_flag' is only used during delay slot scheduling and has no
   24297      meaning to other passes of the compiler.
   24298 
   24299 `(attr NAME)'
   24300      The value of another attribute is returned.  This is most useful
   24301      for numeric attributes, as `eq_attr' and `attr_flag' produce more
   24302      efficient code for non-numeric attributes.
   24303 
   24304 
   24305 File: gccint.info,  Node: Tagging Insns,  Next: Attr Example,  Prev: Expressions,  Up: Insn Attributes
   24306 
   24307 16.19.3 Assigning Attribute Values to Insns
   24308 -------------------------------------------
   24309 
   24310 The value assigned to an attribute of an insn is primarily determined by
   24311 which pattern is matched by that insn (or which `define_peephole'
   24312 generated it).  Every `define_insn' and `define_peephole' can have an
   24313 optional last argument to specify the values of attributes for matching
   24314 insns.  The value of any attribute not specified in a particular insn
   24315 is set to the default value for that attribute, as specified in its
   24316 `define_attr'.  Extensive use of default values for attributes permits
   24317 the specification of the values for only one or two attributes in the
   24318 definition of most insn patterns, as seen in the example in the next
   24319 section.
   24320 
   24321  The optional last argument of `define_insn' and `define_peephole' is a
   24322 vector of expressions, each of which defines the value for a single
   24323 attribute.  The most general way of assigning an attribute's value is
   24324 to use a `set' expression whose first operand is an `attr' expression
   24325 giving the name of the attribute being set.  The second operand of the
   24326 `set' is an attribute expression (*note Expressions::) giving the value
   24327 of the attribute.
   24328 
   24329  When the attribute value depends on the `alternative' attribute (i.e.,
   24330 which is the applicable alternative in the constraint of the insn), the
   24331 `set_attr_alternative' expression can be used.  It allows the
   24332 specification of a vector of attribute expressions, one for each
   24333 alternative.
   24334 
   24335  When the generality of arbitrary attribute expressions is not required,
   24336 the simpler `set_attr' expression can be used, which allows specifying
   24337 a string giving either a single attribute value or a list of attribute
   24338 values, one for each alternative.
   24339 
   24340  The form of each of the above specifications is shown below.  In each
   24341 case, NAME is a string specifying the attribute to be set.
   24342 
   24343 `(set_attr NAME VALUE-STRING)'
   24344      VALUE-STRING is either a string giving the desired attribute value,
   24345      or a string containing a comma-separated list giving the values for
   24346      succeeding alternatives.  The number of elements must match the
   24347      number of alternatives in the constraint of the insn pattern.
   24348 
   24349      Note that it may be useful to specify `*' for some alternative, in
   24350      which case the attribute will assume its default value for insns
   24351      matching that alternative.
   24352 
   24353 `(set_attr_alternative NAME [VALUE1 VALUE2 ...])'
   24354      Depending on the alternative of the insn, the value will be one of
   24355      the specified values.  This is a shorthand for using a `cond' with
   24356      tests on the `alternative' attribute.
   24357 
   24358 `(set (attr NAME) VALUE)'
   24359      The first operand of this `set' must be the special RTL expression
   24360      `attr', whose sole operand is a string giving the name of the
   24361      attribute being set.  VALUE is the value of the attribute.
   24362 
   24363  The following shows three different ways of representing the same
   24364 attribute value specification:
   24365 
   24366      (set_attr "type" "load,store,arith")
   24367 
   24368      (set_attr_alternative "type"
   24369                            [(const_string "load") (const_string "store")
   24370                             (const_string "arith")])
   24371 
   24372      (set (attr "type")
   24373           (cond [(eq_attr "alternative" "1") (const_string "load")
   24374                  (eq_attr "alternative" "2") (const_string "store")]
   24375                 (const_string "arith")))
   24376 
   24377  The `define_asm_attributes' expression provides a mechanism to specify
   24378 the attributes assigned to insns produced from an `asm' statement.  It
   24379 has the form:
   24380 
   24381      (define_asm_attributes [ATTR-SETS])
   24382 
   24383 where ATTR-SETS is specified the same as for both the `define_insn' and
   24384 the `define_peephole' expressions.
   24385 
   24386  These values will typically be the "worst case" attribute values.  For
   24387 example, they might indicate that the condition code will be clobbered.
   24388 
   24389  A specification for a `length' attribute is handled specially.  The
   24390 way to compute the length of an `asm' insn is to multiply the length
   24391 specified in the expression `define_asm_attributes' by the number of
   24392 machine instructions specified in the `asm' statement, determined by
   24393 counting the number of semicolons and newlines in the string.
   24394 Therefore, the value of the `length' attribute specified in a
   24395 `define_asm_attributes' should be the maximum possible length of a
   24396 single machine instruction.
   24397 
   24398 
   24399 File: gccint.info,  Node: Attr Example,  Next: Insn Lengths,  Prev: Tagging Insns,  Up: Insn Attributes
   24400 
   24401 16.19.4 Example of Attribute Specifications
   24402 -------------------------------------------
   24403 
   24404 The judicious use of defaulting is important in the efficient use of
   24405 insn attributes.  Typically, insns are divided into "types" and an
   24406 attribute, customarily called `type', is used to represent this value.
   24407 This attribute is normally used only to define the default value for
   24408 other attributes.  An example will clarify this usage.
   24409 
   24410  Assume we have a RISC machine with a condition code and in which only
   24411 full-word operations are performed in registers.  Let us assume that we
   24412 can divide all insns into loads, stores, (integer) arithmetic
   24413 operations, floating point operations, and branches.
   24414 
   24415  Here we will concern ourselves with determining the effect of an insn
   24416 on the condition code and will limit ourselves to the following possible
   24417 effects:  The condition code can be set unpredictably (clobbered), not
   24418 be changed, be set to agree with the results of the operation, or only
   24419 changed if the item previously set into the condition code has been
   24420 modified.
   24421 
   24422  Here is part of a sample `md' file for such a machine:
   24423 
   24424      (define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
   24425 
   24426      (define_attr "cc" "clobber,unchanged,set,change0"
   24427                   (cond [(eq_attr "type" "load")
   24428                              (const_string "change0")
   24429                          (eq_attr "type" "store,branch")
   24430                              (const_string "unchanged")
   24431                          (eq_attr "type" "arith")
   24432                              (if_then_else (match_operand:SI 0 "" "")
   24433                                            (const_string "set")
   24434                                            (const_string "clobber"))]
   24435                         (const_string "clobber")))
   24436 
   24437      (define_insn ""
   24438        [(set (match_operand:SI 0 "general_operand" "=r,r,m")
   24439              (match_operand:SI 1 "general_operand" "r,m,r"))]
   24440        ""
   24441        "@
   24442         move %0,%1
   24443         load %0,%1
   24444         store %0,%1"
   24445        [(set_attr "type" "arith,load,store")])
   24446 
   24447  Note that we assume in the above example that arithmetic operations
   24448 performed on quantities smaller than a machine word clobber the
   24449 condition code since they will set the condition code to a value
   24450 corresponding to the full-word result.
   24451 
   24452 
   24453 File: gccint.info,  Node: Insn Lengths,  Next: Constant Attributes,  Prev: Attr Example,  Up: Insn Attributes
   24454 
   24455 16.19.5 Computing the Length of an Insn
   24456 ---------------------------------------
   24457 
   24458 For many machines, multiple types of branch instructions are provided,
   24459 each for different length branch displacements.  In most cases, the
   24460 assembler will choose the correct instruction to use.  However, when
   24461 the assembler cannot do so, GCC can when a special attribute, the
   24462 `length' attribute, is defined.  This attribute must be defined to have
   24463 numeric values by specifying a null string in its `define_attr'.
   24464 
   24465  In the case of the `length' attribute, two additional forms of
   24466 arithmetic terms are allowed in test expressions:
   24467 
   24468 `(match_dup N)'
   24469      This refers to the address of operand N of the current insn, which
   24470      must be a `label_ref'.
   24471 
   24472 `(pc)'
   24473      This refers to the address of the _current_ insn.  It might have
   24474      been more consistent with other usage to make this the address of
   24475      the _next_ insn but this would be confusing because the length of
   24476      the current insn is to be computed.
   24477 
   24478  For normal insns, the length will be determined by value of the
   24479 `length' attribute.  In the case of `addr_vec' and `addr_diff_vec' insn
   24480 patterns, the length is computed as the number of vectors multiplied by
   24481 the size of each vector.
   24482 
   24483  Lengths are measured in addressable storage units (bytes).
   24484 
   24485  The following macros can be used to refine the length computation:
   24486 
   24487 `ADJUST_INSN_LENGTH (INSN, LENGTH)'
   24488      If defined, modifies the length assigned to instruction INSN as a
   24489      function of the context in which it is used.  LENGTH is an lvalue
   24490      that contains the initially computed length of the insn and should
   24491      be updated with the correct length of the insn.
   24492 
   24493      This macro will normally not be required.  A case in which it is
   24494      required is the ROMP.  On this machine, the size of an `addr_vec'
   24495      insn must be increased by two to compensate for the fact that
   24496      alignment may be required.
   24497 
   24498  The routine that returns `get_attr_length' (the value of the `length'
   24499 attribute) can be used by the output routine to determine the form of
   24500 the branch instruction to be written, as the example below illustrates.
   24501 
   24502  As an example of the specification of variable-length branches,
   24503 consider the IBM 360.  If we adopt the convention that a register will
   24504 be set to the starting address of a function, we can jump to labels
   24505 within 4k of the start using a four-byte instruction.  Otherwise, we
   24506 need a six-byte sequence to load the address from memory and then
   24507 branch to it.
   24508 
   24509  On such a machine, a pattern for a branch instruction might be
   24510 specified as follows:
   24511 
   24512      (define_insn "jump"
   24513        [(set (pc)
   24514              (label_ref (match_operand 0 "" "")))]
   24515        ""
   24516      {
   24517         return (get_attr_length (insn) == 4
   24518                 ? "b %l0" : "l r15,=a(%l0); br r15");
   24519      }
   24520        [(set (attr "length")
   24521              (if_then_else (lt (match_dup 0) (const_int 4096))
   24522                            (const_int 4)
   24523                            (const_int 6)))])
   24524 
   24525 
   24526 File: gccint.info,  Node: Constant Attributes,  Next: Delay Slots,  Prev: Insn Lengths,  Up: Insn Attributes
   24527 
   24528 16.19.6 Constant Attributes
   24529 ---------------------------
   24530 
   24531 A special form of `define_attr', where the expression for the default
   24532 value is a `const' expression, indicates an attribute that is constant
   24533 for a given run of the compiler.  Constant attributes may be used to
   24534 specify which variety of processor is used.  For example,
   24535 
   24536      (define_attr "cpu" "m88100,m88110,m88000"
   24537       (const
   24538        (cond [(symbol_ref "TARGET_88100") (const_string "m88100")
   24539               (symbol_ref "TARGET_88110") (const_string "m88110")]
   24540              (const_string "m88000"))))
   24541 
   24542      (define_attr "memory" "fast,slow"
   24543       (const
   24544        (if_then_else (symbol_ref "TARGET_FAST_MEM")
   24545                      (const_string "fast")
   24546                      (const_string "slow"))))
   24547 
   24548  The routine generated for constant attributes has no parameters as it
   24549 does not depend on any particular insn.  RTL expressions used to define
   24550 the value of a constant attribute may use the `symbol_ref' form, but
   24551 may not use either the `match_operand' form or `eq_attr' forms
   24552 involving insn attributes.
   24553 
   24554 
   24555 File: gccint.info,  Node: Delay Slots,  Next: Processor pipeline description,  Prev: Constant Attributes,  Up: Insn Attributes
   24556 
   24557 16.19.7 Delay Slot Scheduling
   24558 -----------------------------
   24559 
   24560 The insn attribute mechanism can be used to specify the requirements for
   24561 delay slots, if any, on a target machine.  An instruction is said to
   24562 require a "delay slot" if some instructions that are physically after
   24563 the instruction are executed as if they were located before it.
   24564 Classic examples are branch and call instructions, which often execute
   24565 the following instruction before the branch or call is performed.
   24566 
   24567  On some machines, conditional branch instructions can optionally
   24568 "annul" instructions in the delay slot.  This means that the
   24569 instruction will not be executed for certain branch outcomes.  Both
   24570 instructions that annul if the branch is true and instructions that
   24571 annul if the branch is false are supported.
   24572 
   24573  Delay slot scheduling differs from instruction scheduling in that
   24574 determining whether an instruction needs a delay slot is dependent only
   24575 on the type of instruction being generated, not on data flow between the
   24576 instructions.  See the next section for a discussion of data-dependent
   24577 instruction scheduling.
   24578 
   24579  The requirement of an insn needing one or more delay slots is indicated
   24580 via the `define_delay' expression.  It has the following form:
   24581 
   24582      (define_delay TEST
   24583                    [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1
   24584                     DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2
   24585                     ...])
   24586 
   24587  TEST is an attribute test that indicates whether this `define_delay'
   24588 applies to a particular insn.  If so, the number of required delay
   24589 slots is determined by the length of the vector specified as the second
   24590 argument.  An insn placed in delay slot N must satisfy attribute test
   24591 DELAY-N.  ANNUL-TRUE-N is an attribute test that specifies which insns
   24592 may be annulled if the branch is true.  Similarly, ANNUL-FALSE-N
   24593 specifies which insns in the delay slot may be annulled if the branch
   24594 is false.  If annulling is not supported for that delay slot, `(nil)'
   24595 should be coded.
   24596 
   24597  For example, in the common case where branch and call insns require a
   24598 single delay slot, which may contain any insn other than a branch or
   24599 call, the following would be placed in the `md' file:
   24600 
   24601      (define_delay (eq_attr "type" "branch,call")
   24602                    [(eq_attr "type" "!branch,call") (nil) (nil)])
   24603 
   24604  Multiple `define_delay' expressions may be specified.  In this case,
   24605 each such expression specifies different delay slot requirements and
   24606 there must be no insn for which tests in two `define_delay' expressions
   24607 are both true.
   24608 
   24609  For example, if we have a machine that requires one delay slot for
   24610 branches but two for calls,  no delay slot can contain a branch or call
   24611 insn, and any valid insn in the delay slot for the branch can be
   24612 annulled if the branch is true, we might represent this as follows:
   24613 
   24614      (define_delay (eq_attr "type" "branch")
   24615         [(eq_attr "type" "!branch,call")
   24616          (eq_attr "type" "!branch,call")
   24617          (nil)])
   24618 
   24619      (define_delay (eq_attr "type" "call")
   24620                    [(eq_attr "type" "!branch,call") (nil) (nil)
   24621                     (eq_attr "type" "!branch,call") (nil) (nil)])
   24622 
   24623 
   24624 File: gccint.info,  Node: Processor pipeline description,  Prev: Delay Slots,  Up: Insn Attributes
   24625 
   24626 16.19.8 Specifying processor pipeline description
   24627 -------------------------------------------------
   24628 
   24629 To achieve better performance, most modern processors (super-pipelined,
   24630 superscalar RISC, and VLIW processors) have many "functional units" on
   24631 which several instructions can be executed simultaneously.  An
   24632 instruction starts execution if its issue conditions are satisfied.  If
   24633 not, the instruction is stalled until its conditions are satisfied.
   24634 Such "interlock (pipeline) delay" causes interruption of the fetching
   24635 of successor instructions (or demands nop instructions, e.g. for some
   24636 MIPS processors).
   24637 
   24638  There are two major kinds of interlock delays in modern processors.
   24639 The first one is a data dependence delay determining "instruction
   24640 latency time".  The instruction execution is not started until all
   24641 source data have been evaluated by prior instructions (there are more
   24642 complex cases when the instruction execution starts even when the data
   24643 are not available but will be ready in given time after the instruction
   24644 execution start).  Taking the data dependence delays into account is
   24645 simple.  The data dependence (true, output, and anti-dependence) delay
   24646 between two instructions is given by a constant.  In most cases this
   24647 approach is adequate.  The second kind of interlock delays is a
   24648 reservation delay.  The reservation delay means that two instructions
   24649 under execution will be in need of shared processors resources, i.e.
   24650 buses, internal registers, and/or functional units, which are reserved
   24651 for some time.  Taking this kind of delay into account is complex
   24652 especially for modern RISC processors.
   24653 
   24654  The task of exploiting more processor parallelism is solved by an
   24655 instruction scheduler.  For a better solution to this problem, the
   24656 instruction scheduler has to have an adequate description of the
   24657 processor parallelism (or "pipeline description").  GCC machine
   24658 descriptions describe processor parallelism and functional unit
   24659 reservations for groups of instructions with the aid of "regular
   24660 expressions".
   24661 
   24662  The GCC instruction scheduler uses a "pipeline hazard recognizer" to
   24663 figure out the possibility of the instruction issue by the processor on
   24664 a given simulated processor cycle.  The pipeline hazard recognizer is
   24665 automatically generated from the processor pipeline description.  The
   24666 pipeline hazard recognizer generated from the machine description is
   24667 based on a deterministic finite state automaton (DFA): the instruction
   24668 issue is possible if there is a transition from one automaton state to
   24669 another one.  This algorithm is very fast, and furthermore, its speed
   24670 is not dependent on processor complexity(1).
   24671 
   24672  The rest of this section describes the directives that constitute an
   24673 automaton-based processor pipeline description.  The order of these
   24674 constructions within the machine description file is not important.
   24675 
   24676  The following optional construction describes names of automata
   24677 generated and used for the pipeline hazards recognition.  Sometimes the
   24678 generated finite state automaton used by the pipeline hazard recognizer
   24679 is large.  If we use more than one automaton and bind functional units
   24680 to the automata, the total size of the automata is usually less than
   24681 the size of the single automaton.  If there is no one such
   24682 construction, only one finite state automaton is generated.
   24683 
   24684      (define_automaton AUTOMATA-NAMES)
   24685 
   24686  AUTOMATA-NAMES is a string giving names of the automata.  The names
   24687 are separated by commas.  All the automata should have unique names.
   24688 The automaton name is used in the constructions `define_cpu_unit' and
   24689 `define_query_cpu_unit'.
   24690 
   24691  Each processor functional unit used in the description of instruction
   24692 reservations should be described by the following construction.
   24693 
   24694      (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
   24695 
   24696  UNIT-NAMES is a string giving the names of the functional units
   24697 separated by commas.  Don't use name `nothing', it is reserved for
   24698 other goals.
   24699 
   24700  AUTOMATON-NAME is a string giving the name of the automaton with which
   24701 the unit is bound.  The automaton should be described in construction
   24702 `define_automaton'.  You should give "automaton-name", if there is a
   24703 defined automaton.
   24704 
   24705  The assignment of units to automata are constrained by the uses of the
   24706 units in insn reservations.  The most important constraint is: if a
   24707 unit reservation is present on a particular cycle of an alternative for
   24708 an insn reservation, then some unit from the same automaton must be
   24709 present on the same cycle for the other alternatives of the insn
   24710 reservation.  The rest of the constraints are mentioned in the
   24711 description of the subsequent constructions.
   24712 
   24713  The following construction describes CPU functional units analogously
   24714 to `define_cpu_unit'.  The reservation of such units can be queried for
   24715 an automaton state.  The instruction scheduler never queries
   24716 reservation of functional units for given automaton state.  So as a
   24717 rule, you don't need this construction.  This construction could be
   24718 used for future code generation goals (e.g. to generate VLIW insn
   24719 templates).
   24720 
   24721      (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
   24722 
   24723  UNIT-NAMES is a string giving names of the functional units separated
   24724 by commas.
   24725 
   24726  AUTOMATON-NAME is a string giving the name of the automaton with which
   24727 the unit is bound.
   24728 
   24729  The following construction is the major one to describe pipeline
   24730 characteristics of an instruction.
   24731 
   24732      (define_insn_reservation INSN-NAME DEFAULT_LATENCY
   24733                               CONDITION REGEXP)
   24734 
   24735  DEFAULT_LATENCY is a number giving latency time of the instruction.
   24736 There is an important difference between the old description and the
   24737 automaton based pipeline description.  The latency time is used for all
   24738 dependencies when we use the old description.  In the automaton based
   24739 pipeline description, the given latency time is only used for true
   24740 dependencies.  The cost of anti-dependencies is always zero and the
   24741 cost of output dependencies is the difference between latency times of
   24742 the producing and consuming insns (if the difference is negative, the
   24743 cost is considered to be zero).  You can always change the default
   24744 costs for any description by using the target hook
   24745 `TARGET_SCHED_ADJUST_COST' (*note Scheduling::).
   24746 
   24747  INSN-NAME is a string giving the internal name of the insn.  The
   24748 internal names are used in constructions `define_bypass' and in the
   24749 automaton description file generated for debugging.  The internal name
   24750 has nothing in common with the names in `define_insn'.  It is a good
   24751 practice to use insn classes described in the processor manual.
   24752 
   24753  CONDITION defines what RTL insns are described by this construction.
   24754 You should remember that you will be in trouble if CONDITION for two or
   24755 more different `define_insn_reservation' constructions is TRUE for an
   24756 insn.  In this case what reservation will be used for the insn is not
   24757 defined.  Such cases are not checked during generation of the pipeline
   24758 hazards recognizer because in general recognizing that two conditions
   24759 may have the same value is quite difficult (especially if the conditions
   24760 contain `symbol_ref').  It is also not checked during the pipeline
   24761 hazard recognizer work because it would slow down the recognizer
   24762 considerably.
   24763 
   24764  REGEXP is a string describing the reservation of the cpu's functional
   24765 units by the instruction.  The reservations are described by a regular
   24766 expression according to the following syntax:
   24767 
   24768             regexp = regexp "," oneof
   24769                    | oneof
   24770 
   24771             oneof = oneof "|" allof
   24772                   | allof
   24773 
   24774             allof = allof "+" repeat
   24775                   | repeat
   24776 
   24777             repeat = element "*" number
   24778                    | element
   24779 
   24780             element = cpu_function_unit_name
   24781                     | reservation_name
   24782                     | result_name
   24783                     | "nothing"
   24784                     | "(" regexp ")"
   24785 
   24786    * `,' is used for describing the start of the next cycle in the
   24787      reservation.
   24788 
   24789    * `|' is used for describing a reservation described by the first
   24790      regular expression *or* a reservation described by the second
   24791      regular expression *or* etc.
   24792 
   24793    * `+' is used for describing a reservation described by the first
   24794      regular expression *and* a reservation described by the second
   24795      regular expression *and* etc.
   24796 
   24797    * `*' is used for convenience and simply means a sequence in which
   24798      the regular expression are repeated NUMBER times with cycle
   24799      advancing (see `,').
   24800 
   24801    * `cpu_function_unit_name' denotes reservation of the named
   24802      functional unit.
   24803 
   24804    * `reservation_name' -- see description of construction
   24805      `define_reservation'.
   24806 
   24807    * `nothing' denotes no unit reservations.
   24808 
   24809  Sometimes unit reservations for different insns contain common parts.
   24810 In such case, you can simplify the pipeline description by describing
   24811 the common part by the following construction
   24812 
   24813      (define_reservation RESERVATION-NAME REGEXP)
   24814 
   24815  RESERVATION-NAME is a string giving name of REGEXP.  Functional unit
   24816 names and reservation names are in the same name space.  So the
   24817 reservation names should be different from the functional unit names
   24818 and can not be the reserved name `nothing'.
   24819 
   24820  The following construction is used to describe exceptions in the
   24821 latency time for given instruction pair.  This is so called bypasses.
   24822 
   24823      (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES
   24824                     [GUARD])
   24825 
   24826  NUMBER defines when the result generated by the instructions given in
   24827 string OUT_INSN_NAMES will be ready for the instructions given in
   24828 string IN_INSN_NAMES.  The instructions in the string are separated by
   24829 commas.
   24830 
   24831  GUARD is an optional string giving the name of a C function which
   24832 defines an additional guard for the bypass.  The function will get the
   24833 two insns as parameters.  If the function returns zero the bypass will
   24834 be ignored for this case.  The additional guard is necessary to
   24835 recognize complicated bypasses, e.g. when the consumer is only an
   24836 address of insn `store' (not a stored value).
   24837 
   24838  If there are more one bypass with the same output and input insns, the
   24839 chosen bypass is the first bypass with a guard in description whose
   24840 guard function returns nonzero.  If there is no such bypass, then
   24841 bypass without the guard function is chosen.
   24842 
   24843  The following five constructions are usually used to describe VLIW
   24844 processors, or more precisely, to describe a placement of small
   24845 instructions into VLIW instruction slots.  They can be used for RISC
   24846 processors, too.
   24847 
   24848      (exclusion_set UNIT-NAMES UNIT-NAMES)
   24849      (presence_set UNIT-NAMES PATTERNS)
   24850      (final_presence_set UNIT-NAMES PATTERNS)
   24851      (absence_set UNIT-NAMES PATTERNS)
   24852      (final_absence_set UNIT-NAMES PATTERNS)
   24853 
   24854  UNIT-NAMES is a string giving names of functional units separated by
   24855 commas.
   24856 
   24857  PATTERNS is a string giving patterns of functional units separated by
   24858 comma.  Currently pattern is one unit or units separated by
   24859 white-spaces.
   24860 
   24861  The first construction (`exclusion_set') means that each functional
   24862 unit in the first string can not be reserved simultaneously with a unit
   24863 whose name is in the second string and vice versa.  For example, the
   24864 construction is useful for describing processors (e.g. some SPARC
   24865 processors) with a fully pipelined floating point functional unit which
   24866 can execute simultaneously only single floating point insns or only
   24867 double floating point insns.
   24868 
   24869  The second construction (`presence_set') means that each functional
   24870 unit in the first string can not be reserved unless at least one of
   24871 pattern of units whose names are in the second string is reserved.
   24872 This is an asymmetric relation.  For example, it is useful for
   24873 description that VLIW `slot1' is reserved after `slot0' reservation.
   24874 We could describe it by the following construction
   24875 
   24876      (presence_set "slot1" "slot0")
   24877 
   24878  Or `slot1' is reserved only after `slot0' and unit `b0' reservation.
   24879 In this case we could write
   24880 
   24881      (presence_set "slot1" "slot0 b0")
   24882 
   24883  The third construction (`final_presence_set') is analogous to
   24884 `presence_set'.  The difference between them is when checking is done.
   24885 When an instruction is issued in given automaton state reflecting all
   24886 current and planned unit reservations, the automaton state is changed.
   24887 The first state is a source state, the second one is a result state.
   24888 Checking for `presence_set' is done on the source state reservation,
   24889 checking for `final_presence_set' is done on the result reservation.
   24890 This construction is useful to describe a reservation which is actually
   24891 two subsequent reservations.  For example, if we use
   24892 
   24893      (presence_set "slot1" "slot0")
   24894 
   24895  the following insn will be never issued (because `slot1' requires
   24896 `slot0' which is absent in the source state).
   24897 
   24898      (define_reservation "insn_and_nop" "slot0 + slot1")
   24899 
   24900  but it can be issued if we use analogous `final_presence_set'.
   24901 
   24902  The forth construction (`absence_set') means that each functional unit
   24903 in the first string can be reserved only if each pattern of units whose
   24904 names are in the second string is not reserved.  This is an asymmetric
   24905 relation (actually `exclusion_set' is analogous to this one but it is
   24906 symmetric).  For example it might be useful in a VLIW description to
   24907 say that `slot0' cannot be reserved after either `slot1' or `slot2'
   24908 have been reserved.  This can be described as:
   24909 
   24910      (absence_set "slot0" "slot1, slot2")
   24911 
   24912  Or `slot2' can not be reserved if `slot0' and unit `b0' are reserved
   24913 or `slot1' and unit `b1' are reserved.  In this case we could write
   24914 
   24915      (absence_set "slot2" "slot0 b0, slot1 b1")
   24916 
   24917  All functional units mentioned in a set should belong to the same
   24918 automaton.
   24919 
   24920  The last construction (`final_absence_set') is analogous to
   24921 `absence_set' but checking is done on the result (state) reservation.
   24922 See comments for `final_presence_set'.
   24923 
   24924  You can control the generator of the pipeline hazard recognizer with
   24925 the following construction.
   24926 
   24927      (automata_option OPTIONS)
   24928 
   24929  OPTIONS is a string giving options which affect the generated code.
   24930 Currently there are the following options:
   24931 
   24932    * "no-minimization" makes no minimization of the automaton.  This is
   24933      only worth to do when we are debugging the description and need to
   24934      look more accurately at reservations of states.
   24935 
   24936    * "time" means printing time statistics about the generation of
   24937      automata.
   24938 
   24939    * "stats" means printing statistics about the generated automata
   24940      such as the number of DFA states, NDFA states and arcs.
   24941 
   24942    * "v" means a generation of the file describing the result automata.
   24943      The file has suffix `.dfa' and can be used for the description
   24944      verification and debugging.
   24945 
   24946    * "w" means a generation of warning instead of error for
   24947      non-critical errors.
   24948 
   24949    * "ndfa" makes nondeterministic finite state automata.  This affects
   24950      the treatment of operator `|' in the regular expressions.  The
   24951      usual treatment of the operator is to try the first alternative
   24952      and, if the reservation is not possible, the second alternative.
   24953      The nondeterministic treatment means trying all alternatives, some
   24954      of them may be rejected by reservations in the subsequent insns.
   24955 
   24956    * "progress" means output of a progress bar showing how many states
   24957      were generated so far for automaton being processed.  This is
   24958      useful during debugging a DFA description.  If you see too many
   24959      generated states, you could interrupt the generator of the pipeline
   24960      hazard recognizer and try to figure out a reason for generation of
   24961      the huge automaton.
   24962 
   24963  As an example, consider a superscalar RISC machine which can issue
   24964 three insns (two integer insns and one floating point insn) on the
   24965 cycle but can finish only two insns.  To describe this, we define the
   24966 following functional units.
   24967 
   24968      (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline")
   24969      (define_cpu_unit "port0, port1")
   24970 
   24971  All simple integer insns can be executed in any integer pipeline and
   24972 their result is ready in two cycles.  The simple integer insns are
   24973 issued into the first pipeline unless it is reserved, otherwise they
   24974 are issued into the second pipeline.  Integer division and
   24975 multiplication insns can be executed only in the second integer
   24976 pipeline and their results are ready correspondingly in 8 and 4 cycles.
   24977 The integer division is not pipelined, i.e. the subsequent integer
   24978 division insn can not be issued until the current division insn
   24979 finished.  Floating point insns are fully pipelined and their results
   24980 are ready in 3 cycles.  Where the result of a floating point insn is
   24981 used by an integer insn, an additional delay of one cycle is incurred.
   24982 To describe all of this we could specify
   24983 
   24984      (define_cpu_unit "div")
   24985 
   24986      (define_insn_reservation "simple" 2 (eq_attr "type" "int")
   24987                               "(i0_pipeline | i1_pipeline), (port0 | port1)")
   24988 
   24989      (define_insn_reservation "mult" 4 (eq_attr "type" "mult")
   24990                               "i1_pipeline, nothing*2, (port0 | port1)")
   24991 
   24992      (define_insn_reservation "div" 8 (eq_attr "type" "div")
   24993                               "i1_pipeline, div*7, div + (port0 | port1)")
   24994 
   24995      (define_insn_reservation "float" 3 (eq_attr "type" "float")
   24996                               "f_pipeline, nothing, (port0 | port1))
   24997 
   24998      (define_bypass 4 "float" "simple,mult,div")
   24999 
   25000  To simplify the description we could describe the following reservation
   25001 
   25002      (define_reservation "finish" "port0|port1")
   25003 
   25004  and use it in all `define_insn_reservation' as in the following
   25005 construction
   25006 
   25007      (define_insn_reservation "simple" 2 (eq_attr "type" "int")
   25008                               "(i0_pipeline | i1_pipeline), finish")
   25009 
   25010  ---------- Footnotes ----------
   25011 
   25012  (1) However, the size of the automaton depends on processor
   25013 complexity.  To limit this effect, machine descriptions can split
   25014 orthogonal parts of the machine description among several automata: but
   25015 then, since each of these must be stepped independently, this does
   25016 cause a small decrease in the algorithm's performance.
   25017 
   25018 
   25019 File: gccint.info,  Node: Conditional Execution,  Next: Constant Definitions,  Prev: Insn Attributes,  Up: Machine Desc
   25020 
   25021 16.20 Conditional Execution
   25022 ===========================
   25023 
   25024 A number of architectures provide for some form of conditional
   25025 execution, or predication.  The hallmark of this feature is the ability
   25026 to nullify most of the instructions in the instruction set.  When the
   25027 instruction set is large and not entirely symmetric, it can be quite
   25028 tedious to describe these forms directly in the `.md' file.  An
   25029 alternative is the `define_cond_exec' template.
   25030 
   25031      (define_cond_exec
   25032        [PREDICATE-PATTERN]
   25033        "CONDITION"
   25034        "OUTPUT-TEMPLATE")
   25035 
   25036  PREDICATE-PATTERN is the condition that must be true for the insn to
   25037 be executed at runtime and should match a relational operator.  One can
   25038 use `match_operator' to match several relational operators at once.
   25039 Any `match_operand' operands must have no more than one alternative.
   25040 
   25041  CONDITION is a C expression that must be true for the generated
   25042 pattern to match.
   25043 
   25044  OUTPUT-TEMPLATE is a string similar to the `define_insn' output
   25045 template (*note Output Template::), except that the `*' and `@' special
   25046 cases do not apply.  This is only useful if the assembly text for the
   25047 predicate is a simple prefix to the main insn.  In order to handle the
   25048 general case, there is a global variable `current_insn_predicate' that
   25049 will contain the entire predicate if the current insn is predicated,
   25050 and will otherwise be `NULL'.
   25051 
   25052  When `define_cond_exec' is used, an implicit reference to the
   25053 `predicable' instruction attribute is made.  *Note Insn Attributes::.
   25054 This attribute must be boolean (i.e. have exactly two elements in its
   25055 LIST-OF-VALUES).  Further, it must not be used with complex
   25056 expressions.  That is, the default and all uses in the insns must be a
   25057 simple constant, not dependent on the alternative or anything else.
   25058 
   25059  For each `define_insn' for which the `predicable' attribute is true, a
   25060 new `define_insn' pattern will be generated that matches a predicated
   25061 version of the instruction.  For example,
   25062 
   25063      (define_insn "addsi"
   25064        [(set (match_operand:SI 0 "register_operand" "r")
   25065              (plus:SI (match_operand:SI 1 "register_operand" "r")
   25066                       (match_operand:SI 2 "register_operand" "r")))]
   25067        "TEST1"
   25068        "add %2,%1,%0")
   25069 
   25070      (define_cond_exec
   25071        [(ne (match_operand:CC 0 "register_operand" "c")
   25072             (const_int 0))]
   25073        "TEST2"
   25074        "(%0)")
   25075 
   25076 generates a new pattern
   25077 
   25078      (define_insn ""
   25079        [(cond_exec
   25080           (ne (match_operand:CC 3 "register_operand" "c") (const_int 0))
   25081           (set (match_operand:SI 0 "register_operand" "r")
   25082                (plus:SI (match_operand:SI 1 "register_operand" "r")
   25083                         (match_operand:SI 2 "register_operand" "r"))))]
   25084        "(TEST2) && (TEST1)"
   25085        "(%3) add %2,%1,%0")
   25086 
   25087 
   25088 File: gccint.info,  Node: Constant Definitions,  Next: Iterators,  Prev: Conditional Execution,  Up: Machine Desc
   25089 
   25090 16.21 Constant Definitions
   25091 ==========================
   25092 
   25093 Using literal constants inside instruction patterns reduces legibility
   25094 and can be a maintenance problem.
   25095 
   25096  To overcome this problem, you may use the `define_constants'
   25097 expression.  It contains a vector of name-value pairs.  From that point
   25098 on, wherever any of the names appears in the MD file, it is as if the
   25099 corresponding value had been written instead.  You may use
   25100 `define_constants' multiple times; each appearance adds more constants
   25101 to the table.  It is an error to redefine a constant with a different
   25102 value.
   25103 
   25104  To come back to the a29k load multiple example, instead of
   25105 
   25106      (define_insn ""
   25107        [(match_parallel 0 "load_multiple_operation"
   25108           [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
   25109                 (match_operand:SI 2 "memory_operand" "m"))
   25110            (use (reg:SI 179))
   25111            (clobber (reg:SI 179))])]
   25112        ""
   25113        "loadm 0,0,%1,%2")
   25114 
   25115  You could write:
   25116 
   25117      (define_constants [
   25118          (R_BP 177)
   25119          (R_FC 178)
   25120          (R_CR 179)
   25121          (R_Q  180)
   25122      ])
   25123 
   25124      (define_insn ""
   25125        [(match_parallel 0 "load_multiple_operation"
   25126           [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
   25127                 (match_operand:SI 2 "memory_operand" "m"))
   25128            (use (reg:SI R_CR))
   25129            (clobber (reg:SI R_CR))])]
   25130        ""
   25131        "loadm 0,0,%1,%2")
   25132 
   25133  The constants that are defined with a define_constant are also output
   25134 in the insn-codes.h header file as #defines.
   25135 
   25136  You can also use the machine description file to define enumerations.
   25137 Like the constants defined by `define_constant', these enumerations are
   25138 visible to both the machine description file and the main C code.
   25139 
   25140  The syntax is as follows:
   25141 
   25142      (define_c_enum "NAME" [
   25143        VALUE0
   25144        VALUE1
   25145        ...
   25146        VALUEN
   25147      ])
   25148 
   25149  This definition causes the equivalent of the following C code to appear
   25150 in `insn-constants.h':
   25151 
   25152      enum NAME {
   25153        VALUE0 = 0,
   25154        VALUE1 = 1,
   25155        ...
   25156        VALUEN = N
   25157      };
   25158      #define NUM_CNAME_VALUES (N + 1)
   25159 
   25160  where CNAME is the capitalized form of NAME.  It also makes each
   25161 VALUEI available in the machine description file, just as if it had
   25162 been declared with:
   25163 
   25164      (define_constants [(VALUEI I)])
   25165 
   25166  Each VALUEI is usually an upper-case identifier and usually begins
   25167 with CNAME.
   25168 
   25169  You can split the enumeration definition into as many statements as
   25170 you like.  The above example is directly equivalent to:
   25171 
   25172      (define_c_enum "NAME" [VALUE0])
   25173      (define_c_enum "NAME" [VALUE1])
   25174      ...
   25175      (define_c_enum "NAME" [VALUEN])
   25176 
   25177  Splitting the enumeration helps to improve the modularity of each
   25178 individual `.md' file.  For example, if a port defines its
   25179 synchronization instructions in a separate `sync.md' file, it is
   25180 convenient to define all synchronization-specific enumeration values in
   25181 `sync.md' rather than in the main `.md' file.
   25182 
   25183  Some enumeration names have special significance to GCC:
   25184 
   25185 `unspecv'
   25186      If an enumeration called `unspecv' is defined, GCC will use it
   25187      when printing out `unspec_volatile' expressions.  For example:
   25188 
   25189           (define_c_enum "unspecv" [
   25190             UNSPECV_BLOCKAGE
   25191           ])
   25192 
   25193      causes GCC to print `(unspec_volatile ... 0)' as:
   25194 
   25195           (unspec_volatile ... UNSPECV_BLOCKAGE)
   25196 
   25197 `unspec'
   25198      If an enumeration called `unspec' is defined, GCC will use it when
   25199      printing out `unspec' expressions.  GCC will also use it when
   25200      printing out `unspec_volatile' expressions unless an `unspecv'
   25201      enumeration is also defined.  You can therefore decide whether to
   25202      keep separate enumerations for volatile and non-volatile
   25203      expressions or whether to use the same enumeration for both.
   25204 
   25205  Another way of defining an enumeration is to use `define_enum':
   25206 
   25207      (define_enum "NAME" [
   25208        VALUE0
   25209        VALUE1
   25210        ...
   25211        VALUEN
   25212      ])
   25213 
   25214  This directive implies:
   25215 
   25216      (define_c_enum "NAME" [
   25217        CNAME_CVALUE0
   25218        CNAME_CVALUE1
   25219        ...
   25220        CNAME_CVALUEN
   25221      ])
   25222 
   25223  where CVALUEI is the capitalized form of VALUEI.  However, unlike
   25224 `define_c_enum', the enumerations defined by `define_enum' can be used
   25225 in attribute specifications (*note define_enum_attr::).
   25226 
   25227 
   25228 File: gccint.info,  Node: Iterators,  Prev: Constant Definitions,  Up: Machine Desc
   25229 
   25230 16.22 Iterators
   25231 ===============
   25232 
   25233 Ports often need to define similar patterns for more than one machine
   25234 mode or for more than one rtx code.  GCC provides some simple iterator
   25235 facilities to make this process easier.
   25236 
   25237 * Menu:
   25238 
   25239 * Mode Iterators::         Generating variations of patterns for different modes.
   25240 * Code Iterators::         Doing the same for codes.
   25241 
   25242 
   25243 File: gccint.info,  Node: Mode Iterators,  Next: Code Iterators,  Up: Iterators
   25244 
   25245 16.22.1 Mode Iterators
   25246 ----------------------
   25247 
   25248 Ports often need to define similar patterns for two or more different
   25249 modes.  For example:
   25250 
   25251    * If a processor has hardware support for both single and double
   25252      floating-point arithmetic, the `SFmode' patterns tend to be very
   25253      similar to the `DFmode' ones.
   25254 
   25255    * If a port uses `SImode' pointers in one configuration and `DImode'
   25256      pointers in another, it will usually have very similar `SImode'
   25257      and `DImode' patterns for manipulating pointers.
   25258 
   25259  Mode iterators allow several patterns to be instantiated from one
   25260 `.md' file template.  They can be used with any type of rtx-based
   25261 construct, such as a `define_insn', `define_split', or
   25262 `define_peephole2'.
   25263 
   25264 * Menu:
   25265 
   25266 * Defining Mode Iterators:: Defining a new mode iterator.
   25267 * Substitutions::           Combining mode iterators with substitutions
   25268 * Examples::                Examples
   25269 
   25270 
   25271 File: gccint.info,  Node: Defining Mode Iterators,  Next: Substitutions,  Up: Mode Iterators
   25272 
   25273 16.22.1.1 Defining Mode Iterators
   25274 .................................
   25275 
   25276 The syntax for defining a mode iterator is:
   25277 
   25278      (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")])
   25279 
   25280  This allows subsequent `.md' file constructs to use the mode suffix
   25281 `:NAME'.  Every construct that does so will be expanded N times, once
   25282 with every use of `:NAME' replaced by `:MODE1', once with every use
   25283 replaced by `:MODE2', and so on.  In the expansion for a particular
   25284 MODEI, every C condition will also require that CONDI be true.
   25285 
   25286  For example:
   25287 
   25288      (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
   25289 
   25290  defines a new mode suffix `:P'.  Every construct that uses `:P' will
   25291 be expanded twice, once with every `:P' replaced by `:SI' and once with
   25292 every `:P' replaced by `:DI'.  The `:SI' version will only apply if
   25293 `Pmode == SImode' and the `:DI' version will only apply if `Pmode ==
   25294 DImode'.
   25295 
   25296  As with other `.md' conditions, an empty string is treated as "always
   25297 true".  `(MODE "")' can also be abbreviated to `MODE'.  For example:
   25298 
   25299      (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
   25300 
   25301  means that the `:DI' expansion only applies if `TARGET_64BIT' but that
   25302 the `:SI' expansion has no such constraint.
   25303 
   25304  Iterators are applied in the order they are defined.  This can be
   25305 significant if two iterators are used in a construct that requires
   25306 substitutions.  *Note Substitutions::.
   25307 
   25308 
   25309 File: gccint.info,  Node: Substitutions,  Next: Examples,  Prev: Defining Mode Iterators,  Up: Mode Iterators
   25310 
   25311 16.22.1.2 Substitution in Mode Iterators
   25312 ........................................
   25313 
   25314 If an `.md' file construct uses mode iterators, each version of the
   25315 construct will often need slightly different strings or modes.  For
   25316 example:
   25317 
   25318    * When a `define_expand' defines several `addM3' patterns (*note
   25319      Standard Names::), each expander will need to use the appropriate
   25320      mode name for M.
   25321 
   25322    * When a `define_insn' defines several instruction patterns, each
   25323      instruction will often use a different assembler mnemonic.
   25324 
   25325    * When a `define_insn' requires operands with different modes, using
   25326      an iterator for one of the operand modes usually requires a
   25327      specific mode for the other operand(s).
   25328 
   25329  GCC supports such variations through a system of "mode attributes".
   25330 There are two standard attributes: `mode', which is the name of the
   25331 mode in lower case, and `MODE', which is the same thing in upper case.
   25332 You can define other attributes using:
   25333 
   25334      (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")])
   25335 
   25336  where NAME is the name of the attribute and VALUEI is the value
   25337 associated with MODEI.
   25338 
   25339  When GCC replaces some :ITERATOR with :MODE, it will scan each string
   25340 and mode in the pattern for sequences of the form `<ITERATOR:ATTR>',
   25341 where ATTR is the name of a mode attribute.  If the attribute is
   25342 defined for MODE, the whole `<...>' sequence will be replaced by the
   25343 appropriate attribute value.
   25344 
   25345  For example, suppose an `.md' file has:
   25346 
   25347      (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
   25348      (define_mode_attr load [(SI "lw") (DI "ld")])
   25349 
   25350  If one of the patterns that uses `:P' contains the string
   25351 `"<P:load>\t%0,%1"', the `SI' version of that pattern will use
   25352 `"lw\t%0,%1"' and the `DI' version will use `"ld\t%0,%1"'.
   25353 
   25354  Here is an example of using an attribute for a mode:
   25355 
   25356      (define_mode_iterator LONG [SI DI])
   25357      (define_mode_attr SHORT [(SI "HI") (DI "SI")])
   25358      (define_insn ...
   25359        (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...)
   25360 
   25361  The `ITERATOR:' prefix may be omitted, in which case the substitution
   25362 will be attempted for every iterator expansion.
   25363 
   25364 
   25365 File: gccint.info,  Node: Examples,  Prev: Substitutions,  Up: Mode Iterators
   25366 
   25367 16.22.1.3 Mode Iterator Examples
   25368 ................................
   25369 
   25370 Here is an example from the MIPS port.  It defines the following modes
   25371 and attributes (among others):
   25372 
   25373      (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
   25374      (define_mode_attr d [(SI "") (DI "d")])
   25375 
   25376  and uses the following template to define both `subsi3' and `subdi3':
   25377 
   25378      (define_insn "sub<mode>3"
   25379        [(set (match_operand:GPR 0 "register_operand" "=d")
   25380              (minus:GPR (match_operand:GPR 1 "register_operand" "d")
   25381                         (match_operand:GPR 2 "register_operand" "d")))]
   25382        ""
   25383        "<d>subu\t%0,%1,%2"
   25384        [(set_attr "type" "arith")
   25385         (set_attr "mode" "<MODE>")])
   25386 
   25387  This is exactly equivalent to:
   25388 
   25389      (define_insn "subsi3"
   25390        [(set (match_operand:SI 0 "register_operand" "=d")
   25391              (minus:SI (match_operand:SI 1 "register_operand" "d")
   25392                        (match_operand:SI 2 "register_operand" "d")))]
   25393        ""
   25394        "subu\t%0,%1,%2"
   25395        [(set_attr "type" "arith")
   25396         (set_attr "mode" "SI")])
   25397 
   25398      (define_insn "subdi3"
   25399        [(set (match_operand:DI 0 "register_operand" "=d")
   25400              (minus:DI (match_operand:DI 1 "register_operand" "d")
   25401                        (match_operand:DI 2 "register_operand" "d")))]
   25402        ""
   25403        "dsubu\t%0,%1,%2"
   25404        [(set_attr "type" "arith")
   25405         (set_attr "mode" "DI")])
   25406 
   25407 
   25408 File: gccint.info,  Node: Code Iterators,  Prev: Mode Iterators,  Up: Iterators
   25409 
   25410 16.22.2 Code Iterators
   25411 ----------------------
   25412 
   25413 Code iterators operate in a similar way to mode iterators.  *Note Mode
   25414 Iterators::.
   25415 
   25416  The construct:
   25417 
   25418      (define_code_iterator NAME [(CODE1 "COND1") ... (CODEN "CONDN")])
   25419 
   25420  defines a pseudo rtx code NAME that can be instantiated as CODEI if
   25421 condition CONDI is true.  Each CODEI must have the same rtx format.
   25422 *Note RTL Classes::.
   25423 
   25424  As with mode iterators, each pattern that uses NAME will be expanded N
   25425 times, once with all uses of NAME replaced by CODE1, once with all uses
   25426 replaced by CODE2, and so on.  *Note Defining Mode Iterators::.
   25427 
   25428  It is possible to define attributes for codes as well as for modes.
   25429 There are two standard code attributes: `code', the name of the code in
   25430 lower case, and `CODE', the name of the code in upper case.  Other
   25431 attributes are defined using:
   25432 
   25433      (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")])
   25434 
   25435  Here's an example of code iterators in action, taken from the MIPS
   25436 port:
   25437 
   25438      (define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt
   25439                                      eq ne gt ge lt le gtu geu ltu leu])
   25440 
   25441      (define_expand "b<code>"
   25442        [(set (pc)
   25443              (if_then_else (any_cond:CC (cc0)
   25444                                         (const_int 0))
   25445                            (label_ref (match_operand 0 ""))
   25446                            (pc)))]
   25447        ""
   25448      {
   25449        gen_conditional_branch (operands, <CODE>);
   25450        DONE;
   25451      })
   25452 
   25453  This is equivalent to:
   25454 
   25455      (define_expand "bunordered"
   25456        [(set (pc)
   25457              (if_then_else (unordered:CC (cc0)
   25458                                          (const_int 0))
   25459                            (label_ref (match_operand 0 ""))
   25460                            (pc)))]
   25461        ""
   25462      {
   25463        gen_conditional_branch (operands, UNORDERED);
   25464        DONE;
   25465      })
   25466 
   25467      (define_expand "bordered"
   25468        [(set (pc)
   25469              (if_then_else (ordered:CC (cc0)
   25470                                        (const_int 0))
   25471                            (label_ref (match_operand 0 ""))
   25472                            (pc)))]
   25473        ""
   25474      {
   25475        gen_conditional_branch (operands, ORDERED);
   25476        DONE;
   25477      })
   25478 
   25479      ...
   25480 
   25481 
   25482 File: gccint.info,  Node: Target Macros,  Next: Host Config,  Prev: Machine Desc,  Up: Top
   25483 
   25484 17 Target Description Macros and Functions
   25485 ******************************************
   25486 
   25487 In addition to the file `MACHINE.md', a machine description includes a
   25488 C header file conventionally given the name `MACHINE.h' and a C source
   25489 file named `MACHINE.c'.  The header file defines numerous macros that
   25490 convey the information about the target machine that does not fit into
   25491 the scheme of the `.md' file.  The file `tm.h' should be a link to
   25492 `MACHINE.h'.  The header file `config.h' includes `tm.h' and most
   25493 compiler source files include `config.h'.  The source file defines a
   25494 variable `targetm', which is a structure containing pointers to
   25495 functions and data relating to the target machine.  `MACHINE.c' should
   25496 also contain their definitions, if they are not defined elsewhere in
   25497 GCC, and other functions called through the macros defined in the `.h'
   25498 file.
   25499 
   25500 * Menu:
   25501 
   25502 * Target Structure::    The `targetm' variable.
   25503 * Driver::              Controlling how the driver runs the compilation passes.
   25504 * Run-time Target::     Defining `-m' options like `-m68000' and `-m68020'.
   25505 * Per-Function Data::   Defining data structures for per-function information.
   25506 * Storage Layout::      Defining sizes and alignments of data.
   25507 * Type Layout::         Defining sizes and properties of basic user data types.
   25508 * Registers::           Naming and describing the hardware registers.
   25509 * Register Classes::    Defining the classes of hardware registers.
   25510 * Old Constraints::     The old way to define machine-specific constraints.
   25511 * Stack and Calling::   Defining which way the stack grows and by how much.
   25512 * Varargs::             Defining the varargs macros.
   25513 * Trampolines::         Code set up at run time to enter a nested function.
   25514 * Library Calls::       Controlling how library routines are implicitly called.
   25515 * Addressing Modes::    Defining addressing modes valid for memory operands.
   25516 * Anchored Addresses::  Defining how `-fsection-anchors' should work.
   25517 * Condition Code::      Defining how insns update the condition code.
   25518 * Costs::               Defining relative costs of different operations.
   25519 * Scheduling::          Adjusting the behavior of the instruction scheduler.
   25520 * Sections::            Dividing storage into text, data, and other sections.
   25521 * PIC::                 Macros for position independent code.
   25522 * Assembler Format::    Defining how to write insns and pseudo-ops to output.
   25523 * Debugging Info::      Defining the format of debugging output.
   25524 * Floating Point::      Handling floating point for cross-compilers.
   25525 * Mode Switching::      Insertion of mode-switching instructions.
   25526 * Target Attributes::   Defining target-specific uses of `__attribute__'.
   25527 * Emulated TLS::        Emulated TLS support.
   25528 * MIPS Coprocessors::   MIPS coprocessor support and how to customize it.
   25529 * PCH Target::          Validity checking for precompiled headers.
   25530 * C++ ABI::             Controlling C++ ABI changes.
   25531 * Named Address Spaces:: Adding support for named address spaces
   25532 * Misc::                Everything else.
   25533 
   25534 
   25535 File: gccint.info,  Node: Target Structure,  Next: Driver,  Up: Target Macros
   25536 
   25537 17.1 The Global `targetm' Variable
   25538 ==================================
   25539 
   25540  -- Variable: struct gcc_target targetm
   25541      The target `.c' file must define the global `targetm' variable
   25542      which contains pointers to functions and data relating to the
   25543      target machine.  The variable is declared in `target.h';
   25544      `target-def.h' defines the macro `TARGET_INITIALIZER' which is
   25545      used to initialize the variable, and macros for the default
   25546      initializers for elements of the structure.  The `.c' file should
   25547      override those macros for which the default definition is
   25548      inappropriate.  For example:
   25549           #include "target.h"
   25550           #include "target-def.h"
   25551 
   25552           /* Initialize the GCC target structure.  */
   25553 
   25554           #undef TARGET_COMP_TYPE_ATTRIBUTES
   25555           #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes
   25556 
   25557           struct gcc_target targetm = TARGET_INITIALIZER;
   25558 
   25559 Where a macro should be defined in the `.c' file in this manner to form
   25560 part of the `targetm' structure, it is documented below as a "Target
   25561 Hook" with a prototype.  Many macros will change in future from being
   25562 defined in the `.h' file to being part of the `targetm' structure.
   25563 
   25564 
   25565 File: gccint.info,  Node: Driver,  Next: Run-time Target,  Prev: Target Structure,  Up: Target Macros
   25566 
   25567 17.2 Controlling the Compilation Driver, `gcc'
   25568 ==============================================
   25569 
   25570 You can control the compilation driver.
   25571 
   25572  -- Macro: DRIVER_SELF_SPECS
   25573      A list of specs for the driver itself.  It should be a suitable
   25574      initializer for an array of strings, with no surrounding braces.
   25575 
   25576      The driver applies these specs to its own command line between
   25577      loading default `specs' files (but not command-line specified
   25578      ones) and choosing the multilib directory or running any
   25579      subcommands.  It applies them in the order given, so each spec can
   25580      depend on the options added by earlier ones.  It is also possible
   25581      to remove options using `%<OPTION' in the usual way.
   25582 
   25583      This macro can be useful when a port has several interdependent
   25584      target options.  It provides a way of standardizing the command
   25585      line so that the other specs are easier to write.
   25586 
   25587      Do not define this macro if it does not need to do anything.
   25588 
   25589  -- Macro: OPTION_DEFAULT_SPECS
   25590      A list of specs used to support configure-time default options
   25591      (i.e.  `--with' options) in the driver.  It should be a suitable
   25592      initializer for an array of structures, each containing two
   25593      strings, without the outermost pair of surrounding braces.
   25594 
   25595      The first item in the pair is the name of the default.  This must
   25596      match the code in `config.gcc' for the target.  The second item is
   25597      a spec to apply if a default with this name was specified.  The
   25598      string `%(VALUE)' in the spec will be replaced by the value of the
   25599      default everywhere it occurs.
   25600 
   25601      The driver will apply these specs to its own command line between
   25602      loading default `specs' files and processing `DRIVER_SELF_SPECS',
   25603      using the same mechanism as `DRIVER_SELF_SPECS'.
   25604 
   25605      Do not define this macro if it does not need to do anything.
   25606 
   25607  -- Macro: CPP_SPEC
   25608      A C string constant that tells the GCC driver program options to
   25609      pass to CPP.  It can also specify how to translate options you
   25610      give to GCC into options for GCC to pass to the CPP.
   25611 
   25612      Do not define this macro if it does not need to do anything.
   25613 
   25614  -- Macro: CPLUSPLUS_CPP_SPEC
   25615      This macro is just like `CPP_SPEC', but is used for C++, rather
   25616      than C.  If you do not define this macro, then the value of
   25617      `CPP_SPEC' (if any) will be used instead.
   25618 
   25619  -- Macro: CC1_SPEC
   25620      A C string constant that tells the GCC driver program options to
   25621      pass to `cc1', `cc1plus', `f771', and the other language front
   25622      ends.  It can also specify how to translate options you give to
   25623      GCC into options for GCC to pass to front ends.
   25624 
   25625      Do not define this macro if it does not need to do anything.
   25626 
   25627  -- Macro: CC1PLUS_SPEC
   25628      A C string constant that tells the GCC driver program options to
   25629      pass to `cc1plus'.  It can also specify how to translate options
   25630      you give to GCC into options for GCC to pass to the `cc1plus'.
   25631 
   25632      Do not define this macro if it does not need to do anything.  Note
   25633      that everything defined in CC1_SPEC is already passed to `cc1plus'
   25634      so there is no need to duplicate the contents of CC1_SPEC in
   25635      CC1PLUS_SPEC.
   25636 
   25637  -- Macro: ASM_SPEC
   25638      A C string constant that tells the GCC driver program options to
   25639      pass to the assembler.  It can also specify how to translate
   25640      options you give to GCC into options for GCC to pass to the
   25641      assembler.  See the file `sun3.h' for an example of this.
   25642 
   25643      Do not define this macro if it does not need to do anything.
   25644 
   25645  -- Macro: ASM_FINAL_SPEC
   25646      A C string constant that tells the GCC driver program how to run
   25647      any programs which cleanup after the normal assembler.  Normally,
   25648      this is not needed.  See the file `mips.h' for an example of this.
   25649 
   25650      Do not define this macro if it does not need to do anything.
   25651 
   25652  -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT
   25653      Define this macro, with no value, if the driver should give the
   25654      assembler an argument consisting of a single dash, `-', to
   25655      instruct it to read from its standard input (which will be a pipe
   25656      connected to the output of the compiler proper).  This argument is
   25657      given after any `-o' option specifying the name of the output file.
   25658 
   25659      If you do not define this macro, the assembler is assumed to read
   25660      its standard input if given no non-option arguments.  If your
   25661      assembler cannot read standard input at all, use a `%{pipe:%e}'
   25662      construct; see `mips.h' for instance.
   25663 
   25664  -- Macro: LINK_SPEC
   25665      A C string constant that tells the GCC driver program options to
   25666      pass to the linker.  It can also specify how to translate options
   25667      you give to GCC into options for GCC to pass to the linker.
   25668 
   25669      Do not define this macro if it does not need to do anything.
   25670 
   25671  -- Macro: LIB_SPEC
   25672      Another C string constant used much like `LINK_SPEC'.  The
   25673      difference between the two is that `LIB_SPEC' is used at the end
   25674      of the command given to the linker.
   25675 
   25676      If this macro is not defined, a default is provided that loads the
   25677      standard C library from the usual place.  See `gcc.c'.
   25678 
   25679  -- Macro: LIBGCC_SPEC
   25680      Another C string constant that tells the GCC driver program how
   25681      and when to place a reference to `libgcc.a' into the linker
   25682      command line.  This constant is placed both before and after the
   25683      value of `LIB_SPEC'.
   25684 
   25685      If this macro is not defined, the GCC driver provides a default
   25686      that passes the string `-lgcc' to the linker.
   25687 
   25688  -- Macro: REAL_LIBGCC_SPEC
   25689      By default, if `ENABLE_SHARED_LIBGCC' is defined, the
   25690      `LIBGCC_SPEC' is not directly used by the driver program but is
   25691      instead modified to refer to different versions of `libgcc.a'
   25692      depending on the values of the command line flags `-static',
   25693      `-shared', `-static-libgcc', and `-shared-libgcc'.  On targets
   25694      where these modifications are inappropriate, define
   25695      `REAL_LIBGCC_SPEC' instead.  `REAL_LIBGCC_SPEC' tells the driver
   25696      how to place a reference to `libgcc' on the link command line,
   25697      but, unlike `LIBGCC_SPEC', it is used unmodified.
   25698 
   25699  -- Macro: USE_LD_AS_NEEDED
   25700      A macro that controls the modifications to `LIBGCC_SPEC' mentioned
   25701      in `REAL_LIBGCC_SPEC'.  If nonzero, a spec will be generated that
   25702      uses -as-needed and the shared libgcc in place of the static
   25703      exception handler library, when linking without any of `-static',
   25704      `-static-libgcc', or `-shared-libgcc'.
   25705 
   25706  -- Macro: LINK_EH_SPEC
   25707      If defined, this C string constant is added to `LINK_SPEC'.  When
   25708      `USE_LD_AS_NEEDED' is zero or undefined, it also affects the
   25709      modifications to `LIBGCC_SPEC' mentioned in `REAL_LIBGCC_SPEC'.
   25710 
   25711  -- Macro: STARTFILE_SPEC
   25712      Another C string constant used much like `LINK_SPEC'.  The
   25713      difference between the two is that `STARTFILE_SPEC' is used at the
   25714      very beginning of the command given to the linker.
   25715 
   25716      If this macro is not defined, a default is provided that loads the
   25717      standard C startup file from the usual place.  See `gcc.c'.
   25718 
   25719  -- Macro: ENDFILE_SPEC
   25720      Another C string constant used much like `LINK_SPEC'.  The
   25721      difference between the two is that `ENDFILE_SPEC' is used at the
   25722      very end of the command given to the linker.
   25723 
   25724      Do not define this macro if it does not need to do anything.
   25725 
   25726  -- Macro: THREAD_MODEL_SPEC
   25727      GCC `-v' will print the thread model GCC was configured to use.
   25728      However, this doesn't work on platforms that are multilibbed on
   25729      thread models, such as AIX 4.3.  On such platforms, define
   25730      `THREAD_MODEL_SPEC' such that it evaluates to a string without
   25731      blanks that names one of the recognized thread models.  `%*', the
   25732      default value of this macro, will expand to the value of
   25733      `thread_file' set in `config.gcc'.
   25734 
   25735  -- Macro: SYSROOT_SUFFIX_SPEC
   25736      Define this macro to add a suffix to the target sysroot when GCC is
   25737      configured with a sysroot.  This will cause GCC to search for
   25738      usr/lib, et al, within sysroot+suffix.
   25739 
   25740  -- Macro: SYSROOT_HEADERS_SUFFIX_SPEC
   25741      Define this macro to add a headers_suffix to the target sysroot
   25742      when GCC is configured with a sysroot.  This will cause GCC to
   25743      pass the updated sysroot+headers_suffix to CPP, causing it to
   25744      search for usr/include, et al, within sysroot+headers_suffix.
   25745 
   25746  -- Macro: EXTRA_SPECS
   25747      Define this macro to provide additional specifications to put in
   25748      the `specs' file that can be used in various specifications like
   25749      `CC1_SPEC'.
   25750 
   25751      The definition should be an initializer for an array of structures,
   25752      containing a string constant, that defines the specification name,
   25753      and a string constant that provides the specification.
   25754 
   25755      Do not define this macro if it does not need to do anything.
   25756 
   25757      `EXTRA_SPECS' is useful when an architecture contains several
   25758      related targets, which have various `..._SPECS' which are similar
   25759      to each other, and the maintainer would like one central place to
   25760      keep these definitions.
   25761 
   25762      For example, the PowerPC System V.4 targets use `EXTRA_SPECS' to
   25763      define either `_CALL_SYSV' when the System V calling sequence is
   25764      used or `_CALL_AIX' when the older AIX-based calling sequence is
   25765      used.
   25766 
   25767      The `config/rs6000/rs6000.h' target file defines:
   25768 
   25769           #define EXTRA_SPECS \
   25770             { "cpp_sysv_default", CPP_SYSV_DEFAULT },
   25771 
   25772           #define CPP_SYS_DEFAULT ""
   25773 
   25774      The `config/rs6000/sysv.h' target file defines:
   25775           #undef CPP_SPEC
   25776           #define CPP_SPEC \
   25777           "%{posix: -D_POSIX_SOURCE } \
   25778           %{mcall-sysv: -D_CALL_SYSV } \
   25779           %{!mcall-sysv: %(cpp_sysv_default) } \
   25780           %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}"
   25781 
   25782           #undef CPP_SYSV_DEFAULT
   25783           #define CPP_SYSV_DEFAULT "-D_CALL_SYSV"
   25784 
   25785      while the `config/rs6000/eabiaix.h' target file defines
   25786      `CPP_SYSV_DEFAULT' as:
   25787 
   25788           #undef CPP_SYSV_DEFAULT
   25789           #define CPP_SYSV_DEFAULT "-D_CALL_AIX"
   25790 
   25791  -- Macro: LINK_LIBGCC_SPECIAL_1
   25792      Define this macro if the driver program should find the library
   25793      `libgcc.a'.  If you do not define this macro, the driver program
   25794      will pass the argument `-lgcc' to tell the linker to do the search.
   25795 
   25796  -- Macro: LINK_GCC_C_SEQUENCE_SPEC
   25797      The sequence in which libgcc and libc are specified to the linker.
   25798      By default this is `%G %L %G'.
   25799 
   25800  -- Macro: LINK_COMMAND_SPEC
   25801      A C string constant giving the complete command line need to
   25802      execute the linker.  When you do this, you will need to update
   25803      your port each time a change is made to the link command line
   25804      within `gcc.c'.  Therefore, define this macro only if you need to
   25805      completely redefine the command line for invoking the linker and
   25806      there is no other way to accomplish the effect you need.
   25807      Overriding this macro may be avoidable by overriding
   25808      `LINK_GCC_C_SEQUENCE_SPEC' instead.
   25809 
   25810  -- Macro: LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
   25811      A nonzero value causes `collect2' to remove duplicate
   25812      `-LDIRECTORY' search directories from linking commands.  Do not
   25813      give it a nonzero value if removing duplicate search directories
   25814      changes the linker's semantics.
   25815 
   25816  -- Macro: MULTILIB_DEFAULTS
   25817      Define this macro as a C expression for the initializer of an
   25818      array of string to tell the driver program which options are
   25819      defaults for this target and thus do not need to be handled
   25820      specially when using `MULTILIB_OPTIONS'.
   25821 
   25822      Do not define this macro if `MULTILIB_OPTIONS' is not defined in
   25823      the target makefile fragment or if none of the options listed in
   25824      `MULTILIB_OPTIONS' are set by default.  *Note Target Fragment::.
   25825 
   25826  -- Macro: RELATIVE_PREFIX_NOT_LINKDIR
   25827      Define this macro to tell `gcc' that it should only translate a
   25828      `-B' prefix into a `-L' linker option if the prefix indicates an
   25829      absolute file name.
   25830 
   25831  -- Macro: MD_EXEC_PREFIX
   25832      If defined, this macro is an additional prefix to try after
   25833      `STANDARD_EXEC_PREFIX'.  `MD_EXEC_PREFIX' is not searched when the
   25834      compiler is built as a cross compiler.  If you define
   25835      `MD_EXEC_PREFIX', then be sure to add it to the list of
   25836      directories used to find the assembler in `configure.in'.
   25837 
   25838  -- Macro: STANDARD_STARTFILE_PREFIX
   25839      Define this macro as a C string constant if you wish to override
   25840      the standard choice of `libdir' as the default prefix to try when
   25841      searching for startup files such as `crt0.o'.
   25842      `STANDARD_STARTFILE_PREFIX' is not searched when the compiler is
   25843      built as a cross compiler.
   25844 
   25845  -- Macro: STANDARD_STARTFILE_PREFIX_1
   25846      Define this macro as a C string constant if you wish to override
   25847      the standard choice of `/lib' as a prefix to try after the default
   25848      prefix when searching for startup files such as `crt0.o'.
   25849      `STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is
   25850      built as a cross compiler.
   25851 
   25852  -- Macro: STANDARD_STARTFILE_PREFIX_2
   25853      Define this macro as a C string constant if you wish to override
   25854      the standard choice of `/lib' as yet another prefix to try after
   25855      the default prefix when searching for startup files such as
   25856      `crt0.o'.  `STANDARD_STARTFILE_PREFIX_2' is not searched when the
   25857      compiler is built as a cross compiler.
   25858 
   25859  -- Macro: MD_STARTFILE_PREFIX
   25860      If defined, this macro supplies an additional prefix to try after
   25861      the standard prefixes.  `MD_EXEC_PREFIX' is not searched when the
   25862      compiler is built as a cross compiler.
   25863 
   25864  -- Macro: MD_STARTFILE_PREFIX_1
   25865      If defined, this macro supplies yet another prefix to try after the
   25866      standard prefixes.  It is not searched when the compiler is built
   25867      as a cross compiler.
   25868 
   25869  -- Macro: INIT_ENVIRONMENT
   25870      Define this macro as a C string constant if you wish to set
   25871      environment variables for programs called by the driver, such as
   25872      the assembler and loader.  The driver passes the value of this
   25873      macro to `putenv' to initialize the necessary environment
   25874      variables.
   25875 
   25876  -- Macro: LOCAL_INCLUDE_DIR
   25877      Define this macro as a C string constant if you wish to override
   25878      the standard choice of `/usr/local/include' as the default prefix
   25879      to try when searching for local header files.  `LOCAL_INCLUDE_DIR'
   25880      comes before `SYSTEM_INCLUDE_DIR' in the search order.
   25881 
   25882      Cross compilers do not search either `/usr/local/include' or its
   25883      replacement.
   25884 
   25885  -- Macro: SYSTEM_INCLUDE_DIR
   25886      Define this macro as a C string constant if you wish to specify a
   25887      system-specific directory to search for header files before the
   25888      standard directory.  `SYSTEM_INCLUDE_DIR' comes before
   25889      `STANDARD_INCLUDE_DIR' in the search order.
   25890 
   25891      Cross compilers do not use this macro and do not search the
   25892      directory specified.
   25893 
   25894  -- Macro: STANDARD_INCLUDE_DIR
   25895      Define this macro as a C string constant if you wish to override
   25896      the standard choice of `/usr/include' as the default prefix to try
   25897      when searching for header files.
   25898 
   25899      Cross compilers ignore this macro and do not search either
   25900      `/usr/include' or its replacement.
   25901 
   25902  -- Macro: STANDARD_INCLUDE_COMPONENT
   25903      The "component" corresponding to `STANDARD_INCLUDE_DIR'.  See
   25904      `INCLUDE_DEFAULTS', below, for the description of components.  If
   25905      you do not define this macro, no component is used.
   25906 
   25907  -- Macro: INCLUDE_DEFAULTS
   25908      Define this macro if you wish to override the entire default
   25909      search path for include files.  For a native compiler, the default
   25910      search path usually consists of `GCC_INCLUDE_DIR',
   25911      `LOCAL_INCLUDE_DIR', `SYSTEM_INCLUDE_DIR',
   25912      `GPLUSPLUS_INCLUDE_DIR', and `STANDARD_INCLUDE_DIR'.  In addition,
   25913      `GPLUSPLUS_INCLUDE_DIR' and `GCC_INCLUDE_DIR' are defined
   25914      automatically by `Makefile', and specify private search areas for
   25915      GCC.  The directory `GPLUSPLUS_INCLUDE_DIR' is used only for C++
   25916      programs.
   25917 
   25918      The definition should be an initializer for an array of structures.
   25919      Each array element should have four elements: the directory name (a
   25920      string constant), the component name (also a string constant), a
   25921      flag for C++-only directories, and a flag showing that the
   25922      includes in the directory don't need to be wrapped in `extern `C''
   25923      when compiling C++.  Mark the end of the array with a null element.
   25924 
   25925      The component name denotes what GNU package the include file is
   25926      part of, if any, in all uppercase letters.  For example, it might
   25927      be `GCC' or `BINUTILS'.  If the package is part of a
   25928      vendor-supplied operating system, code the component name as `0'.
   25929 
   25930      For example, here is the definition used for VAX/VMS:
   25931 
   25932           #define INCLUDE_DEFAULTS \
   25933           {                                       \
   25934             { "GNU_GXX_INCLUDE:", "G++", 1, 1},   \
   25935             { "GNU_CC_INCLUDE:", "GCC", 0, 0},    \
   25936             { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0},  \
   25937             { ".", 0, 0, 0},                      \
   25938             { 0, 0, 0, 0}                         \
   25939           }
   25940 
   25941  Here is the order of prefixes tried for exec files:
   25942 
   25943   1. Any prefixes specified by the user with `-B'.
   25944 
   25945   2. The environment variable `GCC_EXEC_PREFIX' or, if `GCC_EXEC_PREFIX'
   25946      is not set and the compiler has not been installed in the
   25947      configure-time PREFIX, the location in which the compiler has
   25948      actually been installed.
   25949 
   25950   3. The directories specified by the environment variable
   25951      `COMPILER_PATH'.
   25952 
   25953   4. The macro `STANDARD_EXEC_PREFIX', if the compiler has been
   25954      installed in the configured-time PREFIX.
   25955 
   25956   5. The location `/usr/libexec/gcc/', but only if this is a native
   25957      compiler.
   25958 
   25959   6. The location `/usr/lib/gcc/', but only if this is a native
   25960      compiler.
   25961 
   25962   7. The macro `MD_EXEC_PREFIX', if defined, but only if this is a
   25963      native compiler.
   25964 
   25965  Here is the order of prefixes tried for startfiles:
   25966 
   25967   1. Any prefixes specified by the user with `-B'.
   25968 
   25969   2. The environment variable `GCC_EXEC_PREFIX' or its automatically
   25970      determined value based on the installed toolchain location.
   25971 
   25972   3. The directories specified by the environment variable
   25973      `LIBRARY_PATH' (or port-specific name; native only, cross
   25974      compilers do not use this).
   25975 
   25976   4. The macro `STANDARD_EXEC_PREFIX', but only if the toolchain is
   25977      installed in the configured PREFIX or this is a native compiler.
   25978 
   25979   5. The location `/usr/lib/gcc/', but only if this is a native
   25980      compiler.
   25981 
   25982   6. The macro `MD_EXEC_PREFIX', if defined, but only if this is a
   25983      native compiler.
   25984 
   25985   7. The macro `MD_STARTFILE_PREFIX', if defined, but only if this is a
   25986      native compiler, or we have a target system root.
   25987 
   25988   8. The macro `MD_STARTFILE_PREFIX_1', if defined, but only if this is
   25989      a native compiler, or we have a target system root.
   25990 
   25991   9. The macro `STANDARD_STARTFILE_PREFIX', with any sysroot
   25992      modifications.  If this path is relative it will be prefixed by
   25993      `GCC_EXEC_PREFIX' and the machine suffix or `STANDARD_EXEC_PREFIX'
   25994      and the machine suffix.
   25995 
   25996  10. The macro `STANDARD_STARTFILE_PREFIX_1', but only if this is a
   25997      native compiler, or we have a target system root. The default for
   25998      this macro is `/lib/'.
   25999 
   26000  11. The macro `STANDARD_STARTFILE_PREFIX_2', but only if this is a
   26001      native compiler, or we have a target system root. The default for
   26002      this macro is `/usr/lib/'.
   26003 
   26004 
   26005 File: gccint.info,  Node: Run-time Target,  Next: Per-Function Data,  Prev: Driver,  Up: Target Macros
   26006 
   26007 17.3 Run-time Target Specification
   26008 ==================================
   26009 
   26010 Here are run-time target specifications.
   26011 
   26012  -- Macro: TARGET_CPU_CPP_BUILTINS ()
   26013      This function-like macro expands to a block of code that defines
   26014      built-in preprocessor macros and assertions for the target CPU,
   26015      using the functions `builtin_define', `builtin_define_std' and
   26016      `builtin_assert'.  When the front end calls this macro it provides
   26017      a trailing semicolon, and since it has finished command line
   26018      option processing your code can use those results freely.
   26019 
   26020      `builtin_assert' takes a string in the form you pass to the
   26021      command-line option `-A', such as `cpu=mips', and creates the
   26022      assertion.  `builtin_define' takes a string in the form accepted
   26023      by option `-D' and unconditionally defines the macro.
   26024 
   26025      `builtin_define_std' takes a string representing the name of an
   26026      object-like macro.  If it doesn't lie in the user's namespace,
   26027      `builtin_define_std' defines it unconditionally.  Otherwise, it
   26028      defines a version with two leading underscores, and another version
   26029      with two leading and trailing underscores, and defines the original
   26030      only if an ISO standard was not requested on the command line.  For
   26031      example, passing `unix' defines `__unix', `__unix__' and possibly
   26032      `unix'; passing `_mips' defines `__mips', `__mips__' and possibly
   26033      `_mips', and passing `_ABI64' defines only `_ABI64'.
   26034 
   26035      You can also test for the C dialect being compiled.  The variable
   26036      `c_language' is set to one of `clk_c', `clk_cplusplus' or
   26037      `clk_objective_c'.  Note that if we are preprocessing assembler,
   26038      this variable will be `clk_c' but the function-like macro
   26039      `preprocessing_asm_p()' will return true, so you might want to
   26040      check for that first.  If you need to check for strict ANSI, the
   26041      variable `flag_iso' can be used.  The function-like macro
   26042      `preprocessing_trad_p()' can be used to check for traditional
   26043      preprocessing.
   26044 
   26045  -- Macro: TARGET_OS_CPP_BUILTINS ()
   26046      Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional
   26047      and is used for the target operating system instead.
   26048 
   26049  -- Macro: TARGET_OBJFMT_CPP_BUILTINS ()
   26050      Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional
   26051      and is used for the target object format.  `elfos.h' uses this
   26052      macro to define `__ELF__', so you probably do not need to define
   26053      it yourself.
   26054 
   26055  -- Variable: extern int target_flags
   26056      This variable is declared in `options.h', which is included before
   26057      any target-specific headers.
   26058 
   26059  -- Target Hook: int TARGET_DEFAULT_TARGET_FLAGS
   26060      This variable specifies the initial value of `target_flags'.  Its
   26061      default setting is 0.
   26062 
   26063  -- Target Hook: bool TARGET_HANDLE_OPTION (size_t CODE, const char
   26064           *ARG, int VALUE)
   26065      This hook is called whenever the user specifies one of the
   26066      target-specific options described by the `.opt' definition files
   26067      (*note Options::).  It has the opportunity to do some
   26068      option-specific processing and should return true if the option is
   26069      valid.  The default definition does nothing but return true.
   26070 
   26071      CODE specifies the `OPT_NAME' enumeration value associated with
   26072      the selected option; NAME is just a rendering of the option name
   26073      in which non-alphanumeric characters are replaced by underscores.
   26074      ARG specifies the string argument and is null if no argument was
   26075      given.  If the option is flagged as a `UInteger' (*note Option
   26076      properties::), VALUE is the numeric value of the argument.
   26077      Otherwise VALUE is 1 if the positive form of the option was used
   26078      and 0 if the "no-" form was.
   26079 
   26080  -- Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char
   26081           *ARG, int VALUE)
   26082      This target hook is called whenever the user specifies one of the
   26083      target-specific C language family options described by the `.opt'
   26084      definition files(*note Options::).  It has the opportunity to do
   26085      some option-specific processing and should return true if the
   26086      option is valid.  The arguments are like for
   26087      `TARGET_HANDLE_OPTION'.  The default definition does nothing but
   26088      return false.
   26089 
   26090      In general, you should use `TARGET_HANDLE_OPTION' to handle
   26091      options.  However, if processing an option requires routines that
   26092      are only available in the C (and related language) front ends,
   26093      then you should use `TARGET_HANDLE_C_OPTION' instead.
   26094 
   26095  -- Target Hook: tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree STRING)
   26096      Targets may provide a string object type that can be used within
   26097      and between C, C++ and their respective Objective-C dialects. A
   26098      string object might, for example, embed encoding and length
   26099      information. These objects are considered opaque to the compiler
   26100      and handled as references. An ideal implementation makes the
   26101      composition of the string object match that of the Objective-C
   26102      `NSString' (`NXString' for GNUStep), allowing efficient
   26103      interworking between C-only and Objective-C code. If a target
   26104      implements string objects then this hook should return a reference
   26105      to such an object constructed from the normal `C' string
   26106      representation provided in STRING. At present, the hook is used by
   26107      Objective-C only, to obtain a common-format string object when the
   26108      target provides one.
   26109 
   26110  -- Target Hook: bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree
   26111           STRINGREF)
   26112      If a target implements string objects then this hook should return
   26113      `true' if STRINGREF is a valid reference to such an object.
   26114 
   26115  -- Target Hook: void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree
   26116           FORMAT_ARG, tree ARGS_LIST)
   26117      If a target implements string objects then this hook should should
   26118      provide a facility to check the function arguments in ARGS_LIST
   26119      against the format specifiers in FORMAT_ARG where the type of
   26120      FORMAT_ARG is one recognized as a valid string reference type.
   26121 
   26122  -- Macro: TARGET_VERSION
   26123      This macro is a C statement to print on `stderr' a string
   26124      describing the particular machine description choice.  Every
   26125      machine description should define `TARGET_VERSION'.  For example:
   26126 
   26127           #ifdef MOTOROLA
   26128           #define TARGET_VERSION \
   26129             fprintf (stderr, " (68k, Motorola syntax)");
   26130           #else
   26131           #define TARGET_VERSION \
   26132             fprintf (stderr, " (68k, MIT syntax)");
   26133           #endif
   26134 
   26135  -- Target Hook: void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void)
   26136      This target function is similar to the hook
   26137      `TARGET_OPTION_OVERRIDE' but is called when the optimize level is
   26138      changed via an attribute or pragma or when it is reset at the end
   26139      of the code affected by the attribute or pragma.  It is not called
   26140      at the beginning of compilation when `TARGET_OPTION_OVERRIDE' is
   26141      called so if you want to perform these actions then, you should
   26142      have `TARGET_OPTION_OVERRIDE' call
   26143      `TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'.
   26144 
   26145  -- Macro: C_COMMON_OVERRIDE_OPTIONS
   26146      This is similar to the `TARGET_OPTION_OVERRIDE' hook but is only
   26147      used in the C language frontends (C, Objective-C, C++,
   26148      Objective-C++) and so can be used to alter option flag variables
   26149      which only exist in those frontends.
   26150 
   26151  -- Target Hook: const struct default_options *
   26152 TARGET_OPTION_OPTIMIZATION_TABLE
   26153      Some machines may desire to change what optimizations are
   26154      performed for various optimization levels.   This variable, if
   26155      defined, describes options to enable at particular sets of
   26156      optimization levels.  These options are processed once just after
   26157      the optimization level is determined and before the remainder of
   26158      the command options have been parsed, so may be overridden by other
   26159      options passed explicitly.
   26160 
   26161      This processing is run once at program startup and when the
   26162      optimization options are changed via `#pragma GCC optimize' or by
   26163      using the `optimize' attribute.
   26164 
   26165  -- Target Hook: void TARGET_OPTION_INIT_STRUCT (struct gcc_options
   26166           *OPTS)
   26167      Set target-dependent initial values of fields in OPTS.
   26168 
   26169  -- Target Hook: void TARGET_OPTION_DEFAULT_PARAMS (void)
   26170      Set target-dependent default values for `--param' settings, using
   26171      calls to `set_default_param_value'.
   26172 
   26173  -- Target Hook: void TARGET_HELP (void)
   26174      This hook is called in response to the user invoking
   26175      `--target-help' on the command line.  It gives the target a chance
   26176      to display extra information on the target specific command line
   26177      options found in its `.opt' file.
   26178 
   26179  -- Macro: SWITCHABLE_TARGET
   26180      Some targets need to switch between substantially different
   26181      subtargets during compilation.  For example, the MIPS target has
   26182      one subtarget for the traditional MIPS architecture and another
   26183      for MIPS16.  Source code can switch between these two
   26184      subarchitectures using the `mips16' and `nomips16' attributes.
   26185 
   26186      Such subtargets can differ in things like the set of available
   26187      registers, the set of available instructions, the costs of various
   26188      operations, and so on.  GCC caches a lot of this type of
   26189      information in global variables, and recomputing them for each
   26190      subtarget takes a significant amount of time.  The compiler
   26191      therefore provides a facility for maintaining several versions of
   26192      the global variables and quickly switching between them; see
   26193      `target-globals.h' for details.
   26194 
   26195      Define this macro to 1 if your target needs this facility.  The
   26196      default is 0.
   26197 
   26198 
   26199 File: gccint.info,  Node: Per-Function Data,  Next: Storage Layout,  Prev: Run-time Target,  Up: Target Macros
   26200 
   26201 17.4 Defining data structures for per-function information.
   26202 ===========================================================
   26203 
   26204 If the target needs to store information on a per-function basis, GCC
   26205 provides a macro and a couple of variables to allow this.  Note, just
   26206 using statics to store the information is a bad idea, since GCC supports
   26207 nested functions, so you can be halfway through encoding one function
   26208 when another one comes along.
   26209 
   26210  GCC defines a data structure called `struct function' which contains
   26211 all of the data specific to an individual function.  This structure
   26212 contains a field called `machine' whose type is `struct
   26213 machine_function *', which can be used by targets to point to their own
   26214 specific data.
   26215 
   26216  If a target needs per-function specific data it should define the type
   26217 `struct machine_function' and also the macro `INIT_EXPANDERS'.  This
   26218 macro should be used to initialize the function pointer
   26219 `init_machine_status'.  This pointer is explained below.
   26220 
   26221  One typical use of per-function, target specific data is to create an
   26222 RTX to hold the register containing the function's return address.  This
   26223 RTX can then be used to implement the `__builtin_return_address'
   26224 function, for level 0.
   26225 
   26226  Note--earlier implementations of GCC used a single data area to hold
   26227 all of the per-function information.  Thus when processing of a nested
   26228 function began the old per-function data had to be pushed onto a stack,
   26229 and when the processing was finished, it had to be popped off the
   26230 stack.  GCC used to provide function pointers called
   26231 `save_machine_status' and `restore_machine_status' to handle the saving
   26232 and restoring of the target specific information.  Since the single
   26233 data area approach is no longer used, these pointers are no longer
   26234 supported.
   26235 
   26236  -- Macro: INIT_EXPANDERS
   26237      Macro called to initialize any target specific information.  This
   26238      macro is called once per function, before generation of any RTL
   26239      has begun.  The intention of this macro is to allow the
   26240      initialization of the function pointer `init_machine_status'.
   26241 
   26242  -- Variable: void (*)(struct function *) init_machine_status
   26243      If this function pointer is non-`NULL' it will be called once per
   26244      function, before function compilation starts, in order to allow the
   26245      target to perform any target specific initialization of the
   26246      `struct function' structure.  It is intended that this would be
   26247      used to initialize the `machine' of that structure.
   26248 
   26249      `struct machine_function' structures are expected to be freed by
   26250      GC.  Generally, any memory that they reference must be allocated
   26251      by using GC allocation, including the structure itself.
   26252 
   26253 
   26254 File: gccint.info,  Node: Storage Layout,  Next: Type Layout,  Prev: Per-Function Data,  Up: Target Macros
   26255 
   26256 17.5 Storage Layout
   26257 ===================
   26258 
   26259 Note that the definitions of the macros in this table which are sizes or
   26260 alignments measured in bits do not need to be constant.  They can be C
   26261 expressions that refer to static variables, such as the `target_flags'.
   26262 *Note Run-time Target::.
   26263 
   26264  -- Macro: BITS_BIG_ENDIAN
   26265      Define this macro to have the value 1 if the most significant bit
   26266      in a byte has the lowest number; otherwise define it to have the
   26267      value zero.  This means that bit-field instructions count from the
   26268      most significant bit.  If the machine has no bit-field
   26269      instructions, then this must still be defined, but it doesn't
   26270      matter which value it is defined to.  This macro need not be a
   26271      constant.
   26272 
   26273      This macro does not affect the way structure fields are packed into
   26274      bytes or words; that is controlled by `BYTES_BIG_ENDIAN'.
   26275 
   26276  -- Macro: BYTES_BIG_ENDIAN
   26277      Define this macro to have the value 1 if the most significant byte
   26278      in a word has the lowest number.  This macro need not be a
   26279      constant.
   26280 
   26281  -- Macro: WORDS_BIG_ENDIAN
   26282      Define this macro to have the value 1 if, in a multiword object,
   26283      the most significant word has the lowest number.  This applies to
   26284      both memory locations and registers; GCC fundamentally assumes
   26285      that the order of words in memory is the same as the order in
   26286      registers.  This macro need not be a constant.
   26287 
   26288  -- Macro: FLOAT_WORDS_BIG_ENDIAN
   26289      Define this macro to have the value 1 if `DFmode', `XFmode' or
   26290      `TFmode' floating point numbers are stored in memory with the word
   26291      containing the sign bit at the lowest address; otherwise define it
   26292      to have the value 0.  This macro need not be a constant.
   26293 
   26294      You need not define this macro if the ordering is the same as for
   26295      multi-word integers.
   26296 
   26297  -- Macro: BITS_PER_UNIT
   26298      Define this macro to be the number of bits in an addressable
   26299      storage unit (byte).  If you do not define this macro the default
   26300      is 8.
   26301 
   26302  -- Macro: BITS_PER_WORD
   26303      Number of bits in a word.  If you do not define this macro, the
   26304      default is `BITS_PER_UNIT * UNITS_PER_WORD'.
   26305 
   26306  -- Macro: MAX_BITS_PER_WORD
   26307      Maximum number of bits in a word.  If this is undefined, the
   26308      default is `BITS_PER_WORD'.  Otherwise, it is the constant value
   26309      that is the largest value that `BITS_PER_WORD' can have at
   26310      run-time.
   26311 
   26312  -- Macro: UNITS_PER_WORD
   26313      Number of storage units in a word; normally the size of a
   26314      general-purpose register, a power of two from 1 or 8.
   26315 
   26316  -- Macro: MIN_UNITS_PER_WORD
   26317      Minimum number of units in a word.  If this is undefined, the
   26318      default is `UNITS_PER_WORD'.  Otherwise, it is the constant value
   26319      that is the smallest value that `UNITS_PER_WORD' can have at
   26320      run-time.
   26321 
   26322  -- Macro: POINTER_SIZE
   26323      Width of a pointer, in bits.  You must specify a value no wider
   26324      than the width of `Pmode'.  If it is not equal to the width of
   26325      `Pmode', you must define `POINTERS_EXTEND_UNSIGNED'.  If you do
   26326      not specify a value the default is `BITS_PER_WORD'.
   26327 
   26328  -- Macro: POINTERS_EXTEND_UNSIGNED
   26329      A C expression that determines how pointers should be extended from
   26330      `ptr_mode' to either `Pmode' or `word_mode'.  It is greater than
   26331      zero if pointers should be zero-extended, zero if they should be
   26332      sign-extended, and negative if some other sort of conversion is
   26333      needed.  In the last case, the extension is done by the target's
   26334      `ptr_extend' instruction.
   26335 
   26336      You need not define this macro if the `ptr_mode', `Pmode' and
   26337      `word_mode' are all the same width.
   26338 
   26339  -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE)
   26340      A macro to update M and UNSIGNEDP when an object whose type is
   26341      TYPE and which has the specified mode and signedness is to be
   26342      stored in a register.  This macro is only called when TYPE is a
   26343      scalar type.
   26344 
   26345      On most RISC machines, which only have operations that operate on
   26346      a full register, define this macro to set M to `word_mode' if M is
   26347      an integer mode narrower than `BITS_PER_WORD'.  In most cases,
   26348      only integer modes should be widened because wider-precision
   26349      floating-point operations are usually more expensive than their
   26350      narrower counterparts.
   26351 
   26352      For most machines, the macro definition does not change UNSIGNEDP.
   26353      However, some machines, have instructions that preferentially
   26354      handle either signed or unsigned quantities of certain modes.  For
   26355      example, on the DEC Alpha, 32-bit loads from memory and 32-bit add
   26356      instructions sign-extend the result to 64 bits.  On such machines,
   26357      set UNSIGNEDP according to which kind of extension is more
   26358      efficient.
   26359 
   26360      Do not define this macro if it would never modify M.
   26361 
   26362  -- Target Hook: enum machine_mode TARGET_PROMOTE_FUNCTION_MODE
   26363           (const_tree TYPE, enum machine_mode MODE, int *PUNSIGNEDP,
   26364           const_tree FUNTYPE, int FOR_RETURN)
   26365      Like `PROMOTE_MODE', but it is applied to outgoing function
   26366      arguments or function return values.  The target hook should
   26367      return the new mode and possibly change `*PUNSIGNEDP' if the
   26368      promotion should change signedness.  This function is called only
   26369      for scalar _or pointer_ types.
   26370 
   26371      FOR_RETURN allows to distinguish the promotion of arguments and
   26372      return values.  If it is `1', a return value is being promoted and
   26373      `TARGET_FUNCTION_VALUE' must perform the same promotions done here.
   26374      If it is `2', the returned mode should be that of the register in
   26375      which an incoming parameter is copied, or the outgoing result is
   26376      computed; then the hook should return the same mode as
   26377      `promote_mode', though the signedness may be different.
   26378 
   26379      The default is to not promote arguments and return values.  You can
   26380      also define the hook to
   26381      `default_promote_function_mode_always_promote' if you would like
   26382      to apply the same rules given by `PROMOTE_MODE'.
   26383 
   26384  -- Macro: PARM_BOUNDARY
   26385      Normal alignment required for function parameters on the stack, in
   26386      bits.  All stack parameters receive at least this much alignment
   26387      regardless of data type.  On most machines, this is the same as the
   26388      size of an integer.
   26389 
   26390  -- Macro: STACK_BOUNDARY
   26391      Define this macro to the minimum alignment enforced by hardware
   26392      for the stack pointer on this machine.  The definition is a C
   26393      expression for the desired alignment (measured in bits).  This
   26394      value is used as a default if `PREFERRED_STACK_BOUNDARY' is not
   26395      defined.  On most machines, this should be the same as
   26396      `PARM_BOUNDARY'.
   26397 
   26398  -- Macro: PREFERRED_STACK_BOUNDARY
   26399      Define this macro if you wish to preserve a certain alignment for
   26400      the stack pointer, greater than what the hardware enforces.  The
   26401      definition is a C expression for the desired alignment (measured
   26402      in bits).  This macro must evaluate to a value equal to or larger
   26403      than `STACK_BOUNDARY'.
   26404 
   26405  -- Macro: INCOMING_STACK_BOUNDARY
   26406      Define this macro if the incoming stack boundary may be different
   26407      from `PREFERRED_STACK_BOUNDARY'.  This macro must evaluate to a
   26408      value equal to or larger than `STACK_BOUNDARY'.
   26409 
   26410  -- Macro: FUNCTION_BOUNDARY
   26411      Alignment required for a function entry point, in bits.
   26412 
   26413  -- Macro: BIGGEST_ALIGNMENT
   26414      Biggest alignment that any data type can require on this machine,
   26415      in bits.  Note that this is not the biggest alignment that is
   26416      supported, just the biggest alignment that, when violated, may
   26417      cause a fault.
   26418 
   26419  -- Macro: MALLOC_ABI_ALIGNMENT
   26420      Alignment, in bits, a C conformant malloc implementation has to
   26421      provide.  If not defined, the default value is `BITS_PER_WORD'.
   26422 
   26423  -- Macro: ATTRIBUTE_ALIGNED_VALUE
   26424      Alignment used by the `__attribute__ ((aligned))' construct.  If
   26425      not defined, the default value is `BIGGEST_ALIGNMENT'.
   26426 
   26427  -- Macro: MINIMUM_ATOMIC_ALIGNMENT
   26428      If defined, the smallest alignment, in bits, that can be given to
   26429      an object that can be referenced in one operation, without
   26430      disturbing any nearby object.  Normally, this is `BITS_PER_UNIT',
   26431      but may be larger on machines that don't have byte or half-word
   26432      store operations.
   26433 
   26434  -- Macro: BIGGEST_FIELD_ALIGNMENT
   26435      Biggest alignment that any structure or union field can require on
   26436      this machine, in bits.  If defined, this overrides
   26437      `BIGGEST_ALIGNMENT' for structure and union fields only, unless
   26438      the field alignment has been set by the `__attribute__ ((aligned
   26439      (N)))' construct.
   26440 
   26441  -- Macro: ADJUST_FIELD_ALIGN (FIELD, COMPUTED)
   26442      An expression for the alignment of a structure field FIELD if the
   26443      alignment computed in the usual way (including applying of
   26444      `BIGGEST_ALIGNMENT' and `BIGGEST_FIELD_ALIGNMENT' to the
   26445      alignment) is COMPUTED.  It overrides alignment only if the field
   26446      alignment has not been set by the `__attribute__ ((aligned (N)))'
   26447      construct.
   26448 
   26449  -- Macro: MAX_STACK_ALIGNMENT
   26450      Biggest stack alignment guaranteed by the backend.  Use this macro
   26451      to specify the maximum alignment of a variable on stack.
   26452 
   26453      If not defined, the default value is `STACK_BOUNDARY'.
   26454 
   26455 
   26456  -- Macro: MAX_OFILE_ALIGNMENT
   26457      Biggest alignment supported by the object file format of this
   26458      machine.  Use this macro to limit the alignment which can be
   26459      specified using the `__attribute__ ((aligned (N)))' construct.  If
   26460      not defined, the default value is `BIGGEST_ALIGNMENT'.
   26461 
   26462      On systems that use ELF, the default (in `config/elfos.h') is the
   26463      largest supported 32-bit ELF section alignment representable on a
   26464      32-bit host e.g. `(((unsigned HOST_WIDEST_INT) 1 << 28) * 8)'.  On
   26465      32-bit ELF the largest supported section alignment in bits is
   26466      `(0x80000000 * 8)', but this is not representable on 32-bit hosts.
   26467 
   26468  -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN)
   26469      If defined, a C expression to compute the alignment for a variable
   26470      in the static store.  TYPE is the data type, and BASIC-ALIGN is
   26471      the alignment that the object would ordinarily have.  The value of
   26472      this macro is used instead of that alignment to align the object.
   26473 
   26474      If this macro is not defined, then BASIC-ALIGN is used.
   26475 
   26476      One use of this macro is to increase alignment of medium-size data
   26477      to make it all fit in fewer cache lines.  Another is to cause
   26478      character arrays to be word-aligned so that `strcpy' calls that
   26479      copy constants to character arrays can be done inline.
   26480 
   26481  -- Macro: CONSTANT_ALIGNMENT (CONSTANT, BASIC-ALIGN)
   26482      If defined, a C expression to compute the alignment given to a
   26483      constant that is being placed in memory.  CONSTANT is the constant
   26484      and BASIC-ALIGN is the alignment that the object would ordinarily
   26485      have.  The value of this macro is used instead of that alignment to
   26486      align the object.
   26487 
   26488      If this macro is not defined, then BASIC-ALIGN is used.
   26489 
   26490      The typical use of this macro is to increase alignment for string
   26491      constants to be word aligned so that `strcpy' calls that copy
   26492      constants can be done inline.
   26493 
   26494  -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN)
   26495      If defined, a C expression to compute the alignment for a variable
   26496      in the local store.  TYPE is the data type, and BASIC-ALIGN is the
   26497      alignment that the object would ordinarily have.  The value of this
   26498      macro is used instead of that alignment to align the object.
   26499 
   26500      If this macro is not defined, then BASIC-ALIGN is used.
   26501 
   26502      One use of this macro is to increase alignment of medium-size data
   26503      to make it all fit in fewer cache lines.
   26504 
   26505      If the value of this macro has a type, it should be an unsigned
   26506      type.
   26507 
   26508  -- Macro: STACK_SLOT_ALIGNMENT (TYPE, MODE, BASIC-ALIGN)
   26509      If defined, a C expression to compute the alignment for stack slot.
   26510      TYPE is the data type, MODE is the widest mode available, and
   26511      BASIC-ALIGN is the alignment that the slot would ordinarily have.
   26512      The value of this macro is used instead of that alignment to align
   26513      the slot.
   26514 
   26515      If this macro is not defined, then BASIC-ALIGN is used when TYPE
   26516      is `NULL'.  Otherwise, `LOCAL_ALIGNMENT' will be used.
   26517 
   26518      This macro is to set alignment of stack slot to the maximum
   26519      alignment of all possible modes which the slot may have.
   26520 
   26521      If the value of this macro has a type, it should be an unsigned
   26522      type.
   26523 
   26524  -- Macro: LOCAL_DECL_ALIGNMENT (DECL)
   26525      If defined, a C expression to compute the alignment for a local
   26526      variable DECL.
   26527 
   26528      If this macro is not defined, then `LOCAL_ALIGNMENT (TREE_TYPE
   26529      (DECL), DECL_ALIGN (DECL))' is used.
   26530 
   26531      One use of this macro is to increase alignment of medium-size data
   26532      to make it all fit in fewer cache lines.
   26533 
   26534      If the value of this macro has a type, it should be an unsigned
   26535      type.
   26536 
   26537  -- Macro: MINIMUM_ALIGNMENT (EXP, MODE, ALIGN)
   26538      If defined, a C expression to compute the minimum required
   26539      alignment for dynamic stack realignment purposes for EXP (a type
   26540      or decl), MODE, assuming normal alignment ALIGN.
   26541 
   26542      If this macro is not defined, then ALIGN will be used.
   26543 
   26544  -- Macro: EMPTY_FIELD_BOUNDARY
   26545      Alignment in bits to be given to a structure bit-field that
   26546      follows an empty field such as `int : 0;'.
   26547 
   26548      If `PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro.
   26549 
   26550  -- Macro: STRUCTURE_SIZE_BOUNDARY
   26551      Number of bits which any structure or union's size must be a
   26552      multiple of.  Each structure or union's size is rounded up to a
   26553      multiple of this.
   26554 
   26555      If you do not define this macro, the default is the same as
   26556      `BITS_PER_UNIT'.
   26557 
   26558  -- Macro: STRICT_ALIGNMENT
   26559      Define this macro to be the value 1 if instructions will fail to
   26560      work if given data not on the nominal alignment.  If instructions
   26561      will merely go slower in that case, define this macro as 0.
   26562 
   26563  -- Macro: PCC_BITFIELD_TYPE_MATTERS
   26564      Define this if you wish to imitate the way many other C compilers
   26565      handle alignment of bit-fields and the structures that contain
   26566      them.
   26567 
   26568      The behavior is that the type written for a named bit-field (`int',
   26569      `short', or other integer type) imposes an alignment for the entire
   26570      structure, as if the structure really did contain an ordinary
   26571      field of that type.  In addition, the bit-field is placed within
   26572      the structure so that it would fit within such a field, not
   26573      crossing a boundary for it.
   26574 
   26575      Thus, on most machines, a named bit-field whose type is written as
   26576      `int' would not cross a four-byte boundary, and would force
   26577      four-byte alignment for the whole structure.  (The alignment used
   26578      may not be four bytes; it is controlled by the other alignment
   26579      parameters.)
   26580 
   26581      An unnamed bit-field will not affect the alignment of the
   26582      containing structure.
   26583 
   26584      If the macro is defined, its definition should be a C expression;
   26585      a nonzero value for the expression enables this behavior.
   26586 
   26587      Note that if this macro is not defined, or its value is zero, some
   26588      bit-fields may cross more than one alignment boundary.  The
   26589      compiler can support such references if there are `insv', `extv',
   26590      and `extzv' insns that can directly reference memory.
   26591 
   26592      The other known way of making bit-fields work is to define
   26593      `STRUCTURE_SIZE_BOUNDARY' as large as `BIGGEST_ALIGNMENT'.  Then
   26594      every structure can be accessed with fullwords.
   26595 
   26596      Unless the machine has bit-field instructions or you define
   26597      `STRUCTURE_SIZE_BOUNDARY' that way, you must define
   26598      `PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value.
   26599 
   26600      If your aim is to make GCC use the same conventions for laying out
   26601      bit-fields as are used by another compiler, here is how to
   26602      investigate what the other compiler does.  Compile and run this
   26603      program:
   26604 
   26605           struct foo1
   26606           {
   26607             char x;
   26608             char :0;
   26609             char y;
   26610           };
   26611 
   26612           struct foo2
   26613           {
   26614             char x;
   26615             int :0;
   26616             char y;
   26617           };
   26618 
   26619           main ()
   26620           {
   26621             printf ("Size of foo1 is %d\n",
   26622                     sizeof (struct foo1));
   26623             printf ("Size of foo2 is %d\n",
   26624                     sizeof (struct foo2));
   26625             exit (0);
   26626           }
   26627 
   26628      If this prints 2 and 5, then the compiler's behavior is what you
   26629      would get from `PCC_BITFIELD_TYPE_MATTERS'.
   26630 
   26631  -- Macro: BITFIELD_NBYTES_LIMITED
   26632      Like `PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited
   26633      to aligning a bit-field within the structure.
   26634 
   26635  -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELD (void)
   26636      When `PCC_BITFIELD_TYPE_MATTERS' is true this hook will determine
   26637      whether unnamed bitfields affect the alignment of the containing
   26638      structure.  The hook should return true if the structure should
   26639      inherit the alignment requirements of an unnamed bitfield's type.
   26640 
   26641  -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELD (void)
   26642      This target hook should return `true' if accesses to volatile
   26643      bitfields should use the narrowest mode possible.  It should
   26644      return `false' if these accesses should use the bitfield container
   26645      type.
   26646 
   26647      The default is `!TARGET_STRICT_ALIGN'.
   26648 
   26649  -- Macro: MEMBER_TYPE_FORCES_BLK (FIELD, MODE)
   26650      Return 1 if a structure or array containing FIELD should be
   26651      accessed using `BLKMODE'.
   26652 
   26653      If FIELD is the only field in the structure, MODE is its mode,
   26654      otherwise MODE is VOIDmode.  MODE is provided in the case where
   26655      structures of one field would require the structure's mode to
   26656      retain the field's mode.
   26657 
   26658      Normally, this is not needed.
   26659 
   26660  -- Macro: ROUND_TYPE_ALIGN (TYPE, COMPUTED, SPECIFIED)
   26661      Define this macro as an expression for the alignment of a type
   26662      (given by TYPE as a tree node) if the alignment computed in the
   26663      usual way is COMPUTED and the alignment explicitly specified was
   26664      SPECIFIED.
   26665 
   26666      The default is to use SPECIFIED if it is larger; otherwise, use
   26667      the smaller of COMPUTED and `BIGGEST_ALIGNMENT'
   26668 
   26669  -- Macro: MAX_FIXED_MODE_SIZE
   26670      An integer expression for the size in bits of the largest integer
   26671      machine mode that should actually be used.  All integer machine
   26672      modes of this size or smaller can be used for structures and
   26673      unions with the appropriate sizes.  If this macro is undefined,
   26674      `GET_MODE_BITSIZE (DImode)' is assumed.
   26675 
   26676  -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL)
   26677      If defined, an expression of type `enum machine_mode' that
   26678      specifies the mode of the save area operand of a
   26679      `save_stack_LEVEL' named pattern (*note Standard Names::).
   26680      SAVE_LEVEL is one of `SAVE_BLOCK', `SAVE_FUNCTION', or
   26681      `SAVE_NONLOCAL' and selects which of the three named patterns is
   26682      having its mode specified.
   26683 
   26684      You need not define this macro if it always returns `Pmode'.  You
   26685      would most commonly define this macro if the `save_stack_LEVEL'
   26686      patterns need to support both a 32- and a 64-bit mode.
   26687 
   26688  -- Macro: STACK_SIZE_MODE
   26689      If defined, an expression of type `enum machine_mode' that
   26690      specifies the mode of the size increment operand of an
   26691      `allocate_stack' named pattern (*note Standard Names::).
   26692 
   26693      You need not define this macro if it always returns `word_mode'.
   26694      You would most commonly define this macro if the `allocate_stack'
   26695      pattern needs to support both a 32- and a 64-bit mode.
   26696 
   26697  -- Target Hook: enum machine_mode TARGET_LIBGCC_CMP_RETURN_MODE (void)
   26698      This target hook should return the mode to be used for the return
   26699      value of compare instructions expanded to libgcc calls.  If not
   26700      defined `word_mode' is returned which is the right choice for a
   26701      majority of targets.
   26702 
   26703  -- Target Hook: enum machine_mode TARGET_LIBGCC_SHIFT_COUNT_MODE (void)
   26704      This target hook should return the mode to be used for the shift
   26705      count operand of shift instructions expanded to libgcc calls.  If
   26706      not defined `word_mode' is returned which is the right choice for
   26707      a majority of targets.
   26708 
   26709  -- Target Hook: enum machine_mode TARGET_UNWIND_WORD_MODE (void)
   26710      Return machine mode to be used for `_Unwind_Word' type.  The
   26711      default is to use `word_mode'.
   26712 
   26713  -- Macro: ROUND_TOWARDS_ZERO
   26714      If defined, this macro should be true if the prevailing rounding
   26715      mode is towards zero.
   26716 
   26717      Defining this macro only affects the way `libgcc.a' emulates
   26718      floating-point arithmetic.
   26719 
   26720      Not defining this macro is equivalent to returning zero.
   26721 
   26722  -- Macro: LARGEST_EXPONENT_IS_NORMAL (SIZE)
   26723      This macro should return true if floats with SIZE bits do not have
   26724      a NaN or infinity representation, but use the largest exponent for
   26725      normal numbers instead.
   26726 
   26727      Defining this macro only affects the way `libgcc.a' emulates
   26728      floating-point arithmetic.
   26729 
   26730      The default definition of this macro returns false for all sizes.
   26731 
   26732  -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (const_tree
   26733           RECORD_TYPE)
   26734      This target hook returns `true' if bit-fields in the given
   26735      RECORD_TYPE are to be laid out following the rules of Microsoft
   26736      Visual C/C++, namely: (i) a bit-field won't share the same storage
   26737      unit with the previous bit-field if their underlying types have
   26738      different sizes, and the bit-field will be aligned to the highest
   26739      alignment of the underlying types of itself and of the previous
   26740      bit-field; (ii) a zero-sized bit-field will affect the alignment of
   26741      the whole enclosing structure, even if it is unnamed; except that
   26742      (iii) a zero-sized bit-field will be disregarded unless it follows
   26743      another bit-field of nonzero size.  If this hook returns `true',
   26744      other macros that control bit-field layout are ignored.
   26745 
   26746      When a bit-field is inserted into a packed record, the whole size
   26747      of the underlying type is used by one or more same-size adjacent
   26748      bit-fields (that is, if its long:3, 32 bits is used in the record,
   26749      and any additional adjacent long bit-fields are packed into the
   26750      same chunk of 32 bits.  However, if the size changes, a new field
   26751      of that size is allocated).  In an unpacked record, this is the
   26752      same as using alignment, but not equivalent when packing.
   26753 
   26754      If both MS bit-fields and `__attribute__((packed))' are used, the
   26755      latter will take precedence.  If `__attribute__((packed))' is used
   26756      on a single field when MS bit-fields are in use, it will take
   26757      precedence for that field, but the alignment of the rest of the
   26758      structure may affect its placement.
   26759 
   26760  -- Target Hook: bool TARGET_DECIMAL_FLOAT_SUPPORTED_P (void)
   26761      Returns true if the target supports decimal floating point.
   26762 
   26763  -- Target Hook: bool TARGET_FIXED_POINT_SUPPORTED_P (void)
   26764      Returns true if the target supports fixed-point arithmetic.
   26765 
   26766  -- Target Hook: void TARGET_EXPAND_TO_RTL_HOOK (void)
   26767      This hook is called just before expansion into rtl, allowing the
   26768      target to perform additional initializations or analysis before
   26769      the expansion.  For example, the rs6000 port uses it to allocate a
   26770      scratch stack slot for use in copying SDmode values between memory
   26771      and floating point registers whenever the function being expanded
   26772      has any SDmode usage.
   26773 
   26774  -- Target Hook: void TARGET_INSTANTIATE_DECLS (void)
   26775      This hook allows the backend to perform additional instantiations
   26776      on rtl that are not actually in any insns yet, but will be later.
   26777 
   26778  -- Target Hook: const char * TARGET_MANGLE_TYPE (const_tree TYPE)
   26779      If your target defines any fundamental types, or any types your
   26780      target uses should be mangled differently from the default, define
   26781      this hook to return the appropriate encoding for these types as
   26782      part of a C++ mangled name.  The TYPE argument is the tree
   26783      structure representing the type to be mangled.  The hook may be
   26784      applied to trees which are not target-specific fundamental types;
   26785      it should return `NULL' for all such types, as well as arguments
   26786      it does not recognize.  If the return value is not `NULL', it must
   26787      point to a statically-allocated string constant.
   26788 
   26789      Target-specific fundamental types might be new fundamental types or
   26790      qualified versions of ordinary fundamental types.  Encode new
   26791      fundamental types as `u N NAME', where NAME is the name used for
   26792      the type in source code, and N is the length of NAME in decimal.
   26793      Encode qualified versions of ordinary types as `U N NAME CODE',
   26794      where NAME is the name used for the type qualifier in source code,
   26795      N is the length of NAME as above, and CODE is the code used to
   26796      represent the unqualified version of this type.  (See
   26797      `write_builtin_type' in `cp/mangle.c' for the list of codes.)  In
   26798      both cases the spaces are for clarity; do not include any spaces
   26799      in your string.
   26800 
   26801      This hook is applied to types prior to typedef resolution.  If the
   26802      mangled name for a particular type depends only on that type's
   26803      main variant, you can perform typedef resolution yourself using
   26804      `TYPE_MAIN_VARIANT' before mangling.
   26805 
   26806      The default version of this hook always returns `NULL', which is
   26807      appropriate for a target that does not define any new fundamental
   26808      types.
   26809 
   26810 
   26811 File: gccint.info,  Node: Type Layout,  Next: Registers,  Prev: Storage Layout,  Up: Target Macros
   26812 
   26813 17.6 Layout of Source Language Data Types
   26814 =========================================
   26815 
   26816 These macros define the sizes and other characteristics of the standard
   26817 basic data types used in programs being compiled.  Unlike the macros in
   26818 the previous section, these apply to specific features of C and related
   26819 languages, rather than to fundamental aspects of storage layout.
   26820 
   26821  -- Macro: INT_TYPE_SIZE
   26822      A C expression for the size in bits of the type `int' on the
   26823      target machine.  If you don't define this, the default is one word.
   26824 
   26825  -- Macro: SHORT_TYPE_SIZE
   26826      A C expression for the size in bits of the type `short' on the
   26827      target machine.  If you don't define this, the default is half a
   26828      word.  (If this would be less than one storage unit, it is rounded
   26829      up to one unit.)
   26830 
   26831  -- Macro: LONG_TYPE_SIZE
   26832      A C expression for the size in bits of the type `long' on the
   26833      target machine.  If you don't define this, the default is one word.
   26834 
   26835  -- Macro: ADA_LONG_TYPE_SIZE
   26836      On some machines, the size used for the Ada equivalent of the type
   26837      `long' by a native Ada compiler differs from that used by C.  In
   26838      that situation, define this macro to be a C expression to be used
   26839      for the size of that type.  If you don't define this, the default
   26840      is the value of `LONG_TYPE_SIZE'.
   26841 
   26842  -- Macro: LONG_LONG_TYPE_SIZE
   26843      A C expression for the size in bits of the type `long long' on the
   26844      target machine.  If you don't define this, the default is two
   26845      words.  If you want to support GNU Ada on your machine, the value
   26846      of this macro must be at least 64.
   26847 
   26848  -- Macro: CHAR_TYPE_SIZE
   26849      A C expression for the size in bits of the type `char' on the
   26850      target machine.  If you don't define this, the default is
   26851      `BITS_PER_UNIT'.
   26852 
   26853  -- Macro: BOOL_TYPE_SIZE
   26854      A C expression for the size in bits of the C++ type `bool' and C99
   26855      type `_Bool' on the target machine.  If you don't define this, and
   26856      you probably shouldn't, the default is `CHAR_TYPE_SIZE'.
   26857 
   26858  -- Macro: FLOAT_TYPE_SIZE
   26859      A C expression for the size in bits of the type `float' on the
   26860      target machine.  If you don't define this, the default is one word.
   26861 
   26862  -- Macro: DOUBLE_TYPE_SIZE
   26863      A C expression for the size in bits of the type `double' on the
   26864      target machine.  If you don't define this, the default is two
   26865      words.
   26866 
   26867  -- Macro: LONG_DOUBLE_TYPE_SIZE
   26868      A C expression for the size in bits of the type `long double' on
   26869      the target machine.  If you don't define this, the default is two
   26870      words.
   26871 
   26872  -- Macro: SHORT_FRACT_TYPE_SIZE
   26873      A C expression for the size in bits of the type `short _Fract' on
   26874      the target machine.  If you don't define this, the default is
   26875      `BITS_PER_UNIT'.
   26876 
   26877  -- Macro: FRACT_TYPE_SIZE
   26878      A C expression for the size in bits of the type `_Fract' on the
   26879      target machine.  If you don't define this, the default is
   26880      `BITS_PER_UNIT * 2'.
   26881 
   26882  -- Macro: LONG_FRACT_TYPE_SIZE
   26883      A C expression for the size in bits of the type `long _Fract' on
   26884      the target machine.  If you don't define this, the default is
   26885      `BITS_PER_UNIT * 4'.
   26886 
   26887  -- Macro: LONG_LONG_FRACT_TYPE_SIZE
   26888      A C expression for the size in bits of the type `long long _Fract'
   26889      on the target machine.  If you don't define this, the default is
   26890      `BITS_PER_UNIT * 8'.
   26891 
   26892  -- Macro: SHORT_ACCUM_TYPE_SIZE
   26893      A C expression for the size in bits of the type `short _Accum' on
   26894      the target machine.  If you don't define this, the default is
   26895      `BITS_PER_UNIT * 2'.
   26896 
   26897  -- Macro: ACCUM_TYPE_SIZE
   26898      A C expression for the size in bits of the type `_Accum' on the
   26899      target machine.  If you don't define this, the default is
   26900      `BITS_PER_UNIT * 4'.
   26901 
   26902  -- Macro: LONG_ACCUM_TYPE_SIZE
   26903      A C expression for the size in bits of the type `long _Accum' on
   26904      the target machine.  If you don't define this, the default is
   26905      `BITS_PER_UNIT * 8'.
   26906 
   26907  -- Macro: LONG_LONG_ACCUM_TYPE_SIZE
   26908      A C expression for the size in bits of the type `long long _Accum'
   26909      on the target machine.  If you don't define this, the default is
   26910      `BITS_PER_UNIT * 16'.
   26911 
   26912  -- Macro: LIBGCC2_LONG_DOUBLE_TYPE_SIZE
   26913      Define this macro if `LONG_DOUBLE_TYPE_SIZE' is not constant or if
   26914      you want routines in `libgcc2.a' for a size other than
   26915      `LONG_DOUBLE_TYPE_SIZE'.  If you don't define this, the default is
   26916      `LONG_DOUBLE_TYPE_SIZE'.
   26917 
   26918  -- Macro: LIBGCC2_HAS_DF_MODE
   26919      Define this macro if neither `DOUBLE_TYPE_SIZE' nor
   26920      `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is `DFmode' but you want `DFmode'
   26921      routines in `libgcc2.a' anyway.  If you don't define this and
   26922      either `DOUBLE_TYPE_SIZE' or `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64
   26923      then the default is 1, otherwise it is 0.
   26924 
   26925  -- Macro: LIBGCC2_HAS_XF_MODE
   26926      Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not
   26927      `XFmode' but you want `XFmode' routines in `libgcc2.a' anyway.  If
   26928      you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 80
   26929      then the default is 1, otherwise it is 0.
   26930 
   26931  -- Macro: LIBGCC2_HAS_TF_MODE
   26932      Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not
   26933      `TFmode' but you want `TFmode' routines in `libgcc2.a' anyway.  If
   26934      you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 128
   26935      then the default is 1, otherwise it is 0.
   26936 
   26937  -- Macro: SF_SIZE
   26938  -- Macro: DF_SIZE
   26939  -- Macro: XF_SIZE
   26940  -- Macro: TF_SIZE
   26941      Define these macros to be the size in bits of the mantissa of
   26942      `SFmode', `DFmode', `XFmode' and `TFmode' values, if the defaults
   26943      in `libgcc2.h' are inappropriate.  By default, `FLT_MANT_DIG' is
   26944      used for `SF_SIZE', `LDBL_MANT_DIG' for `XF_SIZE' and `TF_SIZE',
   26945      and `DBL_MANT_DIG' or `LDBL_MANT_DIG' for `DF_SIZE' according to
   26946      whether `DOUBLE_TYPE_SIZE' or `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is
   26947      64.
   26948 
   26949  -- Macro: TARGET_FLT_EVAL_METHOD
   26950      A C expression for the value for `FLT_EVAL_METHOD' in `float.h',
   26951      assuming, if applicable, that the floating-point control word is
   26952      in its default state.  If you do not define this macro the value of
   26953      `FLT_EVAL_METHOD' will be zero.
   26954 
   26955  -- Macro: WIDEST_HARDWARE_FP_SIZE
   26956      A C expression for the size in bits of the widest floating-point
   26957      format supported by the hardware.  If you define this macro, you
   26958      must specify a value less than or equal to the value of
   26959      `LONG_DOUBLE_TYPE_SIZE'.  If you do not define this macro, the
   26960      value of `LONG_DOUBLE_TYPE_SIZE' is the default.
   26961 
   26962  -- Macro: DEFAULT_SIGNED_CHAR
   26963      An expression whose value is 1 or 0, according to whether the type
   26964      `char' should be signed or unsigned by default.  The user can
   26965      always override this default with the options `-fsigned-char' and
   26966      `-funsigned-char'.
   26967 
   26968  -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void)
   26969      This target hook should return true if the compiler should give an
   26970      `enum' type only as many bytes as it takes to represent the range
   26971      of possible values of that type.  It should return false if all
   26972      `enum' types should be allocated like `int'.
   26973 
   26974      The default is to return false.
   26975 
   26976  -- Macro: SIZE_TYPE
   26977      A C expression for a string describing the name of the data type
   26978      to use for size values.  The typedef name `size_t' is defined
   26979      using the contents of the string.
   26980 
   26981      The string can contain more than one keyword.  If so, separate
   26982      them with spaces, and write first any length keyword, then
   26983      `unsigned' if appropriate, and finally `int'.  The string must
   26984      exactly match one of the data type names defined in the function
   26985      `init_decl_processing' in the file `c-decl.c'.  You may not omit
   26986      `int' or change the order--that would cause the compiler to crash
   26987      on startup.
   26988 
   26989      If you don't define this macro, the default is `"long unsigned
   26990      int"'.
   26991 
   26992  -- Macro: PTRDIFF_TYPE
   26993      A C expression for a string describing the name of the data type
   26994      to use for the result of subtracting two pointers.  The typedef
   26995      name `ptrdiff_t' is defined using the contents of the string.  See
   26996      `SIZE_TYPE' above for more information.
   26997 
   26998      If you don't define this macro, the default is `"long int"'.
   26999 
   27000  -- Macro: WCHAR_TYPE
   27001      A C expression for a string describing the name of the data type
   27002      to use for wide characters.  The typedef name `wchar_t' is defined
   27003      using the contents of the string.  See `SIZE_TYPE' above for more
   27004      information.
   27005 
   27006      If you don't define this macro, the default is `"int"'.
   27007 
   27008  -- Macro: WCHAR_TYPE_SIZE
   27009      A C expression for the size in bits of the data type for wide
   27010      characters.  This is used in `cpp', which cannot make use of
   27011      `WCHAR_TYPE'.
   27012 
   27013  -- Macro: WINT_TYPE
   27014      A C expression for a string describing the name of the data type to
   27015      use for wide characters passed to `printf' and returned from
   27016      `getwc'.  The typedef name `wint_t' is defined using the contents
   27017      of the string.  See `SIZE_TYPE' above for more information.
   27018 
   27019      If you don't define this macro, the default is `"unsigned int"'.
   27020 
   27021  -- Macro: INTMAX_TYPE
   27022      A C expression for a string describing the name of the data type
   27023      that can represent any value of any standard or extended signed
   27024      integer type.  The typedef name `intmax_t' is defined using the
   27025      contents of the string.  See `SIZE_TYPE' above for more
   27026      information.
   27027 
   27028      If you don't define this macro, the default is the first of
   27029      `"int"', `"long int"', or `"long long int"' that has as much
   27030      precision as `long long int'.
   27031 
   27032  -- Macro: UINTMAX_TYPE
   27033      A C expression for a string describing the name of the data type
   27034      that can represent any value of any standard or extended unsigned
   27035      integer type.  The typedef name `uintmax_t' is defined using the
   27036      contents of the string.  See `SIZE_TYPE' above for more
   27037      information.
   27038 
   27039      If you don't define this macro, the default is the first of
   27040      `"unsigned int"', `"long unsigned int"', or `"long long unsigned
   27041      int"' that has as much precision as `long long unsigned int'.
   27042 
   27043  -- Macro: SIG_ATOMIC_TYPE
   27044  -- Macro: INT8_TYPE
   27045  -- Macro: INT16_TYPE
   27046  -- Macro: INT32_TYPE
   27047  -- Macro: INT64_TYPE
   27048  -- Macro: UINT8_TYPE
   27049  -- Macro: UINT16_TYPE
   27050  -- Macro: UINT32_TYPE
   27051  -- Macro: UINT64_TYPE
   27052  -- Macro: INT_LEAST8_TYPE
   27053  -- Macro: INT_LEAST16_TYPE
   27054  -- Macro: INT_LEAST32_TYPE
   27055  -- Macro: INT_LEAST64_TYPE
   27056  -- Macro: UINT_LEAST8_TYPE
   27057  -- Macro: UINT_LEAST16_TYPE
   27058  -- Macro: UINT_LEAST32_TYPE
   27059  -- Macro: UINT_LEAST64_TYPE
   27060  -- Macro: INT_FAST8_TYPE
   27061  -- Macro: INT_FAST16_TYPE
   27062  -- Macro: INT_FAST32_TYPE
   27063  -- Macro: INT_FAST64_TYPE
   27064  -- Macro: UINT_FAST8_TYPE
   27065  -- Macro: UINT_FAST16_TYPE
   27066  -- Macro: UINT_FAST32_TYPE
   27067  -- Macro: UINT_FAST64_TYPE
   27068  -- Macro: INTPTR_TYPE
   27069  -- Macro: UINTPTR_TYPE
   27070      C expressions for the standard types `sig_atomic_t', `int8_t',
   27071      `int16_t', `int32_t', `int64_t', `uint8_t', `uint16_t',
   27072      `uint32_t', `uint64_t', `int_least8_t', `int_least16_t',
   27073      `int_least32_t', `int_least64_t', `uint_least8_t',
   27074      `uint_least16_t', `uint_least32_t', `uint_least64_t',
   27075      `int_fast8_t', `int_fast16_t', `int_fast32_t', `int_fast64_t',
   27076      `uint_fast8_t', `uint_fast16_t', `uint_fast32_t', `uint_fast64_t',
   27077      `intptr_t', and `uintptr_t'.  See `SIZE_TYPE' above for more
   27078      information.
   27079 
   27080      If any of these macros evaluates to a null pointer, the
   27081      corresponding type is not supported; if GCC is configured to
   27082      provide `<stdint.h>' in such a case, the header provided may not
   27083      conform to C99, depending on the type in question.  The defaults
   27084      for all of these macros are null pointers.
   27085 
   27086  -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION
   27087      The C++ compiler represents a pointer-to-member-function with a
   27088      struct that looks like:
   27089 
   27090             struct {
   27091               union {
   27092                 void (*fn)();
   27093                 ptrdiff_t vtable_index;
   27094               };
   27095               ptrdiff_t delta;
   27096             };
   27097 
   27098      The C++ compiler must use one bit to indicate whether the function
   27099      that will be called through a pointer-to-member-function is
   27100      virtual.  Normally, we assume that the low-order bit of a function
   27101      pointer must always be zero.  Then, by ensuring that the
   27102      vtable_index is odd, we can distinguish which variant of the union
   27103      is in use.  But, on some platforms function pointers can be odd,
   27104      and so this doesn't work.  In that case, we use the low-order bit
   27105      of the `delta' field, and shift the remainder of the `delta' field
   27106      to the left.
   27107 
   27108      GCC will automatically make the right selection about where to
   27109      store this bit using the `FUNCTION_BOUNDARY' setting for your
   27110      platform.  However, some platforms such as ARM/Thumb have
   27111      `FUNCTION_BOUNDARY' set such that functions always start at even
   27112      addresses, but the lowest bit of pointers to functions indicate
   27113      whether the function at that address is in ARM or Thumb mode.  If
   27114      this is the case of your architecture, you should define this
   27115      macro to `ptrmemfunc_vbit_in_delta'.
   27116 
   27117      In general, you should not have to define this macro.  On
   27118      architectures in which function addresses are always even,
   27119      according to `FUNCTION_BOUNDARY', GCC will automatically define
   27120      this macro to `ptrmemfunc_vbit_in_pfn'.
   27121 
   27122  -- Macro: TARGET_VTABLE_USES_DESCRIPTORS
   27123      Normally, the C++ compiler uses function pointers in vtables.  This
   27124      macro allows the target to change to use "function descriptors"
   27125      instead.  Function descriptors are found on targets for whom a
   27126      function pointer is actually a small data structure.  Normally the
   27127      data structure consists of the actual code address plus a data
   27128      pointer to which the function's data is relative.
   27129 
   27130      If vtables are used, the value of this macro should be the number
   27131      of words that the function descriptor occupies.
   27132 
   27133  -- Macro: TARGET_VTABLE_ENTRY_ALIGN
   27134      By default, the vtable entries are void pointers, the so the
   27135      alignment is the same as pointer alignment.  The value of this
   27136      macro specifies the alignment of the vtable entry in bits.  It
   27137      should be defined only when special alignment is necessary. */
   27138 
   27139  -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE
   27140      There are a few non-descriptor entries in the vtable at offsets
   27141      below zero.  If these entries must be padded (say, to preserve the
   27142      alignment specified by `TARGET_VTABLE_ENTRY_ALIGN'), set this to
   27143      the number of words in each data entry.
   27144 
   27145 
   27146 File: gccint.info,  Node: Registers,  Next: Register Classes,  Prev: Type Layout,  Up: Target Macros
   27147 
   27148 17.7 Register Usage
   27149 ===================
   27150 
   27151 This section explains how to describe what registers the target machine
   27152 has, and how (in general) they can be used.
   27153 
   27154  The description of which registers a specific instruction can use is
   27155 done with register classes; see *note Register Classes::.  For
   27156 information on using registers to access a stack frame, see *note Frame
   27157 Registers::.  For passing values in registers, see *note Register
   27158 Arguments::.  For returning values in registers, see *note Scalar
   27159 Return::.
   27160 
   27161 * Menu:
   27162 
   27163 * Register Basics::             Number and kinds of registers.
   27164 * Allocation Order::            Order in which registers are allocated.
   27165 * Values in Registers::         What kinds of values each reg can hold.
   27166 * Leaf Functions::              Renumbering registers for leaf functions.
   27167 * Stack Registers::             Handling a register stack such as 80387.
   27168 
   27169 
   27170 File: gccint.info,  Node: Register Basics,  Next: Allocation Order,  Up: Registers
   27171 
   27172 17.7.1 Basic Characteristics of Registers
   27173 -----------------------------------------
   27174 
   27175 Registers have various characteristics.
   27176 
   27177  -- Macro: FIRST_PSEUDO_REGISTER
   27178      Number of hardware registers known to the compiler.  They receive
   27179      numbers 0 through `FIRST_PSEUDO_REGISTER-1'; thus, the first
   27180      pseudo register's number really is assigned the number
   27181      `FIRST_PSEUDO_REGISTER'.
   27182 
   27183  -- Macro: FIXED_REGISTERS
   27184      An initializer that says which registers are used for fixed
   27185      purposes all throughout the compiled code and are therefore not
   27186      available for general allocation.  These would include the stack
   27187      pointer, the frame pointer (except on machines where that can be
   27188      used as a general register when no frame pointer is needed), the
   27189      program counter on machines where that is considered one of the
   27190      addressable registers, and any other numbered register with a
   27191      standard use.
   27192 
   27193      This information is expressed as a sequence of numbers, separated
   27194      by commas and surrounded by braces.  The Nth number is 1 if
   27195      register N is fixed, 0 otherwise.
   27196 
   27197      The table initialized from this macro, and the table initialized by
   27198      the following one, may be overridden at run time either
   27199      automatically, by the actions of the macro
   27200      `CONDITIONAL_REGISTER_USAGE', or by the user with the command
   27201      options `-ffixed-REG', `-fcall-used-REG' and `-fcall-saved-REG'.
   27202 
   27203  -- Macro: CALL_USED_REGISTERS
   27204      Like `FIXED_REGISTERS' but has 1 for each register that is
   27205      clobbered (in general) by function calls as well as for fixed
   27206      registers.  This macro therefore identifies the registers that are
   27207      not available for general allocation of values that must live
   27208      across function calls.
   27209 
   27210      If a register has 0 in `CALL_USED_REGISTERS', the compiler
   27211      automatically saves it on function entry and restores it on
   27212      function exit, if the register is used within the function.
   27213 
   27214  -- Macro: CALL_REALLY_USED_REGISTERS
   27215      Like `CALL_USED_REGISTERS' except this macro doesn't require that
   27216      the entire set of `FIXED_REGISTERS' be included.
   27217      (`CALL_USED_REGISTERS' must be a superset of `FIXED_REGISTERS').
   27218      This macro is optional.  If not specified, it defaults to the value
   27219      of `CALL_USED_REGISTERS'.
   27220 
   27221  -- Macro: HARD_REGNO_CALL_PART_CLOBBERED (REGNO, MODE)
   27222      A C expression that is nonzero if it is not permissible to store a
   27223      value of mode MODE in hard register number REGNO across a call
   27224      without some part of it being clobbered.  For most machines this
   27225      macro need not be defined.  It is only required for machines that
   27226      do not preserve the entire contents of a register across a call.
   27227 
   27228  -- Target Hook: void TARGET_CONDITIONAL_REGISTER_USAGE (void)
   27229      This hook may conditionally modify five variables `fixed_regs',
   27230      `call_used_regs', `global_regs', `reg_names', and
   27231      `reg_class_contents', to take into account any dependence of these
   27232      register sets on target flags.  The first three of these are of
   27233      type `char []' (interpreted as Boolean vectors).  `global_regs' is
   27234      a `const char *[]', and `reg_class_contents' is a `HARD_REG_SET'.
   27235      Before the macro is called, `fixed_regs', `call_used_regs',
   27236      `reg_class_contents', and `reg_names' have been initialized from
   27237      `FIXED_REGISTERS', `CALL_USED_REGISTERS', `REG_CLASS_CONTENTS',
   27238      and `REGISTER_NAMES', respectively.  `global_regs' has been
   27239      cleared, and any `-ffixed-REG', `-fcall-used-REG' and
   27240      `-fcall-saved-REG' command options have been applied.
   27241 
   27242      If the usage of an entire class of registers depends on the target
   27243      flags, you may indicate this to GCC by using this macro to modify
   27244      `fixed_regs' and `call_used_regs' to 1 for each of the registers
   27245      in the classes which should not be used by GCC.  Also define the
   27246      macro `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' to
   27247      return `NO_REGS' if it is called with a letter for a class that
   27248      shouldn't be used.
   27249 
   27250      (However, if this class is not included in `GENERAL_REGS' and all
   27251      of the insn patterns whose constraints permit this class are
   27252      controlled by target switches, then GCC will automatically avoid
   27253      using these registers when the target switches are opposed to
   27254      them.)
   27255 
   27256  -- Macro: INCOMING_REGNO (OUT)
   27257      Define this macro if the target machine has register windows.
   27258      This C expression returns the register number as seen by the
   27259      called function corresponding to the register number OUT as seen
   27260      by the calling function.  Return OUT if register number OUT is not
   27261      an outbound register.
   27262 
   27263  -- Macro: OUTGOING_REGNO (IN)
   27264      Define this macro if the target machine has register windows.
   27265      This C expression returns the register number as seen by the
   27266      calling function corresponding to the register number IN as seen
   27267      by the called function.  Return IN if register number IN is not an
   27268      inbound register.
   27269 
   27270  -- Macro: LOCAL_REGNO (REGNO)
   27271      Define this macro if the target machine has register windows.
   27272      This C expression returns true if the register is call-saved but
   27273      is in the register window.  Unlike most call-saved registers, such
   27274      registers need not be explicitly restored on function exit or
   27275      during non-local gotos.
   27276 
   27277  -- Macro: PC_REGNUM
   27278      If the program counter has a register number, define this as that
   27279      register number.  Otherwise, do not define it.
   27280 
   27281 
   27282 File: gccint.info,  Node: Allocation Order,  Next: Values in Registers,  Prev: Register Basics,  Up: Registers
   27283 
   27284 17.7.2 Order of Allocation of Registers
   27285 ---------------------------------------
   27286 
   27287 Registers are allocated in order.
   27288 
   27289  -- Macro: REG_ALLOC_ORDER
   27290      If defined, an initializer for a vector of integers, containing the
   27291      numbers of hard registers in the order in which GCC should prefer
   27292      to use them (from most preferred to least).
   27293 
   27294      If this macro is not defined, registers are used lowest numbered
   27295      first (all else being equal).
   27296 
   27297      One use of this macro is on machines where the highest numbered
   27298      registers must always be saved and the save-multiple-registers
   27299      instruction supports only sequences of consecutive registers.  On
   27300      such machines, define `REG_ALLOC_ORDER' to be an initializer that
   27301      lists the highest numbered allocable register first.
   27302 
   27303  -- Macro: ADJUST_REG_ALLOC_ORDER
   27304      A C statement (sans semicolon) to choose the order in which to
   27305      allocate hard registers for pseudo-registers local to a basic
   27306      block.
   27307 
   27308      Store the desired register order in the array `reg_alloc_order'.
   27309      Element 0 should be the register to allocate first; element 1, the
   27310      next register; and so on.
   27311 
   27312      The macro body should not assume anything about the contents of
   27313      `reg_alloc_order' before execution of the macro.
   27314 
   27315      On most machines, it is not necessary to define this macro.
   27316 
   27317  -- Macro: HONOR_REG_ALLOC_ORDER
   27318      Normally, IRA tries to estimate the costs for saving a register in
   27319      the prologue and restoring it in the epilogue.  This discourages
   27320      it from using call-saved registers.  If a machine wants to ensure
   27321      that IRA allocates registers in the order given by REG_ALLOC_ORDER
   27322      even if some call-saved registers appear earlier than call-used
   27323      ones, this macro should be defined.
   27324 
   27325  -- Macro: IRA_HARD_REGNO_ADD_COST_MULTIPLIER (REGNO)
   27326      In some case register allocation order is not enough for the
   27327      Integrated Register Allocator (IRA) to generate a good code.  If
   27328      this macro is defined, it should return a floating point value
   27329      based on REGNO.  The cost of using REGNO for a pseudo will be
   27330      increased by approximately the pseudo's usage frequency times the
   27331      value returned by this macro.  Not defining this macro is
   27332      equivalent to having it always return `0.0'.
   27333 
   27334      On most machines, it is not necessary to define this macro.
   27335 
   27336 
   27337 File: gccint.info,  Node: Values in Registers,  Next: Leaf Functions,  Prev: Allocation Order,  Up: Registers
   27338 
   27339 17.7.3 How Values Fit in Registers
   27340 ----------------------------------
   27341 
   27342 This section discusses the macros that describe which kinds of values
   27343 (specifically, which machine modes) each register can hold, and how many
   27344 consecutive registers are needed for a given mode.
   27345 
   27346  -- Macro: HARD_REGNO_NREGS (REGNO, MODE)
   27347      A C expression for the number of consecutive hard registers,
   27348      starting at register number REGNO, required to hold a value of mode
   27349      MODE.  This macro must never return zero, even if a register
   27350      cannot hold the requested mode - indicate that with
   27351      HARD_REGNO_MODE_OK and/or CANNOT_CHANGE_MODE_CLASS instead.
   27352 
   27353      On a machine where all registers are exactly one word, a suitable
   27354      definition of this macro is
   27355 
   27356           #define HARD_REGNO_NREGS(REGNO, MODE)            \
   27357              ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1)  \
   27358               / UNITS_PER_WORD)
   27359 
   27360  -- Macro: HARD_REGNO_NREGS_HAS_PADDING (REGNO, MODE)
   27361      A C expression that is nonzero if a value of mode MODE, stored in
   27362      memory, ends with padding that causes it to take up more space than
   27363      in registers starting at register number REGNO (as determined by
   27364      multiplying GCC's notion of the size of the register when
   27365      containing this mode by the number of registers returned by
   27366      `HARD_REGNO_NREGS').  By default this is zero.
   27367 
   27368      For example, if a floating-point value is stored in three 32-bit
   27369      registers but takes up 128 bits in memory, then this would be
   27370      nonzero.
   27371 
   27372      This macros only needs to be defined if there are cases where
   27373      `subreg_get_info' would otherwise wrongly determine that a
   27374      `subreg' can be represented by an offset to the register number,
   27375      when in fact such a `subreg' would contain some of the padding not
   27376      stored in registers and so not be representable.
   27377 
   27378  -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE)
   27379      For values of REGNO and MODE for which
   27380      `HARD_REGNO_NREGS_HAS_PADDING' returns nonzero, a C expression
   27381      returning the greater number of registers required to hold the
   27382      value including any padding.  In the example above, the value
   27383      would be four.
   27384 
   27385  -- Macro: REGMODE_NATURAL_SIZE (MODE)
   27386      Define this macro if the natural size of registers that hold values
   27387      of mode MODE is not the word size.  It is a C expression that
   27388      should give the natural size in bytes for the specified mode.  It
   27389      is used by the register allocator to try to optimize its results.
   27390      This happens for example on SPARC 64-bit where the natural size of
   27391      floating-point registers is still 32-bit.
   27392 
   27393  -- Macro: HARD_REGNO_MODE_OK (REGNO, MODE)
   27394      A C expression that is nonzero if it is permissible to store a
   27395      value of mode MODE in hard register number REGNO (or in several
   27396      registers starting with that one).  For a machine where all
   27397      registers are equivalent, a suitable definition is
   27398 
   27399           #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
   27400 
   27401      You need not include code to check for the numbers of fixed
   27402      registers, because the allocation mechanism considers them to be
   27403      always occupied.
   27404 
   27405      On some machines, double-precision values must be kept in even/odd
   27406      register pairs.  You can implement that by defining this macro to
   27407      reject odd register numbers for such modes.
   27408 
   27409      The minimum requirement for a mode to be OK in a register is that
   27410      the `movMODE' instruction pattern support moves between the
   27411      register and other hard register in the same class and that moving
   27412      a value into the register and back out not alter it.
   27413 
   27414      Since the same instruction used to move `word_mode' will work for
   27415      all narrower integer modes, it is not necessary on any machine for
   27416      `HARD_REGNO_MODE_OK' to distinguish between these modes, provided
   27417      you define patterns `movhi', etc., to take advantage of this.  This
   27418      is useful because of the interaction between `HARD_REGNO_MODE_OK'
   27419      and `MODES_TIEABLE_P'; it is very desirable for all integer modes
   27420      to be tieable.
   27421 
   27422      Many machines have special registers for floating point arithmetic.
   27423      Often people assume that floating point machine modes are allowed
   27424      only in floating point registers.  This is not true.  Any
   27425      registers that can hold integers can safely _hold_ a floating
   27426      point machine mode, whether or not floating arithmetic can be done
   27427      on it in those registers.  Integer move instructions can be used
   27428      to move the values.
   27429 
   27430      On some machines, though, the converse is true: fixed-point machine
   27431      modes may not go in floating registers.  This is true if the
   27432      floating registers normalize any value stored in them, because
   27433      storing a non-floating value there would garble it.  In this case,
   27434      `HARD_REGNO_MODE_OK' should reject fixed-point machine modes in
   27435      floating registers.  But if the floating registers do not
   27436      automatically normalize, if you can store any bit pattern in one
   27437      and retrieve it unchanged without a trap, then any machine mode
   27438      may go in a floating register, so you can define this macro to say
   27439      so.
   27440 
   27441      The primary significance of special floating registers is rather
   27442      that they are the registers acceptable in floating point arithmetic
   27443      instructions.  However, this is of no concern to
   27444      `HARD_REGNO_MODE_OK'.  You handle it by writing the proper
   27445      constraints for those instructions.
   27446 
   27447      On some machines, the floating registers are especially slow to
   27448      access, so that it is better to store a value in a stack frame
   27449      than in such a register if floating point arithmetic is not being
   27450      done.  As long as the floating registers are not in class
   27451      `GENERAL_REGS', they will not be used unless some pattern's
   27452      constraint asks for one.
   27453 
   27454  -- Macro: HARD_REGNO_RENAME_OK (FROM, TO)
   27455      A C expression that is nonzero if it is OK to rename a hard
   27456      register FROM to another hard register TO.
   27457 
   27458      One common use of this macro is to prevent renaming of a register
   27459      to another register that is not saved by a prologue in an interrupt
   27460      handler.
   27461 
   27462      The default is always nonzero.
   27463 
   27464  -- Macro: MODES_TIEABLE_P (MODE1, MODE2)
   27465      A C expression that is nonzero if a value of mode MODE1 is
   27466      accessible in mode MODE2 without copying.
   27467 
   27468      If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R,
   27469      MODE2)' are always the same for any R, then `MODES_TIEABLE_P
   27470      (MODE1, MODE2)' should be nonzero.  If they differ for any R, you
   27471      should define this macro to return zero unless some other
   27472      mechanism ensures the accessibility of the value in a narrower
   27473      mode.
   27474 
   27475      You should define this macro to return nonzero in as many cases as
   27476      possible since doing so will allow GCC to perform better register
   27477      allocation.
   27478 
   27479  -- Target Hook: bool TARGET_HARD_REGNO_SCRATCH_OK (unsigned int REGNO)
   27480      This target hook should return `true' if it is OK to use a hard
   27481      register REGNO as scratch reg in peephole2.
   27482 
   27483      One common use of this macro is to prevent using of a register that
   27484      is not saved by a prologue in an interrupt handler.
   27485 
   27486      The default version of this hook always returns `true'.
   27487 
   27488  -- Macro: AVOID_CCMODE_COPIES
   27489      Define this macro if the compiler should avoid copies to/from
   27490      `CCmode' registers.  You should only define this macro if support
   27491      for copying to/from `CCmode' is incomplete.
   27492 
   27493 
   27494 File: gccint.info,  Node: Leaf Functions,  Next: Stack Registers,  Prev: Values in Registers,  Up: Registers
   27495 
   27496 17.7.4 Handling Leaf Functions
   27497 ------------------------------
   27498 
   27499 On some machines, a leaf function (i.e., one which makes no calls) can
   27500 run more efficiently if it does not make its own register window.
   27501 Often this means it is required to receive its arguments in the
   27502 registers where they are passed by the caller, instead of the registers
   27503 where they would normally arrive.
   27504 
   27505  The special treatment for leaf functions generally applies only when
   27506 other conditions are met; for example, often they may use only those
   27507 registers for its own variables and temporaries.  We use the term "leaf
   27508 function" to mean a function that is suitable for this special
   27509 handling, so that functions with no calls are not necessarily "leaf
   27510 functions".
   27511 
   27512  GCC assigns register numbers before it knows whether the function is
   27513 suitable for leaf function treatment.  So it needs to renumber the
   27514 registers in order to output a leaf function.  The following macros
   27515 accomplish this.
   27516 
   27517  -- Macro: LEAF_REGISTERS
   27518      Name of a char vector, indexed by hard register number, which
   27519      contains 1 for a register that is allowable in a candidate for leaf
   27520      function treatment.
   27521 
   27522      If leaf function treatment involves renumbering the registers,
   27523      then the registers marked here should be the ones before
   27524      renumbering--those that GCC would ordinarily allocate.  The
   27525      registers which will actually be used in the assembler code, after
   27526      renumbering, should not be marked with 1 in this vector.
   27527 
   27528      Define this macro only if the target machine offers a way to
   27529      optimize the treatment of leaf functions.
   27530 
   27531  -- Macro: LEAF_REG_REMAP (REGNO)
   27532      A C expression whose value is the register number to which REGNO
   27533      should be renumbered, when a function is treated as a leaf
   27534      function.
   27535 
   27536      If REGNO is a register number which should not appear in a leaf
   27537      function before renumbering, then the expression should yield -1,
   27538      which will cause the compiler to abort.
   27539 
   27540      Define this macro only if the target machine offers a way to
   27541      optimize the treatment of leaf functions, and registers need to be
   27542      renumbered to do this.
   27543 
   27544  `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE' must
   27545 usually treat leaf functions specially.  They can test the C variable
   27546 `current_function_is_leaf' which is nonzero for leaf functions.
   27547 `current_function_is_leaf' is set prior to local register allocation
   27548 and is valid for the remaining compiler passes.  They can also test the
   27549 C variable `current_function_uses_only_leaf_regs' which is nonzero for
   27550 leaf functions which only use leaf registers.
   27551 `current_function_uses_only_leaf_regs' is valid after all passes that
   27552 modify the instructions have been run and is only useful if
   27553 `LEAF_REGISTERS' is defined.
   27554 
   27555 
   27556 File: gccint.info,  Node: Stack Registers,  Prev: Leaf Functions,  Up: Registers
   27557 
   27558 17.7.5 Registers That Form a Stack
   27559 ----------------------------------
   27560 
   27561 There are special features to handle computers where some of the
   27562 "registers" form a stack.  Stack registers are normally written by
   27563 pushing onto the stack, and are numbered relative to the top of the
   27564 stack.
   27565 
   27566  Currently, GCC can only handle one group of stack-like registers, and
   27567 they must be consecutively numbered.  Furthermore, the existing support
   27568 for stack-like registers is specific to the 80387 floating point
   27569 coprocessor.  If you have a new architecture that uses stack-like
   27570 registers, you will need to do substantial work on `reg-stack.c' and
   27571 write your machine description to cooperate with it, as well as
   27572 defining these macros.
   27573 
   27574  -- Macro: STACK_REGS
   27575      Define this if the machine has any stack-like registers.
   27576 
   27577  -- Macro: STACK_REG_COVER_CLASS
   27578      This is a cover class containing the stack registers.  Define this
   27579      if the machine has any stack-like registers.
   27580 
   27581  -- Macro: FIRST_STACK_REG
   27582      The number of the first stack-like register.  This one is the top
   27583      of the stack.
   27584 
   27585  -- Macro: LAST_STACK_REG
   27586      The number of the last stack-like register.  This one is the
   27587      bottom of the stack.
   27588 
   27589 
   27590 File: gccint.info,  Node: Register Classes,  Next: Old Constraints,  Prev: Registers,  Up: Target Macros
   27591 
   27592 17.8 Register Classes
   27593 =====================
   27594 
   27595 On many machines, the numbered registers are not all equivalent.  For
   27596 example, certain registers may not be allowed for indexed addressing;
   27597 certain registers may not be allowed in some instructions.  These
   27598 machine restrictions are described to the compiler using "register
   27599 classes".
   27600 
   27601  You define a number of register classes, giving each one a name and
   27602 saying which of the registers belong to it.  Then you can specify
   27603 register classes that are allowed as operands to particular instruction
   27604 patterns.
   27605 
   27606  In general, each register will belong to several classes.  In fact, one
   27607 class must be named `ALL_REGS' and contain all the registers.  Another
   27608 class must be named `NO_REGS' and contain no registers.  Often the
   27609 union of two classes will be another class; however, this is not
   27610 required.
   27611 
   27612  One of the classes must be named `GENERAL_REGS'.  There is nothing
   27613 terribly special about the name, but the operand constraint letters `r'
   27614 and `g' specify this class.  If `GENERAL_REGS' is the same as
   27615 `ALL_REGS', just define it as a macro which expands to `ALL_REGS'.
   27616 
   27617  Order the classes so that if class X is contained in class Y then X
   27618 has a lower class number than Y.
   27619 
   27620  The way classes other than `GENERAL_REGS' are specified in operand
   27621 constraints is through machine-dependent operand constraint letters.
   27622 You can define such letters to correspond to various classes, then use
   27623 them in operand constraints.
   27624 
   27625  You should define a class for the union of two classes whenever some
   27626 instruction allows both classes.  For example, if an instruction allows
   27627 either a floating point (coprocessor) register or a general register
   27628 for a certain operand, you should define a class `FLOAT_OR_GENERAL_REGS'
   27629 which includes both of them.  Otherwise you will get suboptimal code,
   27630 or even internal compiler errors when reload cannot find a register in
   27631 the the class computed via `reg_class_subunion'.
   27632 
   27633  You must also specify certain redundant information about the register
   27634 classes: for each class, which classes contain it and which ones are
   27635 contained in it; for each pair of classes, the largest class contained
   27636 in their union.
   27637 
   27638  When a value occupying several consecutive registers is expected in a
   27639 certain class, all the registers used must belong to that class.
   27640 Therefore, register classes cannot be used to enforce a requirement for
   27641 a register pair to start with an even-numbered register.  The way to
   27642 specify this requirement is with `HARD_REGNO_MODE_OK'.
   27643 
   27644  Register classes used for input-operands of bitwise-and or shift
   27645 instructions have a special requirement: each such class must have, for
   27646 each fixed-point machine mode, a subclass whose registers can transfer
   27647 that mode to or from memory.  For example, on some machines, the
   27648 operations for single-byte values (`QImode') are limited to certain
   27649 registers.  When this is so, each register class that is used in a
   27650 bitwise-and or shift instruction must have a subclass consisting of
   27651 registers from which single-byte values can be loaded or stored.  This
   27652 is so that `PREFERRED_RELOAD_CLASS' can always have a possible value to
   27653 return.
   27654 
   27655  -- Data type: enum reg_class
   27656      An enumerated type that must be defined with all the register
   27657      class names as enumerated values.  `NO_REGS' must be first.
   27658      `ALL_REGS' must be the last register class, followed by one more
   27659      enumerated value, `LIM_REG_CLASSES', which is not a register class
   27660      but rather tells how many classes there are.
   27661 
   27662      Each register class has a number, which is the value of casting
   27663      the class name to type `int'.  The number serves as an index in
   27664      many of the tables described below.
   27665 
   27666  -- Macro: N_REG_CLASSES
   27667      The number of distinct register classes, defined as follows:
   27668 
   27669           #define N_REG_CLASSES (int) LIM_REG_CLASSES
   27670 
   27671  -- Macro: REG_CLASS_NAMES
   27672      An initializer containing the names of the register classes as C
   27673      string constants.  These names are used in writing some of the
   27674      debugging dumps.
   27675 
   27676  -- Macro: REG_CLASS_CONTENTS
   27677      An initializer containing the contents of the register classes, as
   27678      integers which are bit masks.  The Nth integer specifies the
   27679      contents of class N.  The way the integer MASK is interpreted is
   27680      that register R is in the class if `MASK & (1 << R)' is 1.
   27681 
   27682      When the machine has more than 32 registers, an integer does not
   27683      suffice.  Then the integers are replaced by sub-initializers,
   27684      braced groupings containing several integers.  Each
   27685      sub-initializer must be suitable as an initializer for the type
   27686      `HARD_REG_SET' which is defined in `hard-reg-set.h'.  In this
   27687      situation, the first integer in each sub-initializer corresponds to
   27688      registers 0 through 31, the second integer to registers 32 through
   27689      63, and so on.
   27690 
   27691  -- Macro: REGNO_REG_CLASS (REGNO)
   27692      A C expression whose value is a register class containing hard
   27693      register REGNO.  In general there is more than one such class;
   27694      choose a class which is "minimal", meaning that no smaller class
   27695      also contains the register.
   27696 
   27697  -- Macro: BASE_REG_CLASS
   27698      A macro whose definition is the name of the class to which a valid
   27699      base register must belong.  A base register is one used in an
   27700      address which is the register value plus a displacement.
   27701 
   27702  -- Macro: MODE_BASE_REG_CLASS (MODE)
   27703      This is a variation of the `BASE_REG_CLASS' macro which allows the
   27704      selection of a base register in a mode dependent manner.  If MODE
   27705      is VOIDmode then it should return the same value as
   27706      `BASE_REG_CLASS'.
   27707 
   27708  -- Macro: MODE_BASE_REG_REG_CLASS (MODE)
   27709      A C expression whose value is the register class to which a valid
   27710      base register must belong in order to be used in a base plus index
   27711      register address.  You should define this macro if base plus index
   27712      addresses have different requirements than other base register
   27713      uses.
   27714 
   27715  -- Macro: MODE_CODE_BASE_REG_CLASS (MODE, OUTER_CODE, INDEX_CODE)
   27716      A C expression whose value is the register class to which a valid
   27717      base register must belong.  OUTER_CODE and INDEX_CODE define the
   27718      context in which the base register occurs.  OUTER_CODE is the code
   27719      of the immediately enclosing expression (`MEM' for the top level
   27720      of an address, `ADDRESS' for something that occurs in an
   27721      `address_operand').  INDEX_CODE is the code of the corresponding
   27722      index expression if OUTER_CODE is `PLUS'; `SCRATCH' otherwise.
   27723 
   27724  -- Macro: INDEX_REG_CLASS
   27725      A macro whose definition is the name of the class to which a valid
   27726      index register must belong.  An index register is one used in an
   27727      address where its value is either multiplied by a scale factor or
   27728      added to another register (as well as added to a displacement).
   27729 
   27730  -- Macro: REGNO_OK_FOR_BASE_P (NUM)
   27731      A C expression which is nonzero if register number NUM is suitable
   27732      for use as a base register in operand addresses.
   27733 
   27734  -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE)
   27735      A C expression that is just like `REGNO_OK_FOR_BASE_P', except that
   27736      that expression may examine the mode of the memory reference in
   27737      MODE.  You should define this macro if the mode of the memory
   27738      reference affects whether a register may be used as a base
   27739      register.  If you define this macro, the compiler will use it
   27740      instead of `REGNO_OK_FOR_BASE_P'.  The mode may be `VOIDmode' for
   27741      addresses that appear outside a `MEM', i.e., as an
   27742      `address_operand'.
   27743 
   27744  -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE)
   27745      A C expression which is nonzero if register number NUM is suitable
   27746      for use as a base register in base plus index operand addresses,
   27747      accessing memory in mode MODE.  It may be either a suitable hard
   27748      register or a pseudo register that has been allocated such a hard
   27749      register.  You should define this macro if base plus index
   27750      addresses have different requirements than other base register
   27751      uses.
   27752 
   27753      Use of this macro is deprecated; please use the more general
   27754      `REGNO_MODE_CODE_OK_FOR_BASE_P'.
   27755 
   27756  -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, OUTER_CODE,
   27757           INDEX_CODE)
   27758      A C expression that is just like `REGNO_MODE_OK_FOR_BASE_P', except
   27759      that that expression may examine the context in which the register
   27760      appears in the memory reference.  OUTER_CODE is the code of the
   27761      immediately enclosing expression (`MEM' if at the top level of the
   27762      address, `ADDRESS' for something that occurs in an
   27763      `address_operand').  INDEX_CODE is the code of the corresponding
   27764      index expression if OUTER_CODE is `PLUS'; `SCRATCH' otherwise.
   27765      The mode may be `VOIDmode' for addresses that appear outside a
   27766      `MEM', i.e., as an `address_operand'.
   27767 
   27768  -- Macro: REGNO_OK_FOR_INDEX_P (NUM)
   27769      A C expression which is nonzero if register number NUM is suitable
   27770      for use as an index register in operand addresses.  It may be
   27771      either a suitable hard register or a pseudo register that has been
   27772      allocated such a hard register.
   27773 
   27774      The difference between an index register and a base register is
   27775      that the index register may be scaled.  If an address involves the
   27776      sum of two registers, neither one of them scaled, then either one
   27777      may be labeled the "base" and the other the "index"; but whichever
   27778      labeling is used must fit the machine's constraints of which
   27779      registers may serve in each capacity.  The compiler will try both
   27780      labelings, looking for one that is valid, and will reload one or
   27781      both registers only if neither labeling works.
   27782 
   27783  -- Target Hook: reg_class_t TARGET_PREFERRED_RENAME_CLASS (reg_class_t
   27784           RCLASS)
   27785      A target hook that places additional preference on the register
   27786      class to use when it is necessary to rename a register in class
   27787      RCLASS to another class, or perhaps NO_REGS, if no preferred
   27788      register class is found or hook `preferred_rename_class' is not
   27789      implemented. Sometimes returning a more restrictive class makes
   27790      better code.  For example, on ARM, thumb-2 instructions using
   27791      `LO_REGS' may be smaller than instructions using `GENERIC_REGS'.
   27792      By returning `LO_REGS' from `preferred_rename_class', code size
   27793      can be reduced.
   27794 
   27795  -- Target Hook: reg_class_t TARGET_PREFERRED_RELOAD_CLASS (rtx X,
   27796           reg_class_t RCLASS)
   27797      A target hook that places additional restrictions on the register
   27798      class to use when it is necessary to copy value X into a register
   27799      in class RCLASS.  The value is a register class; perhaps RCLASS,
   27800      or perhaps another, smaller class.
   27801 
   27802      The default version of this hook always returns value of `rclass'
   27803      argument.
   27804 
   27805      Sometimes returning a more restrictive class makes better code.
   27806      For example, on the 68000, when X is an integer constant that is
   27807      in range for a `moveq' instruction, the value of this macro is
   27808      always `DATA_REGS' as long as RCLASS includes the data registers.
   27809      Requiring a data register guarantees that a `moveq' will be used.
   27810 
   27811      One case where `TARGET_PREFERRED_RELOAD_CLASS' must not return
   27812      RCLASS is if X is a legitimate constant which cannot be loaded
   27813      into some register class.  By returning `NO_REGS' you can force X
   27814      into a memory location.  For example, rs6000 can load immediate
   27815      values into general-purpose registers, but does not have an
   27816      instruction for loading an immediate value into a floating-point
   27817      register, so `TARGET_PREFERRED_RELOAD_CLASS' returns `NO_REGS' when
   27818      X is a floating-point constant.  If the constant can't be loaded
   27819      into any kind of register, code generation will be better if
   27820      `LEGITIMATE_CONSTANT_P' makes the constant illegitimate instead of
   27821      using `TARGET_PREFERRED_RELOAD_CLASS'.
   27822 
   27823      If an insn has pseudos in it after register allocation, reload
   27824      will go through the alternatives and call repeatedly
   27825      `TARGET_PREFERRED_RELOAD_CLASS' to find the best one.  Returning
   27826      `NO_REGS', in this case, makes reload add a `!' in front of the
   27827      constraint: the x86 back-end uses this feature to discourage usage
   27828      of 387 registers when math is done in the SSE registers (and vice
   27829      versa).
   27830 
   27831  -- Macro: PREFERRED_RELOAD_CLASS (X, CLASS)
   27832      A C expression that places additional restrictions on the register
   27833      class to use when it is necessary to copy value X into a register
   27834      in class CLASS.  The value is a register class; perhaps CLASS, or
   27835      perhaps another, smaller class.  On many machines, the following
   27836      definition is safe:
   27837 
   27838           #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
   27839 
   27840      Sometimes returning a more restrictive class makes better code.
   27841      For example, on the 68000, when X is an integer constant that is
   27842      in range for a `moveq' instruction, the value of this macro is
   27843      always `DATA_REGS' as long as CLASS includes the data registers.
   27844      Requiring a data register guarantees that a `moveq' will be used.
   27845 
   27846      One case where `PREFERRED_RELOAD_CLASS' must not return CLASS is
   27847      if X is a legitimate constant which cannot be loaded into some
   27848      register class.  By returning `NO_REGS' you can force X into a
   27849      memory location.  For example, rs6000 can load immediate values
   27850      into general-purpose registers, but does not have an instruction
   27851      for loading an immediate value into a floating-point register, so
   27852      `PREFERRED_RELOAD_CLASS' returns `NO_REGS' when X is a
   27853      floating-point constant.  If the constant can't be loaded into any
   27854      kind of register, code generation will be better if
   27855      `LEGITIMATE_CONSTANT_P' makes the constant illegitimate instead of
   27856      using `PREFERRED_RELOAD_CLASS'.
   27857 
   27858      If an insn has pseudos in it after register allocation, reload
   27859      will go through the alternatives and call repeatedly
   27860      `PREFERRED_RELOAD_CLASS' to find the best one.  Returning
   27861      `NO_REGS', in this case, makes reload add a `!' in front of the
   27862      constraint: the x86 back-end uses this feature to discourage usage
   27863      of 387 registers when math is done in the SSE registers (and vice
   27864      versa).
   27865 
   27866  -- Macro: PREFERRED_OUTPUT_RELOAD_CLASS (X, CLASS)
   27867      Like `PREFERRED_RELOAD_CLASS', but for output reloads instead of
   27868      input reloads.  If you don't define this macro, the default is to
   27869      use CLASS, unchanged.
   27870 
   27871      You can also use `PREFERRED_OUTPUT_RELOAD_CLASS' to discourage
   27872      reload from using some alternatives, like `PREFERRED_RELOAD_CLASS'.
   27873 
   27874  -- Target Hook: reg_class_t TARGET_PREFERRED_OUTPUT_RELOAD_CLASS (rtx
   27875           X, reg_class_t RCLASS)
   27876      Like `TARGET_PREFERRED_RELOAD_CLASS', but for output reloads
   27877      instead of input reloads.
   27878 
   27879      The default version of this hook always returns value of `rclass'
   27880      argument.
   27881 
   27882      You can also use `TARGET_PREFERRED_OUTPUT_RELOAD_CLASS' to
   27883      discourage reload from using some alternatives, like
   27884      `TARGET_PREFERRED_RELOAD_CLASS'.
   27885 
   27886  -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS)
   27887      A C expression that places additional restrictions on the register
   27888      class to use when it is necessary to be able to hold a value of
   27889      mode MODE in a reload register for which class CLASS would
   27890      ordinarily be used.
   27891 
   27892      Unlike `PREFERRED_RELOAD_CLASS', this macro should be used when
   27893      there are certain modes that simply can't go in certain reload
   27894      classes.
   27895 
   27896      The value is a register class; perhaps CLASS, or perhaps another,
   27897      smaller class.
   27898 
   27899      Don't define this macro unless the target machine has limitations
   27900      which require the macro to do something nontrivial.
   27901 
   27902  -- Target Hook: reg_class_t TARGET_SECONDARY_RELOAD (bool IN_P, rtx X,
   27903           reg_class_t RELOAD_CLASS, enum machine_mode RELOAD_MODE,
   27904           secondary_reload_info *SRI)
   27905      Many machines have some registers that cannot be copied directly
   27906      to or from memory or even from other types of registers.  An
   27907      example is the `MQ' register, which on most machines, can only be
   27908      copied to or from general registers, but not memory.  Below, we
   27909      shall be using the term 'intermediate register' when a move
   27910      operation cannot be performed directly, but has to be done by
   27911      copying the source into the intermediate register first, and then
   27912      copying the intermediate register to the destination.  An
   27913      intermediate register always has the same mode as source and
   27914      destination.  Since it holds the actual value being copied, reload
   27915      might apply optimizations to re-use an intermediate register and
   27916      eliding the copy from the source when it can determine that the
   27917      intermediate register still holds the required value.
   27918 
   27919      Another kind of secondary reload is required on some machines which
   27920      allow copying all registers to and from memory, but require a
   27921      scratch register for stores to some memory locations (e.g., those
   27922      with symbolic address on the RT, and those with certain symbolic
   27923      address on the SPARC when compiling PIC).  Scratch registers need
   27924      not have the same mode as the value being copied, and usually hold
   27925      a different value than that being copied.  Special patterns in the
   27926      md file are needed to describe how the copy is performed with the
   27927      help of the scratch register; these patterns also describe the
   27928      number, register class(es) and mode(s) of the scratch register(s).
   27929 
   27930      In some cases, both an intermediate and a scratch register are
   27931      required.
   27932 
   27933      For input reloads, this target hook is called with nonzero IN_P,
   27934      and X is an rtx that needs to be copied to a register of class
   27935      RELOAD_CLASS in RELOAD_MODE.  For output reloads, this target hook
   27936      is called with zero IN_P, and a register of class RELOAD_CLASS
   27937      needs to be copied to rtx X in RELOAD_MODE.
   27938 
   27939      If copying a register of RELOAD_CLASS from/to X requires an
   27940      intermediate register, the hook `secondary_reload' should return
   27941      the register class required for this intermediate register.  If no
   27942      intermediate register is required, it should return NO_REGS.  If
   27943      more than one intermediate register is required, describe the one
   27944      that is closest in the copy chain to the reload register.
   27945 
   27946      If scratch registers are needed, you also have to describe how to
   27947      perform the copy from/to the reload register to/from this closest
   27948      intermediate register.  Or if no intermediate register is
   27949      required, but still a scratch register is needed, describe the
   27950      copy  from/to the reload register to/from the reload operand X.
   27951 
   27952      You do this by setting `sri->icode' to the instruction code of a
   27953      pattern in the md file which performs the move.  Operands 0 and 1
   27954      are the output and input of this copy, respectively.  Operands
   27955      from operand 2 onward are for scratch operands.  These scratch
   27956      operands must have a mode, and a single-register-class output
   27957      constraint.
   27958 
   27959      When an intermediate register is used, the `secondary_reload' hook
   27960      will be called again to determine how to copy the intermediate
   27961      register to/from the reload operand X, so your hook must also have
   27962      code to handle the register class of the intermediate operand.
   27963 
   27964      X might be a pseudo-register or a `subreg' of a pseudo-register,
   27965      which could either be in a hard register or in memory.  Use
   27966      `true_regnum' to find out; it will return -1 if the pseudo is in
   27967      memory and the hard register number if it is in a register.
   27968 
   27969      Scratch operands in memory (constraint `"=m"' / `"=&m"') are
   27970      currently not supported.  For the time being, you will have to
   27971      continue to use `SECONDARY_MEMORY_NEEDED' for that purpose.
   27972 
   27973      `copy_cost' also uses this target hook to find out how values are
   27974      copied.  If you want it to include some extra cost for the need to
   27975      allocate (a) scratch register(s), set `sri->extra_cost' to the
   27976      additional cost.  Or if two dependent moves are supposed to have a
   27977      lower cost than the sum of the individual moves due to expected
   27978      fortuitous scheduling and/or special forwarding logic, you can set
   27979      `sri->extra_cost' to a negative amount.
   27980 
   27981  -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
   27982  -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X)
   27983  -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X)
   27984      These macros are obsolete, new ports should use the target hook
   27985      `TARGET_SECONDARY_RELOAD' instead.
   27986 
   27987      These are obsolete macros, replaced by the
   27988      `TARGET_SECONDARY_RELOAD' target hook.  Older ports still define
   27989      these macros to indicate to the reload phase that it may need to
   27990      allocate at least one register for a reload in addition to the
   27991      register to contain the data.  Specifically, if copying X to a
   27992      register CLASS in MODE requires an intermediate register, you were
   27993      supposed to define `SECONDARY_INPUT_RELOAD_CLASS' to return the
   27994      largest register class all of whose registers can be used as
   27995      intermediate registers or scratch registers.
   27996 
   27997      If copying a register CLASS in MODE to X requires an intermediate
   27998      or scratch register, `SECONDARY_OUTPUT_RELOAD_CLASS' was supposed
   27999      to be defined be defined to return the largest register class
   28000      required.  If the requirements for input and output reloads were
   28001      the same, the macro `SECONDARY_RELOAD_CLASS' should have been used
   28002      instead of defining both macros identically.
   28003 
   28004      The values returned by these macros are often `GENERAL_REGS'.
   28005      Return `NO_REGS' if no spare register is needed; i.e., if X can be
   28006      directly copied to or from a register of CLASS in MODE without
   28007      requiring a scratch register.  Do not define this macro if it
   28008      would always return `NO_REGS'.
   28009 
   28010      If a scratch register is required (either with or without an
   28011      intermediate register), you were supposed to define patterns for
   28012      `reload_inM' or `reload_outM', as required (*note Standard
   28013      Names::.  These patterns, which were normally implemented with a
   28014      `define_expand', should be similar to the `movM' patterns, except
   28015      that operand 2 is the scratch register.
   28016 
   28017      These patterns need constraints for the reload register and scratch
   28018      register that contain a single register class.  If the original
   28019      reload register (whose class is CLASS) can meet the constraint
   28020      given in the pattern, the value returned by these macros is used
   28021      for the class of the scratch register.  Otherwise, two additional
   28022      reload registers are required.  Their classes are obtained from
   28023      the constraints in the insn pattern.
   28024 
   28025      X might be a pseudo-register or a `subreg' of a pseudo-register,
   28026      which could either be in a hard register or in memory.  Use
   28027      `true_regnum' to find out; it will return -1 if the pseudo is in
   28028      memory and the hard register number if it is in a register.
   28029 
   28030      These macros should not be used in the case where a particular
   28031      class of registers can only be copied to memory and not to another
   28032      class of registers.  In that case, secondary reload registers are
   28033      not needed and would not be helpful.  Instead, a stack location
   28034      must be used to perform the copy and the `movM' pattern should use
   28035      memory as an intermediate storage.  This case often occurs between
   28036      floating-point and general registers.
   28037 
   28038  -- Macro: SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M)
   28039      Certain machines have the property that some registers cannot be
   28040      copied to some other registers without using memory.  Define this
   28041      macro on those machines to be a C expression that is nonzero if
   28042      objects of mode M in registers of CLASS1 can only be copied to
   28043      registers of class CLASS2 by storing a register of CLASS1 into
   28044      memory and loading that memory location into a register of CLASS2.
   28045 
   28046      Do not define this macro if its value would always be zero.
   28047 
   28048  -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE)
   28049      Normally when `SECONDARY_MEMORY_NEEDED' is defined, the compiler
   28050      allocates a stack slot for a memory location needed for register
   28051      copies.  If this macro is defined, the compiler instead uses the
   28052      memory location defined by this macro.
   28053 
   28054      Do not define this macro if you do not define
   28055      `SECONDARY_MEMORY_NEEDED'.
   28056 
   28057  -- Macro: SECONDARY_MEMORY_NEEDED_MODE (MODE)
   28058      When the compiler needs a secondary memory location to copy
   28059      between two registers of mode MODE, it normally allocates
   28060      sufficient memory to hold a quantity of `BITS_PER_WORD' bits and
   28061      performs the store and load operations in a mode that many bits
   28062      wide and whose class is the same as that of MODE.
   28063 
   28064      This is right thing to do on most machines because it ensures that
   28065      all bits of the register are copied and prevents accesses to the
   28066      registers in a narrower mode, which some machines prohibit for
   28067      floating-point registers.
   28068 
   28069      However, this default behavior is not correct on some machines,
   28070      such as the DEC Alpha, that store short integers in floating-point
   28071      registers differently than in integer registers.  On those
   28072      machines, the default widening will not work correctly and you
   28073      must define this macro to suppress that widening in some cases.
   28074      See the file `alpha.h' for details.
   28075 
   28076      Do not define this macro if you do not define
   28077      `SECONDARY_MEMORY_NEEDED' or if widening MODE to a mode that is
   28078      `BITS_PER_WORD' bits wide is correct for your machine.
   28079 
   28080  -- Target Hook: bool TARGET_CLASS_LIKELY_SPILLED_P (reg_class_t RCLASS)
   28081      A target hook which returns `true' if pseudos that have been
   28082      assigned to registers of class RCLASS would likely be spilled
   28083      because registers of RCLASS are needed for spill registers.
   28084 
   28085      The default version of this target hook returns `true' if RCLASS
   28086      has exactly one register and `false' otherwise.  On most machines,
   28087      this default should be used.  Only use this target hook to some
   28088      other expression if pseudos allocated by `local-alloc.c' end up in
   28089      memory because their hard registers were needed for spill
   28090      registers.  If this target hook returns `false' for those classes,
   28091      those pseudos will only be allocated by `global.c', which knows
   28092      how to reallocate the pseudo to another register.  If there would
   28093      not be another register available for reallocation, you should not
   28094      change the implementation of this target hook since the only
   28095      effect of such implementation would be to slow down register
   28096      allocation.
   28097 
   28098  -- Macro: CLASS_MAX_NREGS (CLASS, MODE)
   28099      A C expression for the maximum number of consecutive registers of
   28100      class CLASS needed to hold a value of mode MODE.
   28101 
   28102      This is closely related to the macro `HARD_REGNO_NREGS'.  In fact,
   28103      the value of the macro `CLASS_MAX_NREGS (CLASS, MODE)' should be
   28104      the maximum value of `HARD_REGNO_NREGS (REGNO, MODE)' for all
   28105      REGNO values in the class CLASS.
   28106 
   28107      This macro helps control the handling of multiple-word values in
   28108      the reload pass.
   28109 
   28110  -- Macro: CANNOT_CHANGE_MODE_CLASS (FROM, TO, CLASS)
   28111      If defined, a C expression that returns nonzero for a CLASS for
   28112      which a change from mode FROM to mode TO is invalid.
   28113 
   28114      For the example, loading 32-bit integer or floating-point objects
   28115      into floating-point registers on the Alpha extends them to 64 bits.
   28116      Therefore loading a 64-bit object and then storing it as a 32-bit
   28117      object does not store the low-order 32 bits, as would be the case
   28118      for a normal register.  Therefore, `alpha.h' defines
   28119      `CANNOT_CHANGE_MODE_CLASS' as below:
   28120 
   28121           #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
   28122             (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \
   28123              ? reg_classes_intersect_p (FLOAT_REGS, (CLASS)) : 0)
   28124 
   28125  -- Target Hook: const reg_class_t * TARGET_IRA_COVER_CLASSES (void)
   28126      Return an array of cover classes for the Integrated Register
   28127      Allocator (IRA).  Cover classes are a set of non-intersecting
   28128      register classes covering all hard registers used for register
   28129      allocation purposes.  If a move between two registers in the same
   28130      cover class is possible, it should be cheaper than a load or store
   28131      of the registers.  The array is terminated by a `LIM_REG_CLASSES'
   28132      element.
   28133 
   28134      The order of cover classes in the array is important.  If two
   28135      classes have the same cost of usage for a pseudo, the class
   28136      occurred first in the array is chosen for the pseudo.
   28137 
   28138      This hook is called once at compiler startup, after the
   28139      command-line options have been processed. It is then re-examined
   28140      by every call to `target_reinit'.
   28141 
   28142      The default implementation returns `IRA_COVER_CLASSES', if defined,
   28143      otherwise there is no default implementation.  You must define
   28144      either this macro or `IRA_COVER_CLASSES' in order to use the
   28145      integrated register allocator with Chaitin-Briggs coloring. If the
   28146      macro is not defined, the only available coloring algorithm is
   28147      Chow's priority coloring.
   28148 
   28149      This hook must not be modified from `NULL' to non-`NULL' or vice
   28150      versa by command-line option processing.
   28151 
   28152  -- Macro: IRA_COVER_CLASSES
   28153      See the documentation for `TARGET_IRA_COVER_CLASSES'.
   28154 
   28155 
   28156 File: gccint.info,  Node: Old Constraints,  Next: Stack and Calling,  Prev: Register Classes,  Up: Target Macros
   28157 
   28158 17.9 Obsolete Macros for Defining Constraints
   28159 =============================================
   28160 
   28161 Machine-specific constraints can be defined with these macros instead
   28162 of the machine description constructs described in *note Define
   28163 Constraints::.  This mechanism is obsolete.  New ports should not use
   28164 it; old ports should convert to the new mechanism.
   28165 
   28166  -- Macro: CONSTRAINT_LEN (CHAR, STR)
   28167      For the constraint at the start of STR, which starts with the
   28168      letter C, return the length.  This allows you to have register
   28169      class / constant / extra constraints that are longer than a single
   28170      letter; you don't need to define this macro if you can do with
   28171      single-letter constraints only.  The definition of this macro
   28172      should use DEFAULT_CONSTRAINT_LEN for all the characters that you
   28173      don't want to handle specially.  There are some sanity checks in
   28174      genoutput.c that check the constraint lengths for the md file, so
   28175      you can also use this macro to help you while you are
   28176      transitioning from a byzantine single-letter-constraint scheme:
   28177      when you return a negative length for a constraint you want to
   28178      re-use, genoutput will complain about every instance where it is
   28179      used in the md file.
   28180 
   28181  -- Macro: REG_CLASS_FROM_LETTER (CHAR)
   28182      A C expression which defines the machine-dependent operand
   28183      constraint letters for register classes.  If CHAR is such a
   28184      letter, the value should be the register class corresponding to
   28185      it.  Otherwise, the value should be `NO_REGS'.  The register
   28186      letter `r', corresponding to class `GENERAL_REGS', will not be
   28187      passed to this macro; you do not need to handle it.
   28188 
   28189  -- Macro: REG_CLASS_FROM_CONSTRAINT (CHAR, STR)
   28190      Like `REG_CLASS_FROM_LETTER', but you also get the constraint
   28191      string passed in STR, so that you can use suffixes to distinguish
   28192      between different variants.
   28193 
   28194  -- Macro: CONST_OK_FOR_LETTER_P (VALUE, C)
   28195      A C expression that defines the machine-dependent operand
   28196      constraint letters (`I', `J', `K', ... `P') that specify
   28197      particular ranges of integer values.  If C is one of those
   28198      letters, the expression should check that VALUE, an integer, is in
   28199      the appropriate range and return 1 if so, 0 otherwise.  If C is
   28200      not one of those letters, the value should be 0 regardless of
   28201      VALUE.
   28202 
   28203  -- Macro: CONST_OK_FOR_CONSTRAINT_P (VALUE, C, STR)
   28204      Like `CONST_OK_FOR_LETTER_P', but you also get the constraint
   28205      string passed in STR, so that you can use suffixes to distinguish
   28206      between different variants.
   28207 
   28208  -- Macro: CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C)
   28209      A C expression that defines the machine-dependent operand
   28210      constraint letters that specify particular ranges of
   28211      `const_double' values (`G' or `H').
   28212 
   28213      If C is one of those letters, the expression should check that
   28214      VALUE, an RTX of code `const_double', is in the appropriate range
   28215      and return 1 if so, 0 otherwise.  If C is not one of those
   28216      letters, the value should be 0 regardless of VALUE.
   28217 
   28218      `const_double' is used for all floating-point constants and for
   28219      `DImode' fixed-point constants.  A given letter can accept either
   28220      or both kinds of values.  It can use `GET_MODE' to distinguish
   28221      between these kinds.
   28222 
   28223  -- Macro: CONST_DOUBLE_OK_FOR_CONSTRAINT_P (VALUE, C, STR)
   28224      Like `CONST_DOUBLE_OK_FOR_LETTER_P', but you also get the
   28225      constraint string passed in STR, so that you can use suffixes to
   28226      distinguish between different variants.
   28227 
   28228  -- Macro: EXTRA_CONSTRAINT (VALUE, C)
   28229      A C expression that defines the optional machine-dependent
   28230      constraint letters that can be used to segregate specific types of
   28231      operands, usually memory references, for the target machine.  Any
   28232      letter that is not elsewhere defined and not matched by
   28233      `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' may be used.
   28234      Normally this macro will not be defined.
   28235 
   28236      If it is required for a particular target machine, it should
   28237      return 1 if VALUE corresponds to the operand type represented by
   28238      the constraint letter C.  If C is not defined as an extra
   28239      constraint, the value returned should be 0 regardless of VALUE.
   28240 
   28241      For example, on the ROMP, load instructions cannot have their
   28242      output in r0 if the memory reference contains a symbolic address.
   28243      Constraint letter `Q' is defined as representing a memory address
   28244      that does _not_ contain a symbolic address.  An alternative is
   28245      specified with a `Q' constraint on the input and `r' on the
   28246      output.  The next alternative specifies `m' on the input and a
   28247      register class that does not include r0 on the output.
   28248 
   28249  -- Macro: EXTRA_CONSTRAINT_STR (VALUE, C, STR)
   28250      Like `EXTRA_CONSTRAINT', but you also get the constraint string
   28251      passed in STR, so that you can use suffixes to distinguish between
   28252      different variants.
   28253 
   28254  -- Macro: EXTRA_MEMORY_CONSTRAINT (C, STR)
   28255      A C expression that defines the optional machine-dependent
   28256      constraint letters, amongst those accepted by `EXTRA_CONSTRAINT',
   28257      that should be treated like memory constraints by the reload pass.
   28258 
   28259      It should return 1 if the operand type represented by the
   28260      constraint at the start of STR, the first letter of which is the
   28261      letter C, comprises a subset of all memory references including
   28262      all those whose address is simply a base register.  This allows
   28263      the reload pass to reload an operand, if it does not directly
   28264      correspond to the operand type of C, by copying its address into a
   28265      base register.
   28266 
   28267      For example, on the S/390, some instructions do not accept
   28268      arbitrary memory references, but only those that do not make use
   28269      of an index register.  The constraint letter `Q' is defined via
   28270      `EXTRA_CONSTRAINT' as representing a memory address of this type.
   28271      If the letter `Q' is marked as `EXTRA_MEMORY_CONSTRAINT', a `Q'
   28272      constraint can handle any memory operand, because the reload pass
   28273      knows it can be reloaded by copying the memory address into a base
   28274      register if required.  This is analogous to the way an `o'
   28275      constraint can handle any memory operand.
   28276 
   28277  -- Macro: EXTRA_ADDRESS_CONSTRAINT (C, STR)
   28278      A C expression that defines the optional machine-dependent
   28279      constraint letters, amongst those accepted by `EXTRA_CONSTRAINT' /
   28280      `EXTRA_CONSTRAINT_STR', that should be treated like address
   28281      constraints by the reload pass.
   28282 
   28283      It should return 1 if the operand type represented by the
   28284      constraint at the start of STR, which starts with the letter C,
   28285      comprises a subset of all memory addresses including all those
   28286      that consist of just a base register.  This allows the reload pass
   28287      to reload an operand, if it does not directly correspond to the
   28288      operand type of STR, by copying it into a base register.
   28289 
   28290      Any constraint marked as `EXTRA_ADDRESS_CONSTRAINT' can only be
   28291      used with the `address_operand' predicate.  It is treated
   28292      analogously to the `p' constraint.
   28293 
   28294 
   28295 File: gccint.info,  Node: Stack and Calling,  Next: Varargs,  Prev: Old Constraints,  Up: Target Macros
   28296 
   28297 17.10 Stack Layout and Calling Conventions
   28298 ==========================================
   28299 
   28300 This describes the stack layout and calling conventions.
   28301 
   28302 * Menu:
   28303 
   28304 * Frame Layout::
   28305 * Exception Handling::
   28306 * Stack Checking::
   28307 * Frame Registers::
   28308 * Elimination::
   28309 * Stack Arguments::
   28310 * Register Arguments::
   28311 * Scalar Return::
   28312 * Aggregate Return::
   28313 * Caller Saves::
   28314 * Function Entry::
   28315 * Profiling::
   28316 * Tail Calls::
   28317 * Stack Smashing Protection::
   28318 
   28319 
   28320 File: gccint.info,  Node: Frame Layout,  Next: Exception Handling,  Up: Stack and Calling
   28321 
   28322 17.10.1 Basic Stack Layout
   28323 --------------------------
   28324 
   28325 Here is the basic stack layout.
   28326 
   28327  -- Macro: STACK_GROWS_DOWNWARD
   28328      Define this macro if pushing a word onto the stack moves the stack
   28329      pointer to a smaller address.
   28330 
   28331      When we say, "define this macro if ...", it means that the
   28332      compiler checks this macro only with `#ifdef' so the precise
   28333      definition used does not matter.
   28334 
   28335  -- Macro: STACK_PUSH_CODE
   28336      This macro defines the operation used when something is pushed on
   28337      the stack.  In RTL, a push operation will be `(set (mem
   28338      (STACK_PUSH_CODE (reg sp))) ...)'
   28339 
   28340      The choices are `PRE_DEC', `POST_DEC', `PRE_INC', and `POST_INC'.
   28341      Which of these is correct depends on the stack direction and on
   28342      whether the stack pointer points to the last item on the stack or
   28343      whether it points to the space for the next item on the stack.
   28344 
   28345      The default is `PRE_DEC' when `STACK_GROWS_DOWNWARD' is defined,
   28346      which is almost always right, and `PRE_INC' otherwise, which is
   28347      often wrong.
   28348 
   28349  -- Macro: FRAME_GROWS_DOWNWARD
   28350      Define this macro to nonzero value if the addresses of local
   28351      variable slots are at negative offsets from the frame pointer.
   28352 
   28353  -- Macro: ARGS_GROW_DOWNWARD
   28354      Define this macro if successive arguments to a function occupy
   28355      decreasing addresses on the stack.
   28356 
   28357  -- Macro: STARTING_FRAME_OFFSET
   28358      Offset from the frame pointer to the first local variable slot to
   28359      be allocated.
   28360 
   28361      If `FRAME_GROWS_DOWNWARD', find the next slot's offset by
   28362      subtracting the first slot's length from `STARTING_FRAME_OFFSET'.
   28363      Otherwise, it is found by adding the length of the first slot to
   28364      the value `STARTING_FRAME_OFFSET'.
   28365 
   28366  -- Macro: STACK_ALIGNMENT_NEEDED
   28367      Define to zero to disable final alignment of the stack during
   28368      reload.  The nonzero default for this macro is suitable for most
   28369      ports.
   28370 
   28371      On ports where `STARTING_FRAME_OFFSET' is nonzero or where there
   28372      is a register save block following the local block that doesn't
   28373      require alignment to `STACK_BOUNDARY', it may be beneficial to
   28374      disable stack alignment and do it in the backend.
   28375 
   28376  -- Macro: STACK_POINTER_OFFSET
   28377      Offset from the stack pointer register to the first location at
   28378      which outgoing arguments are placed.  If not specified, the
   28379      default value of zero is used.  This is the proper value for most
   28380      machines.
   28381 
   28382      If `ARGS_GROW_DOWNWARD', this is the offset to the location above
   28383      the first location at which outgoing arguments are placed.
   28384 
   28385  -- Macro: FIRST_PARM_OFFSET (FUNDECL)
   28386      Offset from the argument pointer register to the first argument's
   28387      address.  On some machines it may depend on the data type of the
   28388      function.
   28389 
   28390      If `ARGS_GROW_DOWNWARD', this is the offset to the location above
   28391      the first argument's address.
   28392 
   28393  -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL)
   28394      Offset from the stack pointer register to an item dynamically
   28395      allocated on the stack, e.g., by `alloca'.
   28396 
   28397      The default value for this macro is `STACK_POINTER_OFFSET' plus the
   28398      length of the outgoing arguments.  The default is correct for most
   28399      machines.  See `function.c' for details.
   28400 
   28401  -- Macro: INITIAL_FRAME_ADDRESS_RTX
   28402      A C expression whose value is RTL representing the address of the
   28403      initial stack frame. This address is passed to `RETURN_ADDR_RTX'
   28404      and `DYNAMIC_CHAIN_ADDRESS'.  If you don't define this macro, a
   28405      reasonable default value will be used.  Define this macro in order
   28406      to make frame pointer elimination work in the presence of
   28407      `__builtin_frame_address (count)' and `__builtin_return_address
   28408      (count)' for `count' not equal to zero.
   28409 
   28410  -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR)
   28411      A C expression whose value is RTL representing the address in a
   28412      stack frame where the pointer to the caller's frame is stored.
   28413      Assume that FRAMEADDR is an RTL expression for the address of the
   28414      stack frame itself.
   28415 
   28416      If you don't define this macro, the default is to return the value
   28417      of FRAMEADDR--that is, the stack frame address is also the address
   28418      of the stack word that points to the previous frame.
   28419 
   28420  -- Macro: SETUP_FRAME_ADDRESSES
   28421      If defined, a C expression that produces the machine-specific code
   28422      to setup the stack so that arbitrary frames can be accessed.  For
   28423      example, on the SPARC, we must flush all of the register windows
   28424      to the stack before we can access arbitrary stack frames.  You
   28425      will seldom need to define this macro.
   28426 
   28427  -- Target Hook: rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void)
   28428      This target hook should return an rtx that is used to store the
   28429      address of the current frame into the built in `setjmp' buffer.
   28430      The default value, `virtual_stack_vars_rtx', is correct for most
   28431      machines.  One reason you may need to define this target hook is if
   28432      `hard_frame_pointer_rtx' is the appropriate value on your machine.
   28433 
   28434  -- Macro: FRAME_ADDR_RTX (FRAMEADDR)
   28435      A C expression whose value is RTL representing the value of the
   28436      frame address for the current frame.  FRAMEADDR is the frame
   28437      pointer of the current frame.  This is used for
   28438      __builtin_frame_address.  You need only define this macro if the
   28439      frame address is not the same as the frame pointer.  Most machines
   28440      do not need to define it.
   28441 
   28442  -- Macro: RETURN_ADDR_RTX (COUNT, FRAMEADDR)
   28443      A C expression whose value is RTL representing the value of the
   28444      return address for the frame COUNT steps up from the current
   28445      frame, after the prologue.  FRAMEADDR is the frame pointer of the
   28446      COUNT frame, or the frame pointer of the COUNT - 1 frame if
   28447      `RETURN_ADDR_IN_PREVIOUS_FRAME' is defined.
   28448 
   28449      The value of the expression must always be the correct address when
   28450      COUNT is zero, but may be `NULL_RTX' if there is no way to
   28451      determine the return address of other frames.
   28452 
   28453  -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME
   28454      Define this if the return address of a particular stack frame is
   28455      accessed from the frame pointer of the previous stack frame.
   28456 
   28457  -- Macro: INCOMING_RETURN_ADDR_RTX
   28458      A C expression whose value is RTL representing the location of the
   28459      incoming return address at the beginning of any function, before
   28460      the prologue.  This RTL is either a `REG', indicating that the
   28461      return value is saved in `REG', or a `MEM' representing a location
   28462      in the stack.
   28463 
   28464      You only need to define this macro if you want to support call
   28465      frame debugging information like that provided by DWARF 2.
   28466 
   28467      If this RTL is a `REG', you should also define
   28468      `DWARF_FRAME_RETURN_COLUMN' to `DWARF_FRAME_REGNUM (REGNO)'.
   28469 
   28470  -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN
   28471      A C expression whose value is an integer giving a DWARF 2 column
   28472      number that may be used as an alternative return column.  The
   28473      column must not correspond to any gcc hard register (that is, it
   28474      must not be in the range of `DWARF_FRAME_REGNUM').
   28475 
   28476      This macro can be useful if `DWARF_FRAME_RETURN_COLUMN' is set to a
   28477      general register, but an alternative column needs to be used for
   28478      signal frames.  Some targets have also used different frame return
   28479      columns over time.
   28480 
   28481  -- Macro: DWARF_ZERO_REG
   28482      A C expression whose value is an integer giving a DWARF 2 register
   28483      number that is considered to always have the value zero.  This
   28484      should only be defined if the target has an architected zero
   28485      register, and someone decided it was a good idea to use that
   28486      register number to terminate the stack backtrace.  New ports
   28487      should avoid this.
   28488 
   28489  -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char
   28490           *LABEL, rtx PATTERN, int INDEX)
   28491      This target hook allows the backend to emit frame-related insns
   28492      that contain UNSPECs or UNSPEC_VOLATILEs.  The DWARF 2 call frame
   28493      debugging info engine will invoke it on insns of the form
   28494           (set (reg) (unspec [...] UNSPEC_INDEX))
   28495      and
   28496           (set (reg) (unspec_volatile [...] UNSPECV_INDEX)).
   28497      to let the backend emit the call frame instructions.  LABEL is the
   28498      CFI label attached to the insn, PATTERN is the pattern of the insn
   28499      and INDEX is `UNSPEC_INDEX' or `UNSPECV_INDEX'.
   28500 
   28501  -- Macro: INCOMING_FRAME_SP_OFFSET
   28502      A C expression whose value is an integer giving the offset, in
   28503      bytes, from the value of the stack pointer register to the top of
   28504      the stack frame at the beginning of any function, before the
   28505      prologue.  The top of the frame is defined to be the value of the
   28506      stack pointer in the previous frame, just before the call
   28507      instruction.
   28508 
   28509      You only need to define this macro if you want to support call
   28510      frame debugging information like that provided by DWARF 2.
   28511 
   28512  -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL)
   28513      A C expression whose value is an integer giving the offset, in
   28514      bytes, from the argument pointer to the canonical frame address
   28515      (cfa).  The final value should coincide with that calculated by
   28516      `INCOMING_FRAME_SP_OFFSET'.  Which is unfortunately not usable
   28517      during virtual register instantiation.
   28518 
   28519      The default value for this macro is `FIRST_PARM_OFFSET (fundecl) +
   28520      crtl->args.pretend_args_size', which is correct for most machines;
   28521      in general, the arguments are found immediately before the stack
   28522      frame.  Note that this is not the case on some targets that save
   28523      registers into the caller's frame, such as SPARC and rs6000, and
   28524      so such targets need to define this macro.
   28525 
   28526      You only need to define this macro if the default is incorrect,
   28527      and you want to support call frame debugging information like that
   28528      provided by DWARF 2.
   28529 
   28530  -- Macro: FRAME_POINTER_CFA_OFFSET (FUNDECL)
   28531      If defined, a C expression whose value is an integer giving the
   28532      offset in bytes from the frame pointer to the canonical frame
   28533      address (cfa).  The final value should coincide with that
   28534      calculated by `INCOMING_FRAME_SP_OFFSET'.
   28535 
   28536      Normally the CFA is calculated as an offset from the argument
   28537      pointer, via `ARG_POINTER_CFA_OFFSET', but if the argument pointer
   28538      is variable due to the ABI, this may not be possible.  If this
   28539      macro is defined, it implies that the virtual register
   28540      instantiation should be based on the frame pointer instead of the
   28541      argument pointer.  Only one of `FRAME_POINTER_CFA_OFFSET' and
   28542      `ARG_POINTER_CFA_OFFSET' should be defined.
   28543 
   28544  -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL)
   28545      If defined, a C expression whose value is an integer giving the
   28546      offset in bytes from the canonical frame address (cfa) to the
   28547      frame base used in DWARF 2 debug information.  The default is
   28548      zero.  A different value may reduce the size of debug information
   28549      on some ports.
   28550 
   28551 
   28552 File: gccint.info,  Node: Exception Handling,  Next: Stack Checking,  Prev: Frame Layout,  Up: Stack and Calling
   28553 
   28554 17.10.2 Exception Handling Support
   28555 ----------------------------------
   28556 
   28557  -- Macro: EH_RETURN_DATA_REGNO (N)
   28558      A C expression whose value is the Nth register number used for
   28559      data by exception handlers, or `INVALID_REGNUM' if fewer than N
   28560      registers are usable.
   28561 
   28562      The exception handling library routines communicate with the
   28563      exception handlers via a set of agreed upon registers.  Ideally
   28564      these registers should be call-clobbered; it is possible to use
   28565      call-saved registers, but may negatively impact code size.  The
   28566      target must support at least 2 data registers, but should define 4
   28567      if there are enough free registers.
   28568 
   28569      You must define this macro if you want to support call frame
   28570      exception handling like that provided by DWARF 2.
   28571 
   28572  -- Macro: EH_RETURN_STACKADJ_RTX
   28573      A C expression whose value is RTL representing a location in which
   28574      to store a stack adjustment to be applied before function return.
   28575      This is used to unwind the stack to an exception handler's call
   28576      frame.  It will be assigned zero on code paths that return
   28577      normally.
   28578 
   28579      Typically this is a call-clobbered hard register that is otherwise
   28580      untouched by the epilogue, but could also be a stack slot.
   28581 
   28582      Do not define this macro if the stack pointer is saved and restored
   28583      by the regular prolog and epilog code in the call frame itself; in
   28584      this case, the exception handling library routines will update the
   28585      stack location to be restored in place.  Otherwise, you must define
   28586      this macro if you want to support call frame exception handling
   28587      like that provided by DWARF 2.
   28588 
   28589  -- Macro: EH_RETURN_HANDLER_RTX
   28590      A C expression whose value is RTL representing a location in which
   28591      to store the address of an exception handler to which we should
   28592      return.  It will not be assigned on code paths that return
   28593      normally.
   28594 
   28595      Typically this is the location in the call frame at which the
   28596      normal return address is stored.  For targets that return by
   28597      popping an address off the stack, this might be a memory address
   28598      just below the _target_ call frame rather than inside the current
   28599      call frame.  If defined, `EH_RETURN_STACKADJ_RTX' will have already
   28600      been assigned, so it may be used to calculate the location of the
   28601      target call frame.
   28602 
   28603      Some targets have more complex requirements than storing to an
   28604      address calculable during initial code generation.  In that case
   28605      the `eh_return' instruction pattern should be used instead.
   28606 
   28607      If you want to support call frame exception handling, you must
   28608      define either this macro or the `eh_return' instruction pattern.
   28609 
   28610  -- Macro: RETURN_ADDR_OFFSET
   28611      If defined, an integer-valued C expression for which rtl will be
   28612      generated to add it to the exception handler address before it is
   28613      searched in the exception handling tables, and to subtract it
   28614      again from the address before using it to return to the exception
   28615      handler.
   28616 
   28617  -- Macro: ASM_PREFERRED_EH_DATA_FORMAT (CODE, GLOBAL)
   28618      This macro chooses the encoding of pointers embedded in the
   28619      exception handling sections.  If at all possible, this should be
   28620      defined such that the exception handling section will not require
   28621      dynamic relocations, and so may be read-only.
   28622 
   28623      CODE is 0 for data, 1 for code labels, 2 for function pointers.
   28624      GLOBAL is true if the symbol may be affected by dynamic
   28625      relocations.  The macro should return a combination of the
   28626      `DW_EH_PE_*' defines as found in `dwarf2.h'.
   28627 
   28628      If this macro is not defined, pointers will not be encoded but
   28629      represented directly.
   28630 
   28631  -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE,
   28632           ADDR, DONE)
   28633      This macro allows the target to emit whatever special magic is
   28634      required to represent the encoding chosen by
   28635      `ASM_PREFERRED_EH_DATA_FORMAT'.  Generic code takes care of
   28636      pc-relative and indirect encodings; this must be defined if the
   28637      target uses text-relative or data-relative encodings.
   28638 
   28639      This is a C statement that branches to DONE if the format was
   28640      handled.  ENCODING is the format chosen, SIZE is the number of
   28641      bytes that the format occupies, ADDR is the `SYMBOL_REF' to be
   28642      emitted.
   28643 
   28644  -- Macro: MD_UNWIND_SUPPORT
   28645      A string specifying a file to be #include'd in unwind-dw2.c.  The
   28646      file so included typically defines `MD_FALLBACK_FRAME_STATE_FOR'.
   28647 
   28648  -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS)
   28649      This macro allows the target to add CPU and operating system
   28650      specific code to the call-frame unwinder for use when there is no
   28651      unwind data available.  The most common reason to implement this
   28652      macro is to unwind through signal frames.
   28653 
   28654      This macro is called from `uw_frame_state_for' in `unwind-dw2.c',
   28655      `unwind-dw2-xtensa.c' and `unwind-ia64.c'.  CONTEXT is an
   28656      `_Unwind_Context'; FS is an `_Unwind_FrameState'.  Examine
   28657      `context->ra' for the address of the code being executed and
   28658      `context->cfa' for the stack pointer value.  If the frame can be
   28659      decoded, the register save addresses should be updated in FS and
   28660      the macro should evaluate to `_URC_NO_REASON'.  If the frame
   28661      cannot be decoded, the macro should evaluate to
   28662      `_URC_END_OF_STACK'.
   28663 
   28664      For proper signal handling in Java this macro is accompanied by
   28665      `MAKE_THROW_FRAME', defined in `libjava/include/*-signal.h'
   28666      headers.
   28667 
   28668  -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS)
   28669      This macro allows the target to add operating system specific code
   28670      to the call-frame unwinder to handle the IA-64 `.unwabi' unwinding
   28671      directive, usually used for signal or interrupt frames.
   28672 
   28673      This macro is called from `uw_update_context' in `unwind-ia64.c'.
   28674      CONTEXT is an `_Unwind_Context'; FS is an `_Unwind_FrameState'.
   28675      Examine `fs->unwabi' for the abi and context in the `.unwabi'
   28676      directive.  If the `.unwabi' directive can be handled, the
   28677      register save addresses should be updated in FS.
   28678 
   28679  -- Macro: TARGET_USES_WEAK_UNWIND_INFO
   28680      A C expression that evaluates to true if the target requires unwind
   28681      info to be given comdat linkage.  Define it to be `1' if comdat
   28682      linkage is necessary.  The default is `0'.
   28683 
   28684 
   28685 File: gccint.info,  Node: Stack Checking,  Next: Frame Registers,  Prev: Exception Handling,  Up: Stack and Calling
   28686 
   28687 17.10.3 Specifying How Stack Checking is Done
   28688 ---------------------------------------------
   28689 
   28690 GCC will check that stack references are within the boundaries of the
   28691 stack, if the option `-fstack-check' is specified, in one of three ways:
   28692 
   28693   1. If the value of the `STACK_CHECK_BUILTIN' macro is nonzero, GCC
   28694      will assume that you have arranged for full stack checking to be
   28695      done at appropriate places in the configuration files.  GCC will
   28696      not do other special processing.
   28697 
   28698   2. If `STACK_CHECK_BUILTIN' is zero and the value of the
   28699      `STACK_CHECK_STATIC_BUILTIN' macro is nonzero, GCC will assume
   28700      that you have arranged for static stack checking (checking of the
   28701      static stack frame of functions) to be done at appropriate places
   28702      in the configuration files.  GCC will only emit code to do dynamic
   28703      stack checking (checking on dynamic stack allocations) using the
   28704      third approach below.
   28705 
   28706   3. If neither of the above are true, GCC will generate code to
   28707      periodically "probe" the stack pointer using the values of the
   28708      macros defined below.
   28709 
   28710  If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is
   28711 defined, GCC will change its allocation strategy for large objects if
   28712 the option `-fstack-check' is specified: they will always be allocated
   28713 dynamically if their size exceeds `STACK_CHECK_MAX_VAR_SIZE' bytes.
   28714 
   28715  -- Macro: STACK_CHECK_BUILTIN
   28716      A nonzero value if stack checking is done by the configuration
   28717      files in a machine-dependent manner.  You should define this macro
   28718      if stack checking is required by the ABI of your machine or if you
   28719      would like to do stack checking in some more efficient way than
   28720      the generic approach.  The default value of this macro is zero.
   28721 
   28722  -- Macro: STACK_CHECK_STATIC_BUILTIN
   28723      A nonzero value if static stack checking is done by the
   28724      configuration files in a machine-dependent manner.  You should
   28725      define this macro if you would like to do static stack checking in
   28726      some more efficient way than the generic approach.  The default
   28727      value of this macro is zero.
   28728 
   28729  -- Macro: STACK_CHECK_PROBE_INTERVAL_EXP
   28730      An integer specifying the interval at which GCC must generate
   28731      stack probe instructions, defined as 2 raised to this integer.
   28732      You will normally define this macro so that the interval be no
   28733      larger than the size of the "guard pages" at the end of a stack
   28734      area.  The default value of 12 (4096-byte interval) is suitable
   28735      for most systems.
   28736 
   28737  -- Macro: STACK_CHECK_MOVING_SP
   28738      An integer which is nonzero if GCC should move the stack pointer
   28739      page by page when doing probes.  This can be necessary on systems
   28740      where the stack pointer contains the bottom address of the memory
   28741      area accessible to the executing thread at any point in time.  In
   28742      this situation an alternate signal stack is required in order to
   28743      be able to recover from a stack overflow.  The default value of
   28744      this macro is zero.
   28745 
   28746  -- Macro: STACK_CHECK_PROTECT
   28747      The number of bytes of stack needed to recover from a stack
   28748      overflow, for languages where such a recovery is supported.  The
   28749      default value of 75 words with the `setjmp'/`longjmp'-based
   28750      exception handling mechanism and 8192 bytes with other exception
   28751      handling mechanisms should be adequate for most machines.
   28752 
   28753  The following macros are relevant only if neither STACK_CHECK_BUILTIN
   28754 nor STACK_CHECK_STATIC_BUILTIN is defined; you can omit them altogether
   28755 in the opposite case.
   28756 
   28757  -- Macro: STACK_CHECK_MAX_FRAME_SIZE
   28758      The maximum size of a stack frame, in bytes.  GCC will generate
   28759      probe instructions in non-leaf functions to ensure at least this
   28760      many bytes of stack are available.  If a stack frame is larger
   28761      than this size, stack checking will not be reliable and GCC will
   28762      issue a warning.  The default is chosen so that GCC only generates
   28763      one instruction on most systems.  You should normally not change
   28764      the default value of this macro.
   28765 
   28766  -- Macro: STACK_CHECK_FIXED_FRAME_SIZE
   28767      GCC uses this value to generate the above warning message.  It
   28768      represents the amount of fixed frame used by a function, not
   28769      including space for any callee-saved registers, temporaries and
   28770      user variables.  You need only specify an upper bound for this
   28771      amount and will normally use the default of four words.
   28772 
   28773  -- Macro: STACK_CHECK_MAX_VAR_SIZE
   28774      The maximum size, in bytes, of an object that GCC will place in the
   28775      fixed area of the stack frame when the user specifies
   28776      `-fstack-check'.  GCC computed the default from the values of the
   28777      above macros and you will normally not need to override that
   28778      default.
   28779 
   28780 
   28781 File: gccint.info,  Node: Frame Registers,  Next: Elimination,  Prev: Stack Checking,  Up: Stack and Calling
   28782 
   28783 17.10.4 Registers That Address the Stack Frame
   28784 ----------------------------------------------
   28785 
   28786 This discusses registers that address the stack frame.
   28787 
   28788  -- Macro: STACK_POINTER_REGNUM
   28789      The register number of the stack pointer register, which must also
   28790      be a fixed register according to `FIXED_REGISTERS'.  On most
   28791      machines, the hardware determines which register this is.
   28792 
   28793  -- Macro: FRAME_POINTER_REGNUM
   28794      The register number of the frame pointer register, which is used to
   28795      access automatic variables in the stack frame.  On some machines,
   28796      the hardware determines which register this is.  On other
   28797      machines, you can choose any register you wish for this purpose.
   28798 
   28799  -- Macro: HARD_FRAME_POINTER_REGNUM
   28800      On some machines the offset between the frame pointer and starting
   28801      offset of the automatic variables is not known until after register
   28802      allocation has been done (for example, because the saved registers
   28803      are between these two locations).  On those machines, define
   28804      `FRAME_POINTER_REGNUM' the number of a special, fixed register to
   28805      be used internally until the offset is known, and define
   28806      `HARD_FRAME_POINTER_REGNUM' to be the actual hard register number
   28807      used for the frame pointer.
   28808 
   28809      You should define this macro only in the very rare circumstances
   28810      when it is not possible to calculate the offset between the frame
   28811      pointer and the automatic variables until after register
   28812      allocation has been completed.  When this macro is defined, you
   28813      must also indicate in your definition of `ELIMINABLE_REGS' how to
   28814      eliminate `FRAME_POINTER_REGNUM' into either
   28815      `HARD_FRAME_POINTER_REGNUM' or `STACK_POINTER_REGNUM'.
   28816 
   28817      Do not define this macro if it would be the same as
   28818      `FRAME_POINTER_REGNUM'.
   28819 
   28820  -- Macro: ARG_POINTER_REGNUM
   28821      The register number of the arg pointer register, which is used to
   28822      access the function's argument list.  On some machines, this is
   28823      the same as the frame pointer register.  On some machines, the
   28824      hardware determines which register this is.  On other machines,
   28825      you can choose any register you wish for this purpose.  If this is
   28826      not the same register as the frame pointer register, then you must
   28827      mark it as a fixed register according to `FIXED_REGISTERS', or
   28828      arrange to be able to eliminate it (*note Elimination::).
   28829 
   28830  -- Macro: HARD_FRAME_POINTER_IS_FRAME_POINTER
   28831      Define this to a preprocessor constant that is nonzero if
   28832      `hard_frame_pointer_rtx' and `frame_pointer_rtx' should be the
   28833      same.  The default definition is `(HARD_FRAME_POINTER_REGNUM ==
   28834      FRAME_POINTER_REGNUM)'; you only need to define this macro if that
   28835      definition is not suitable for use in preprocessor conditionals.
   28836 
   28837  -- Macro: HARD_FRAME_POINTER_IS_ARG_POINTER
   28838      Define this to a preprocessor constant that is nonzero if
   28839      `hard_frame_pointer_rtx' and `arg_pointer_rtx' should be the same.
   28840      The default definition is `(HARD_FRAME_POINTER_REGNUM ==
   28841      ARG_POINTER_REGNUM)'; you only need to define this macro if that
   28842      definition is not suitable for use in preprocessor conditionals.
   28843 
   28844  -- Macro: RETURN_ADDRESS_POINTER_REGNUM
   28845      The register number of the return address pointer register, which
   28846      is used to access the current function's return address from the
   28847      stack.  On some machines, the return address is not at a fixed
   28848      offset from the frame pointer or stack pointer or argument
   28849      pointer.  This register can be defined to point to the return
   28850      address on the stack, and then be converted by `ELIMINABLE_REGS'
   28851      into either the frame pointer or stack pointer.
   28852 
   28853      Do not define this macro unless there is no other way to get the
   28854      return address from the stack.
   28855 
   28856  -- Macro: STATIC_CHAIN_REGNUM
   28857  -- Macro: STATIC_CHAIN_INCOMING_REGNUM
   28858      Register numbers used for passing a function's static chain
   28859      pointer.  If register windows are used, the register number as
   28860      seen by the called function is `STATIC_CHAIN_INCOMING_REGNUM',
   28861      while the register number as seen by the calling function is
   28862      `STATIC_CHAIN_REGNUM'.  If these registers are the same,
   28863      `STATIC_CHAIN_INCOMING_REGNUM' need not be defined.
   28864 
   28865      The static chain register need not be a fixed register.
   28866 
   28867      If the static chain is passed in memory, these macros should not be
   28868      defined; instead, the `TARGET_STATIC_CHAIN' hook should be used.
   28869 
   28870  -- Target Hook: rtx TARGET_STATIC_CHAIN (const_tree FNDECL, bool
   28871           INCOMING_P)
   28872      This hook replaces the use of `STATIC_CHAIN_REGNUM' et al for
   28873      targets that may use different static chain locations for different
   28874      nested functions.  This may be required if the target has function
   28875      attributes that affect the calling conventions of the function and
   28876      those calling conventions use different static chain locations.
   28877 
   28878      The default version of this hook uses `STATIC_CHAIN_REGNUM' et al.
   28879 
   28880      If the static chain is passed in memory, this hook should be used
   28881      to provide rtx giving `mem' expressions that denote where they are
   28882      stored.  Often the `mem' expression as seen by the caller will be
   28883      at an offset from the stack pointer and the `mem' expression as
   28884      seen by the callee will be at an offset from the frame pointer.  The
   28885      variables `stack_pointer_rtx', `frame_pointer_rtx', and
   28886      `arg_pointer_rtx' will have been initialized and should be used to
   28887      refer to those items.
   28888 
   28889  -- Macro: DWARF_FRAME_REGISTERS
   28890      This macro specifies the maximum number of hard registers that can
   28891      be saved in a call frame.  This is used to size data structures
   28892      used in DWARF2 exception handling.
   28893 
   28894      Prior to GCC 3.0, this macro was needed in order to establish a
   28895      stable exception handling ABI in the face of adding new hard
   28896      registers for ISA extensions.  In GCC 3.0 and later, the EH ABI is
   28897      insulated from changes in the number of hard registers.
   28898      Nevertheless, this macro can still be used to reduce the runtime
   28899      memory requirements of the exception handling routines, which can
   28900      be substantial if the ISA contains a lot of registers that are not
   28901      call-saved.
   28902 
   28903      If this macro is not defined, it defaults to
   28904      `FIRST_PSEUDO_REGISTER'.
   28905 
   28906  -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS
   28907      This macro is similar to `DWARF_FRAME_REGISTERS', but is provided
   28908      for backward compatibility in pre GCC 3.0 compiled code.
   28909 
   28910      If this macro is not defined, it defaults to
   28911      `DWARF_FRAME_REGISTERS'.
   28912 
   28913  -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO)
   28914      Define this macro if the target's representation for dwarf
   28915      registers is different than the internal representation for unwind
   28916      column.  Given a dwarf register, this macro should return the
   28917      internal unwind column number to use instead.
   28918 
   28919      See the PowerPC's SPE target for an example.
   28920 
   28921  -- Macro: DWARF_FRAME_REGNUM (REGNO)
   28922      Define this macro if the target's representation for dwarf
   28923      registers used in .eh_frame or .debug_frame is different from that
   28924      used in other debug info sections.  Given a GCC hard register
   28925      number, this macro should return the .eh_frame register number.
   28926      The default is `DBX_REGISTER_NUMBER (REGNO)'.
   28927 
   28928 
   28929  -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH)
   28930      Define this macro to map register numbers held in the call frame
   28931      info that GCC has collected using `DWARF_FRAME_REGNUM' to those
   28932      that should be output in .debug_frame (`FOR_EH' is zero) and
   28933      .eh_frame (`FOR_EH' is nonzero).  The default is to return `REGNO'.
   28934 
   28935 
   28936 
   28937 File: gccint.info,  Node: Elimination,  Next: Stack Arguments,  Prev: Frame Registers,  Up: Stack and Calling
   28938 
   28939 17.10.5 Eliminating Frame Pointer and Arg Pointer
   28940 -------------------------------------------------
   28941 
   28942 This is about eliminating the frame pointer and arg pointer.
   28943 
   28944  -- Target Hook: bool TARGET_FRAME_POINTER_REQUIRED (void)
   28945      This target hook should return `true' if a function must have and
   28946      use a frame pointer.  This target hook is called in the reload
   28947      pass.  If its return value is `true' the function will have a
   28948      frame pointer.
   28949 
   28950      This target hook can in principle examine the current function and
   28951      decide according to the facts, but on most machines the constant
   28952      `false' or the constant `true' suffices.  Use `false' when the
   28953      machine allows code to be generated with no frame pointer, and
   28954      doing so saves some time or space.  Use `true' when there is no
   28955      possible advantage to avoiding a frame pointer.
   28956 
   28957      In certain cases, the compiler does not know how to produce valid
   28958      code without a frame pointer.  The compiler recognizes those cases
   28959      and automatically gives the function a frame pointer regardless of
   28960      what `TARGET_FRAME_POINTER_REQUIRED' returns.  You don't need to
   28961      worry about them.
   28962 
   28963      In a function that does not require a frame pointer, the frame
   28964      pointer register can be allocated for ordinary usage, unless you
   28965      mark it as a fixed register.  See `FIXED_REGISTERS' for more
   28966      information.
   28967 
   28968      Default return value is `false'.
   28969 
   28970  -- Macro: INITIAL_FRAME_POINTER_OFFSET (DEPTH-VAR)
   28971      A C statement to store in the variable DEPTH-VAR the difference
   28972      between the frame pointer and the stack pointer values immediately
   28973      after the function prologue.  The value would be computed from
   28974      information such as the result of `get_frame_size ()' and the
   28975      tables of registers `regs_ever_live' and `call_used_regs'.
   28976 
   28977      If `ELIMINABLE_REGS' is defined, this macro will be not be used and
   28978      need not be defined.  Otherwise, it must be defined even if
   28979      `TARGET_FRAME_POINTER_REQUIRED' always returns true; in that case,
   28980      you may set DEPTH-VAR to anything.
   28981 
   28982  -- Macro: ELIMINABLE_REGS
   28983      If defined, this macro specifies a table of register pairs used to
   28984      eliminate unneeded registers that point into the stack frame.  If
   28985      it is not defined, the only elimination attempted by the compiler
   28986      is to replace references to the frame pointer with references to
   28987      the stack pointer.
   28988 
   28989      The definition of this macro is a list of structure
   28990      initializations, each of which specifies an original and
   28991      replacement register.
   28992 
   28993      On some machines, the position of the argument pointer is not
   28994      known until the compilation is completed.  In such a case, a
   28995      separate hard register must be used for the argument pointer.
   28996      This register can be eliminated by replacing it with either the
   28997      frame pointer or the argument pointer, depending on whether or not
   28998      the frame pointer has been eliminated.
   28999 
   29000      In this case, you might specify:
   29001           #define ELIMINABLE_REGS  \
   29002           {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
   29003            {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
   29004            {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
   29005 
   29006      Note that the elimination of the argument pointer with the stack
   29007      pointer is specified first since that is the preferred elimination.
   29008 
   29009  -- Target Hook: bool TARGET_CAN_ELIMINATE (const int FROM_REG, const
   29010           int TO_REG)
   29011      This target hook should returns `true' if the compiler is allowed
   29012      to try to replace register number FROM_REG with register number
   29013      TO_REG.  This target hook need only be defined if `ELIMINABLE_REGS'
   29014      is defined, and will usually be `true', since most of the cases
   29015      preventing register elimination are things that the compiler
   29016      already knows about.
   29017 
   29018      Default return value is `true'.
   29019 
   29020  -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR)
   29021      This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'.  It
   29022      specifies the initial difference between the specified pair of
   29023      registers.  This macro must be defined if `ELIMINABLE_REGS' is
   29024      defined.
   29025 
   29026 
   29027 File: gccint.info,  Node: Stack Arguments,  Next: Register Arguments,  Prev: Elimination,  Up: Stack and Calling
   29028 
   29029 17.10.6 Passing Function Arguments on the Stack
   29030 -----------------------------------------------
   29031 
   29032 The macros in this section control how arguments are passed on the
   29033 stack.  See the following section for other macros that control passing
   29034 certain arguments in registers.
   29035 
   29036  -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (const_tree FNTYPE)
   29037      This target hook returns `true' if an argument declared in a
   29038      prototype as an integral type smaller than `int' should actually be
   29039      passed as an `int'.  In addition to avoiding errors in certain
   29040      cases of mismatch, it also makes for better code on certain
   29041      machines.  The default is to not promote prototypes.
   29042 
   29043  -- Macro: PUSH_ARGS
   29044      A C expression.  If nonzero, push insns will be used to pass
   29045      outgoing arguments.  If the target machine does not have a push
   29046      instruction, set it to zero.  That directs GCC to use an alternate
   29047      strategy: to allocate the entire argument block and then store the
   29048      arguments into it.  When `PUSH_ARGS' is nonzero, `PUSH_ROUNDING'
   29049      must be defined too.
   29050 
   29051  -- Macro: PUSH_ARGS_REVERSED
   29052      A C expression.  If nonzero, function arguments will be evaluated
   29053      from last to first, rather than from first to last.  If this macro
   29054      is not defined, it defaults to `PUSH_ARGS' on targets where the
   29055      stack and args grow in opposite directions, and 0 otherwise.
   29056 
   29057  -- Macro: PUSH_ROUNDING (NPUSHED)
   29058      A C expression that is the number of bytes actually pushed onto the
   29059      stack when an instruction attempts to push NPUSHED bytes.
   29060 
   29061      On some machines, the definition
   29062 
   29063           #define PUSH_ROUNDING(BYTES) (BYTES)
   29064 
   29065      will suffice.  But on other machines, instructions that appear to
   29066      push one byte actually push two bytes in an attempt to maintain
   29067      alignment.  Then the definition should be
   29068 
   29069           #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
   29070 
   29071      If the value of this macro has a type, it should be an unsigned
   29072      type.
   29073 
   29074  -- Macro: ACCUMULATE_OUTGOING_ARGS
   29075      A C expression.  If nonzero, the maximum amount of space required
   29076      for outgoing arguments will be computed and placed into the
   29077      variable `current_function_outgoing_args_size'.  No space will be
   29078      pushed onto the stack for each call; instead, the function
   29079      prologue should increase the stack frame size by this amount.
   29080 
   29081      Setting both `PUSH_ARGS' and `ACCUMULATE_OUTGOING_ARGS' is not
   29082      proper.
   29083 
   29084  -- Macro: REG_PARM_STACK_SPACE (FNDECL)
   29085      Define this macro if functions should assume that stack space has
   29086      been allocated for arguments even when their values are passed in
   29087      registers.
   29088 
   29089      The value of this macro is the size, in bytes, of the area
   29090      reserved for arguments passed in registers for the function
   29091      represented by FNDECL, which can be zero if GCC is calling a
   29092      library function.  The argument FNDECL can be the FUNCTION_DECL,
   29093      or the type itself of the function.
   29094 
   29095      This space can be allocated by the caller, or be a part of the
   29096      machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' says
   29097      which.
   29098 
   29099  -- Macro: OUTGOING_REG_PARM_STACK_SPACE (FNTYPE)
   29100      Define this to a nonzero value if it is the responsibility of the
   29101      caller to allocate the area reserved for arguments passed in
   29102      registers when calling a function of FNTYPE.  FNTYPE may be NULL
   29103      if the function called is a library function.
   29104 
   29105      If `ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls
   29106      whether the space for these arguments counts in the value of
   29107      `current_function_outgoing_args_size'.
   29108 
   29109  -- Macro: STACK_PARMS_IN_REG_PARM_AREA
   29110      Define this macro if `REG_PARM_STACK_SPACE' is defined, but the
   29111      stack parameters don't skip the area specified by it.
   29112 
   29113      Normally, when a parameter is not passed in registers, it is
   29114      placed on the stack beyond the `REG_PARM_STACK_SPACE' area.
   29115      Defining this macro suppresses this behavior and causes the
   29116      parameter to be passed on the stack in its natural location.
   29117 
   29118  -- Target Hook: int TARGET_RETURN_POPS_ARGS (tree FUNDECL, tree
   29119           FUNTYPE, int SIZE)
   29120      This target hook returns the number of bytes of its own arguments
   29121      that a function pops on returning, or 0 if the function pops no
   29122      arguments and the caller must therefore pop them all after the
   29123      function returns.
   29124 
   29125      FUNDECL is a C variable whose value is a tree node that describes
   29126      the function in question.  Normally it is a node of type
   29127      `FUNCTION_DECL' that describes the declaration of the function.
   29128      From this you can obtain the `DECL_ATTRIBUTES' of the function.
   29129 
   29130      FUNTYPE is a C variable whose value is a tree node that describes
   29131      the function in question.  Normally it is a node of type
   29132      `FUNCTION_TYPE' that describes the data type of the function.
   29133      From this it is possible to obtain the data types of the value and
   29134      arguments (if known).
   29135 
   29136      When a call to a library function is being considered, FUNDECL
   29137      will contain an identifier node for the library function.  Thus, if
   29138      you need to distinguish among various library functions, you can
   29139      do so by their names.  Note that "library function" in this
   29140      context means a function used to perform arithmetic, whose name is
   29141      known specially in the compiler and was not mentioned in the C
   29142      code being compiled.
   29143 
   29144      SIZE is the number of bytes of arguments passed on the stack.  If
   29145      a variable number of bytes is passed, it is zero, and argument
   29146      popping will always be the responsibility of the calling function.
   29147 
   29148      On the VAX, all functions always pop their arguments, so the
   29149      definition of this macro is SIZE.  On the 68000, using the standard
   29150      calling convention, no functions pop their arguments, so the value
   29151      of the macro is always 0 in this case.  But an alternative calling
   29152      convention is available in which functions that take a fixed
   29153      number of arguments pop them but other functions (such as
   29154      `printf') pop nothing (the caller pops all).  When this convention
   29155      is in use, FUNTYPE is examined to determine whether a function
   29156      takes a fixed number of arguments.
   29157 
   29158  -- Macro: CALL_POPS_ARGS (CUM)
   29159      A C expression that should indicate the number of bytes a call
   29160      sequence pops off the stack.  It is added to the value of
   29161      `RETURN_POPS_ARGS' when compiling a function call.
   29162 
   29163      CUM is the variable in which all arguments to the called function
   29164      have been accumulated.
   29165 
   29166      On certain architectures, such as the SH5, a call trampoline is
   29167      used that pops certain registers off the stack, depending on the
   29168      arguments that have been passed to the function.  Since this is a
   29169      property of the call site, not of the called function,
   29170      `RETURN_POPS_ARGS' is not appropriate.
   29171 
   29172 
   29173 File: gccint.info,  Node: Register Arguments,  Next: Scalar Return,  Prev: Stack Arguments,  Up: Stack and Calling
   29174 
   29175 17.10.7 Passing Arguments in Registers
   29176 --------------------------------------
   29177 
   29178 This section describes the macros which let you control how various
   29179 types of arguments are passed in registers or how they are arranged in
   29180 the stack.
   29181 
   29182  -- Macro: FUNCTION_ARG (CUM, MODE, TYPE, NAMED)
   29183      A C expression that controls whether a function argument is passed
   29184      in a register, and which register.
   29185 
   29186      The arguments are CUM, which summarizes all the previous
   29187      arguments; MODE, the machine mode of the argument; TYPE, the data
   29188      type of the argument as a tree node or 0 if that is not known
   29189      (which happens for C support library functions); and NAMED, which
   29190      is 1 for an ordinary argument and 0 for nameless arguments that
   29191      correspond to `...' in the called function's prototype.  TYPE can
   29192      be an incomplete type if a syntax error has previously occurred.
   29193 
   29194      The value of the expression is usually either a `reg' RTX for the
   29195      hard register in which to pass the argument, or zero to pass the
   29196      argument on the stack.
   29197 
   29198      For machines like the VAX and 68000, where normally all arguments
   29199      are pushed, zero suffices as a definition.
   29200 
   29201      The value of the expression can also be a `parallel' RTX.  This is
   29202      used when an argument is passed in multiple locations.  The mode
   29203      of the `parallel' should be the mode of the entire argument.  The
   29204      `parallel' holds any number of `expr_list' pairs; each one
   29205      describes where part of the argument is passed.  In each
   29206      `expr_list' the first operand must be a `reg' RTX for the hard
   29207      register in which to pass this part of the argument, and the mode
   29208      of the register RTX indicates how large this part of the argument
   29209      is.  The second operand of the `expr_list' is a `const_int' which
   29210      gives the offset in bytes into the entire argument of where this
   29211      part starts.  As a special exception the first `expr_list' in the
   29212      `parallel' RTX may have a first operand of zero.  This indicates
   29213      that the entire argument is also stored on the stack.
   29214 
   29215      The last time this macro is called, it is called with `MODE ==
   29216      VOIDmode', and its result is passed to the `call' or `call_value'
   29217      pattern as operands 2 and 3 respectively.
   29218 
   29219      The usual way to make the ISO library `stdarg.h' work on a machine
   29220      where some arguments are usually passed in registers, is to cause
   29221      nameless arguments to be passed on the stack instead.  This is done
   29222      by making `FUNCTION_ARG' return 0 whenever NAMED is 0.
   29223 
   29224      You may use the hook `targetm.calls.must_pass_in_stack' in the
   29225      definition of this macro to determine if this argument is of a
   29226      type that must be passed in the stack.  If `REG_PARM_STACK_SPACE'
   29227      is not defined and `FUNCTION_ARG' returns nonzero for such an
   29228      argument, the compiler will abort.  If `REG_PARM_STACK_SPACE' is
   29229      defined, the argument will be computed in the stack and then
   29230      loaded into a register.
   29231 
   29232  -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (enum machine_mode
   29233           MODE, const_tree TYPE)
   29234      This target hook should return `true' if we should not pass TYPE
   29235      solely in registers.  The file `expr.h' defines a definition that
   29236      is usually appropriate, refer to `expr.h' for additional
   29237      documentation.
   29238 
   29239  -- Macro: FUNCTION_INCOMING_ARG (CUM, MODE, TYPE, NAMED)
   29240      Define this macro if the target machine has "register windows", so
   29241      that the register in which a function sees an arguments is not
   29242      necessarily the same as the one in which the caller passed the
   29243      argument.
   29244 
   29245      For such machines, `FUNCTION_ARG' computes the register in which
   29246      the caller passes the value, and `FUNCTION_INCOMING_ARG' should be
   29247      defined in a similar fashion to tell the function being called
   29248      where the arguments will arrive.
   29249 
   29250      If `FUNCTION_INCOMING_ARG' is not defined, `FUNCTION_ARG' serves
   29251      both purposes.
   29252 
   29253  -- Target Hook: int TARGET_ARG_PARTIAL_BYTES (CUMULATIVE_ARGS *CUM,
   29254           enum machine_mode MODE, tree TYPE, bool NAMED)
   29255      This target hook returns the number of bytes at the beginning of an
   29256      argument that must be put in registers.  The value must be zero for
   29257      arguments that are passed entirely in registers or that are
   29258      entirely pushed on the stack.
   29259 
   29260      On some machines, certain arguments must be passed partially in
   29261      registers and partially in memory.  On these machines, typically
   29262      the first few words of arguments are passed in registers, and the
   29263      rest on the stack.  If a multi-word argument (a `double' or a
   29264      structure) crosses that boundary, its first few words must be
   29265      passed in registers and the rest must be pushed.  This macro tells
   29266      the compiler when this occurs, and how many bytes should go in
   29267      registers.
   29268 
   29269      `FUNCTION_ARG' for these arguments should return the first
   29270      register to be used by the caller for this argument; likewise
   29271      `FUNCTION_INCOMING_ARG', for the called function.
   29272 
   29273  -- Target Hook: bool TARGET_PASS_BY_REFERENCE (CUMULATIVE_ARGS *CUM,
   29274           enum machine_mode MODE, const_tree TYPE, bool NAMED)
   29275      This target hook should return `true' if an argument at the
   29276      position indicated by CUM should be passed by reference.  This
   29277      predicate is queried after target independent reasons for being
   29278      passed by reference, such as `TREE_ADDRESSABLE (type)'.
   29279 
   29280      If the hook returns true, a copy of that argument is made in
   29281      memory and a pointer to the argument is passed instead of the
   29282      argument itself.  The pointer is passed in whatever way is
   29283      appropriate for passing a pointer to that type.
   29284 
   29285  -- Target Hook: bool TARGET_CALLEE_COPIES (CUMULATIVE_ARGS *CUM, enum
   29286           machine_mode MODE, const_tree TYPE, bool NAMED)
   29287      The function argument described by the parameters to this hook is
   29288      known to be passed by reference.  The hook should return true if
   29289      the function argument should be copied by the callee instead of
   29290      copied by the caller.
   29291 
   29292      For any argument for which the hook returns true, if it can be
   29293      determined that the argument is not modified, then a copy need not
   29294      be generated.
   29295 
   29296      The default version of this hook always returns false.
   29297 
   29298  -- Macro: CUMULATIVE_ARGS
   29299      A C type for declaring a variable that is used as the first
   29300      argument of `FUNCTION_ARG' and other related values.  For some
   29301      target machines, the type `int' suffices and can hold the number
   29302      of bytes of argument so far.
   29303 
   29304      There is no need to record in `CUMULATIVE_ARGS' anything about the
   29305      arguments that have been passed on the stack.  The compiler has
   29306      other variables to keep track of that.  For target machines on
   29307      which all arguments are passed on the stack, there is no need to
   29308      store anything in `CUMULATIVE_ARGS'; however, the data structure
   29309      must exist and should not be empty, so use `int'.
   29310 
   29311  -- Macro: OVERRIDE_ABI_FORMAT (FNDECL)
   29312      If defined, this macro is called before generating any code for a
   29313      function, but after the CFUN descriptor for the function has been
   29314      created.  The back end may use this macro to update CFUN to
   29315      reflect an ABI other than that which would normally be used by
   29316      default.  If the compiler is generating code for a
   29317      compiler-generated function, FNDECL may be `NULL'.
   29318 
   29319  -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL,
   29320           N_NAMED_ARGS)
   29321      A C statement (sans semicolon) for initializing the variable CUM
   29322      for the state at the beginning of the argument list.  The variable
   29323      has type `CUMULATIVE_ARGS'.  The value of FNTYPE is the tree node
   29324      for the data type of the function which will receive the args, or
   29325      0 if the args are to a compiler support library function.  For
   29326      direct calls that are not libcalls, FNDECL contain the declaration
   29327      node of the function.  FNDECL is also set when
   29328      `INIT_CUMULATIVE_ARGS' is used to find arguments for the function
   29329      being compiled.  N_NAMED_ARGS is set to the number of named
   29330      arguments, including a structure return address if it is passed as
   29331      a parameter, when making a call.  When processing incoming
   29332      arguments, N_NAMED_ARGS is set to -1.
   29333 
   29334      When processing a call to a compiler support library function,
   29335      LIBNAME identifies which one.  It is a `symbol_ref' rtx which
   29336      contains the name of the function, as a string.  LIBNAME is 0 when
   29337      an ordinary C function call is being processed.  Thus, each time
   29338      this macro is called, either LIBNAME or FNTYPE is nonzero, but
   29339      never both of them at once.
   29340 
   29341  -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME)
   29342      Like `INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls,
   29343      it gets a `MODE' argument instead of FNTYPE, that would be `NULL'.
   29344      INDIRECT would always be zero, too.  If this macro is not defined,
   29345      `INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is used instead.
   29346 
   29347  -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME)
   29348      Like `INIT_CUMULATIVE_ARGS' but overrides it for the purposes of
   29349      finding the arguments for the function being compiled.  If this
   29350      macro is undefined, `INIT_CUMULATIVE_ARGS' is used instead.
   29351 
   29352      The value passed for LIBNAME is always 0, since library routines
   29353      with special calling conventions are never compiled with GCC.  The
   29354      argument LIBNAME exists for symmetry with `INIT_CUMULATIVE_ARGS'.
   29355 
   29356  -- Macro: FUNCTION_ARG_ADVANCE (CUM, MODE, TYPE, NAMED)
   29357      A C statement (sans semicolon) to update the summarizer variable
   29358      CUM to advance past an argument in the argument list.  The values
   29359      MODE, TYPE and NAMED describe that argument.  Once this is done,
   29360      the variable CUM is suitable for analyzing the _following_
   29361      argument with `FUNCTION_ARG', etc.
   29362 
   29363      This macro need not do anything if the argument in question was
   29364      passed on the stack.  The compiler knows how to track the amount
   29365      of stack space used for arguments without any special help.
   29366 
   29367  -- Macro: FUNCTION_ARG_OFFSET (MODE, TYPE)
   29368      If defined, a C expression that is the number of bytes to add to
   29369      the offset of the argument passed in memory.  This is needed for
   29370      the SPU, which passes `char' and `short' arguments in the preferred
   29371      slot that is in the middle of the quad word instead of starting at
   29372      the top.
   29373 
   29374  -- Macro: FUNCTION_ARG_PADDING (MODE, TYPE)
   29375      If defined, a C expression which determines whether, and in which
   29376      direction, to pad out an argument with extra space.  The value
   29377      should be of type `enum direction': either `upward' to pad above
   29378      the argument, `downward' to pad below, or `none' to inhibit
   29379      padding.
   29380 
   29381      The _amount_ of padding is always just enough to reach the next
   29382      multiple of `TARGET_FUNCTION_ARG_BOUNDARY'; this macro does not
   29383      control it.
   29384 
   29385      This macro has a default definition which is right for most
   29386      systems.  For little-endian machines, the default is to pad
   29387      upward.  For big-endian machines, the default is to pad downward
   29388      for an argument of constant size shorter than an `int', and upward
   29389      otherwise.
   29390 
   29391  -- Macro: PAD_VARARGS_DOWN
   29392      If defined, a C expression which determines whether the default
   29393      implementation of va_arg will attempt to pad down before reading
   29394      the next argument, if that argument is smaller than its aligned
   29395      space as controlled by `PARM_BOUNDARY'.  If this macro is not
   29396      defined, all such arguments are padded down if `BYTES_BIG_ENDIAN'
   29397      is true.
   29398 
   29399  -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST)
   29400      Specify padding for the last element of a block move between
   29401      registers and memory.  FIRST is nonzero if this is the only
   29402      element.  Defining this macro allows better control of register
   29403      function parameters on big-endian machines, without using
   29404      `PARALLEL' rtl.  In particular, `MUST_PASS_IN_STACK' need not test
   29405      padding and mode of types in registers, as there is no longer a
   29406      "wrong" part of a register;  For example, a three byte aggregate
   29407      may be passed in the high part of a register if so required.
   29408 
   29409  -- Target Hook: unsigned int TARGET_FUNCTION_ARG_BOUNDARY (enum
   29410           machine_mode MODE, const_tree TYPE)
   29411      This hook returns the alignment boundary, in bits, of an argument
   29412      with the specified mode and type.  The default hook returns
   29413      `PARM_BOUNDARY' for all arguments.
   29414 
   29415  -- Macro: FUNCTION_ARG_REGNO_P (REGNO)
   29416      A C expression that is nonzero if REGNO is the number of a hard
   29417      register in which function arguments are sometimes passed.  This
   29418      does _not_ include implicit arguments such as the static chain and
   29419      the structure-value address.  On many machines, no registers can be
   29420      used for this purpose since all function arguments are pushed on
   29421      the stack.
   29422 
   29423  -- Target Hook: bool TARGET_SPLIT_COMPLEX_ARG (const_tree TYPE)
   29424      This hook should return true if parameter of type TYPE are passed
   29425      as two scalar parameters.  By default, GCC will attempt to pack
   29426      complex arguments into the target's word size.  Some ABIs require
   29427      complex arguments to be split and treated as their individual
   29428      components.  For example, on AIX64, complex floats should be
   29429      passed in a pair of floating point registers, even though a
   29430      complex float would fit in one 64-bit floating point register.
   29431 
   29432      The default value of this hook is `NULL', which is treated as
   29433      always false.
   29434 
   29435  -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void)
   29436      This hook returns a type node for `va_list' for the target.  The
   29437      default version of the hook returns `void*'.
   29438 
   29439  -- Target Hook: int TARGET_ENUM_VA_LIST_P (int IDX, const char
   29440           **PNAME, tree *PTREE)
   29441      This target hook is used in function `c_common_nodes_and_builtins'
   29442      to iterate through the target specific builtin types for va_list.
   29443      The variable IDX is used as iterator. PNAME has to be a pointer to
   29444      a `const char *' and PTREE a pointer to a `tree' typed variable.
   29445      The arguments PNAME and PTREE are used to store the result of this
   29446      macro and are set to the name of the va_list builtin type and its
   29447      internal type.  If the return value of this macro is zero, then
   29448      there is no more element.  Otherwise the IDX should be increased
   29449      for the next call of this macro to iterate through all types.
   29450 
   29451  -- Target Hook: tree TARGET_FN_ABI_VA_LIST (tree FNDECL)
   29452      This hook returns the va_list type of the calling convention
   29453      specified by FNDECL.  The default version of this hook returns
   29454      `va_list_type_node'.
   29455 
   29456  -- Target Hook: tree TARGET_CANONICAL_VA_LIST_TYPE (tree TYPE)
   29457      This hook returns the va_list type of the calling convention
   29458      specified by the type of TYPE. If TYPE is not a valid va_list
   29459      type, it returns `NULL_TREE'.
   29460 
   29461  -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree
   29462           TYPE, gimple_seq *PRE_P, gimple_seq *POST_P)
   29463      This hook performs target-specific gimplification of
   29464      `VA_ARG_EXPR'.  The first two parameters correspond to the
   29465      arguments to `va_arg'; the latter two are as in
   29466      `gimplify.c:gimplify_expr'.
   29467 
   29468  -- Target Hook: bool TARGET_VALID_POINTER_MODE (enum machine_mode MODE)
   29469      Define this to return nonzero if the port can handle pointers with
   29470      machine mode MODE.  The default version of this hook returns true
   29471      for both `ptr_mode' and `Pmode'.
   29472 
   29473  -- Target Hook: bool TARGET_REF_MAY_ALIAS_ERRNO (struct ao_ref_s *REF)
   29474      Define this to return nonzero if the memory reference REF  may
   29475      alias with the system C library errno location.  The default
   29476      version of this hook assumes the system C library errno location
   29477      is either a declaration of type int or accessed by dereferencing
   29478      a pointer to int.
   29479 
   29480  -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (enum machine_mode
   29481           MODE)
   29482      Define this to return nonzero if the port is prepared to handle
   29483      insns involving scalar mode MODE.  For a scalar mode to be
   29484      considered supported, all the basic arithmetic and comparisons
   29485      must work.
   29486 
   29487      The default version of this hook returns true for any mode
   29488      required to handle the basic C types (as defined by the port).
   29489      Included here are the double-word arithmetic supported by the code
   29490      in `optabs.c'.
   29491 
   29492  -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (enum machine_mode
   29493           MODE)
   29494      Define this to return nonzero if the port is prepared to handle
   29495      insns involving vector mode MODE.  At the very least, it must have
   29496      move patterns for this mode.
   29497 
   29498  -- Target Hook: bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P (enum
   29499           machine_mode MODE)
   29500      Define this to return nonzero for machine modes for which the port
   29501      has small register classes.  If this target hook returns nonzero
   29502      for a given MODE, the compiler will try to minimize the lifetime
   29503      of registers in MODE.  The hook may be called with `VOIDmode' as
   29504      argument.  In this case, the hook is expected to return nonzero if
   29505      it returns nonzero for any mode.
   29506 
   29507      On some machines, it is risky to let hard registers live across
   29508      arbitrary insns.  Typically, these machines have instructions that
   29509      require values to be in specific registers (like an accumulator),
   29510      and reload will fail if the required hard register is used for
   29511      another purpose across such an insn.
   29512 
   29513      Passes before reload do not know which hard registers will be used
   29514      in an instruction, but the machine modes of the registers set or
   29515      used in the instruction are already known.  And for some machines,
   29516      register classes are small for, say, integer registers but not for
   29517      floating point registers.  For example, the AMD x86-64
   29518      architecture requires specific registers for the legacy x86
   29519      integer instructions, but there are many SSE registers for
   29520      floating point operations.  On such targets, a good strategy may
   29521      be to return nonzero from this hook for `INTEGRAL_MODE_P' machine
   29522      modes but zero for the SSE register classes.
   29523 
   29524      The default version of this hook returns false for any mode.  It
   29525      is always safe to redefine this hook to return with a nonzero
   29526      value.  But if you unnecessarily define it, you will reduce the
   29527      amount of optimizations that can be performed in some cases.  If
   29528      you do not define this hook to return a nonzero value when it is
   29529      required, the compiler will run out of spill registers and print a
   29530      fatal error message.
   29531 
   29532  -- Target Hook: unsigned int TARGET_FLAGS_REGNUM
   29533      If the target has a dedicated flags register, and it needs to use
   29534      the post-reload comparison elimination pass, then this value
   29535      should be set appropriately.
   29536 
   29537 
   29538 File: gccint.info,  Node: Scalar Return,  Next: Aggregate Return,  Prev: Register Arguments,  Up: Stack and Calling
   29539 
   29540 17.10.8 How Scalar Function Values Are Returned
   29541 -----------------------------------------------
   29542 
   29543 This section discusses the macros that control returning scalars as
   29544 values--values that can fit in registers.
   29545 
   29546  -- Target Hook: rtx TARGET_FUNCTION_VALUE (const_tree RET_TYPE,
   29547           const_tree FN_DECL_OR_TYPE, bool OUTGOING)
   29548      Define this to return an RTX representing the place where a
   29549      function returns or receives a value of data type RET_TYPE, a tree
   29550      node representing a data type.  FN_DECL_OR_TYPE is a tree node
   29551      representing `FUNCTION_DECL' or `FUNCTION_TYPE' of a function
   29552      being called.  If OUTGOING is false, the hook should compute the
   29553      register in which the caller will see the return value.
   29554      Otherwise, the hook should return an RTX representing the place
   29555      where a function returns a value.
   29556 
   29557      On many machines, only `TYPE_MODE (RET_TYPE)' is relevant.
   29558      (Actually, on most machines, scalar values are returned in the same
   29559      place regardless of mode.)  The value of the expression is usually
   29560      a `reg' RTX for the hard register where the return value is stored.
   29561      The value can also be a `parallel' RTX, if the return value is in
   29562      multiple places.  See `FUNCTION_ARG' for an explanation of the
   29563      `parallel' form.   Note that the callee will populate every
   29564      location specified in the `parallel', but if the first element of
   29565      the `parallel' contains the whole return value, callers will use
   29566      that element as the canonical location and ignore the others.  The
   29567      m68k port uses this type of `parallel' to return pointers in both
   29568      `%a0' (the canonical location) and `%d0'.
   29569 
   29570      If `TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply
   29571      the same promotion rules specified in `PROMOTE_MODE' if VALTYPE is
   29572      a scalar type.
   29573 
   29574      If the precise function being called is known, FUNC is a tree node
   29575      (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer.  This
   29576      makes it possible to use a different value-returning convention
   29577      for specific functions when all their calls are known.
   29578 
   29579      Some target machines have "register windows" so that the register
   29580      in which a function returns its value is not the same as the one
   29581      in which the caller sees the value.  For such machines, you should
   29582      return different RTX depending on OUTGOING.
   29583 
   29584      `TARGET_FUNCTION_VALUE' is not used for return values with
   29585      aggregate data types, because these are returned in another way.
   29586      See `TARGET_STRUCT_VALUE_RTX' and related macros, below.
   29587 
   29588  -- Macro: FUNCTION_VALUE (VALTYPE, FUNC)
   29589      This macro has been deprecated.  Use `TARGET_FUNCTION_VALUE' for a
   29590      new target instead.
   29591 
   29592  -- Macro: LIBCALL_VALUE (MODE)
   29593      A C expression to create an RTX representing the place where a
   29594      library function returns a value of mode MODE.
   29595 
   29596      Note that "library function" in this context means a compiler
   29597      support routine, used to perform arithmetic, whose name is known
   29598      specially by the compiler and was not mentioned in the C code being
   29599      compiled.
   29600 
   29601  -- Target Hook: rtx TARGET_LIBCALL_VALUE (enum machine_mode MODE,
   29602           const_rtx FUN)
   29603      Define this hook if the back-end needs to know the name of the
   29604      libcall function in order to determine where the result should be
   29605      returned.
   29606 
   29607      The mode of the result is given by MODE and the name of the called
   29608      library function is given by FUN.  The hook should return an RTX
   29609      representing the place where the library function result will be
   29610      returned.
   29611 
   29612      If this hook is not defined, then LIBCALL_VALUE will be used.
   29613 
   29614  -- Macro: FUNCTION_VALUE_REGNO_P (REGNO)
   29615      A C expression that is nonzero if REGNO is the number of a hard
   29616      register in which the values of called function may come back.
   29617 
   29618      A register whose use for returning values is limited to serving as
   29619      the second of a pair (for a value of type `double', say) need not
   29620      be recognized by this macro.  So for most machines, this definition
   29621      suffices:
   29622 
   29623           #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
   29624 
   29625      If the machine has register windows, so that the caller and the
   29626      called function use different registers for the return value, this
   29627      macro should recognize only the caller's register numbers.
   29628 
   29629      This macro has been deprecated.  Use
   29630      `TARGET_FUNCTION_VALUE_REGNO_P' for a new target instead.
   29631 
   29632  -- Target Hook: bool TARGET_FUNCTION_VALUE_REGNO_P (const unsigned int
   29633           REGNO)
   29634      A target hook that return `true' if REGNO is the number of a hard
   29635      register in which the values of called function may come back.
   29636 
   29637      A register whose use for returning values is limited to serving as
   29638      the second of a pair (for a value of type `double', say) need not
   29639      be recognized by this target hook.
   29640 
   29641      If the machine has register windows, so that the caller and the
   29642      called function use different registers for the return value, this
   29643      target hook should recognize only the caller's register numbers.
   29644 
   29645      If this hook is not defined, then FUNCTION_VALUE_REGNO_P will be
   29646      used.
   29647 
   29648  -- Macro: APPLY_RESULT_SIZE
   29649      Define this macro if `untyped_call' and `untyped_return' need more
   29650      space than is implied by `FUNCTION_VALUE_REGNO_P' for saving and
   29651      restoring an arbitrary return value.
   29652 
   29653  -- Target Hook: bool TARGET_RETURN_IN_MSB (const_tree TYPE)
   29654      This hook should return true if values of type TYPE are returned
   29655      at the most significant end of a register (in other words, if they
   29656      are padded at the least significant end).  You can assume that TYPE
   29657      is returned in a register; the caller is required to check this.
   29658 
   29659      Note that the register provided by `TARGET_FUNCTION_VALUE' must be
   29660      able to hold the complete return value.  For example, if a 1-, 2-
   29661      or 3-byte structure is returned at the most significant end of a
   29662      4-byte register, `TARGET_FUNCTION_VALUE' should provide an
   29663      `SImode' rtx.
   29664 
   29665 
   29666 File: gccint.info,  Node: Aggregate Return,  Next: Caller Saves,  Prev: Scalar Return,  Up: Stack and Calling
   29667 
   29668 17.10.9 How Large Values Are Returned
   29669 -------------------------------------
   29670 
   29671 When a function value's mode is `BLKmode' (and in some other cases),
   29672 the value is not returned according to `TARGET_FUNCTION_VALUE' (*note
   29673 Scalar Return::).  Instead, the caller passes the address of a block of
   29674 memory in which the value should be stored.  This address is called the
   29675 "structure value address".
   29676 
   29677  This section describes how to control returning structure values in
   29678 memory.
   29679 
   29680  -- Target Hook: bool TARGET_RETURN_IN_MEMORY (const_tree TYPE,
   29681           const_tree FNTYPE)
   29682      This target hook should return a nonzero value to say to return the
   29683      function value in memory, just as large structures are always
   29684      returned.  Here TYPE will be the data type of the value, and FNTYPE
   29685      will be the type of the function doing the returning, or `NULL' for
   29686      libcalls.
   29687 
   29688      Note that values of mode `BLKmode' must be explicitly handled by
   29689      this function.  Also, the option `-fpcc-struct-return' takes
   29690      effect regardless of this macro.  On most systems, it is possible
   29691      to leave the hook undefined; this causes a default definition to
   29692      be used, whose value is the constant 1 for `BLKmode' values, and 0
   29693      otherwise.
   29694 
   29695      Do not use this hook to indicate that structures and unions should
   29696      always be returned in memory.  You should instead use
   29697      `DEFAULT_PCC_STRUCT_RETURN' to indicate this.
   29698 
   29699  -- Macro: DEFAULT_PCC_STRUCT_RETURN
   29700      Define this macro to be 1 if all structure and union return values
   29701      must be in memory.  Since this results in slower code, this should
   29702      be defined only if needed for compatibility with other compilers
   29703      or with an ABI.  If you define this macro to be 0, then the
   29704      conventions used for structure and union return values are decided
   29705      by the `TARGET_RETURN_IN_MEMORY' target hook.
   29706 
   29707      If not defined, this defaults to the value 1.
   29708 
   29709  -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING)
   29710      This target hook should return the location of the structure value
   29711      address (normally a `mem' or `reg'), or 0 if the address is passed
   29712      as an "invisible" first argument.  Note that FNDECL may be `NULL',
   29713      for libcalls.  You do not need to define this target hook if the
   29714      address is always passed as an "invisible" first argument.
   29715 
   29716      On some architectures the place where the structure value address
   29717      is found by the called function is not the same place that the
   29718      caller put it.  This can be due to register windows, or it could
   29719      be because the function prologue moves it to a different place.
   29720      INCOMING is `1' or `2' when the location is needed in the context
   29721      of the called function, and `0' in the context of the caller.
   29722 
   29723      If INCOMING is nonzero and the address is to be found on the
   29724      stack, return a `mem' which refers to the frame pointer. If
   29725      INCOMING is `2', the result is being used to fetch the structure
   29726      value address at the beginning of a function.  If you need to emit
   29727      adjusting code, you should do it at this point.
   29728 
   29729  -- Macro: PCC_STATIC_STRUCT_RETURN
   29730      Define this macro if the usual system convention on the target
   29731      machine for returning structures and unions is for the called
   29732      function to return the address of a static variable containing the
   29733      value.
   29734 
   29735      Do not define this if the usual system convention is for the
   29736      caller to pass an address to the subroutine.
   29737 
   29738      This macro has effect in `-fpcc-struct-return' mode, but it does
   29739      nothing when you use `-freg-struct-return' mode.
   29740 
   29741  -- Target Hook: enum machine_mode TARGET_GET_RAW_RESULT_MODE (int
   29742           REGNO)
   29743      This target hook returns the mode to be used when accessing raw
   29744      return registers in `__builtin_return'.  Define this macro if the
   29745      value in REG_RAW_MODE is not correct.
   29746 
   29747  -- Target Hook: enum machine_mode TARGET_GET_RAW_ARG_MODE (int REGNO)
   29748      This target hook returns the mode to be used when accessing raw
   29749      argument registers in `__builtin_apply_args'.  Define this macro
   29750      if the value in REG_RAW_MODE is not correct.
   29751 
   29752 
   29753 File: gccint.info,  Node: Caller Saves,  Next: Function Entry,  Prev: Aggregate Return,  Up: Stack and Calling
   29754 
   29755 17.10.10 Caller-Saves Register Allocation
   29756 -----------------------------------------
   29757 
   29758 If you enable it, GCC can save registers around function calls.  This
   29759 makes it possible to use call-clobbered registers to hold variables that
   29760 must live across calls.
   29761 
   29762  -- Macro: CALLER_SAVE_PROFITABLE (REFS, CALLS)
   29763      A C expression to determine whether it is worthwhile to consider
   29764      placing a pseudo-register in a call-clobbered hard register and
   29765      saving and restoring it around each function call.  The expression
   29766      should be 1 when this is worth doing, and 0 otherwise.
   29767 
   29768      If you don't define this macro, a default is used which is good on
   29769      most machines: `4 * CALLS < REFS'.
   29770 
   29771  -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS)
   29772      A C expression specifying which mode is required for saving NREGS
   29773      of a pseudo-register in call-clobbered hard register REGNO.  If
   29774      REGNO is unsuitable for caller save, `VOIDmode' should be
   29775      returned.  For most machines this macro need not be defined since
   29776      GCC will select the smallest suitable mode.
   29777 
   29778 
   29779 File: gccint.info,  Node: Function Entry,  Next: Profiling,  Prev: Caller Saves,  Up: Stack and Calling
   29780 
   29781 17.10.11 Function Entry and Exit
   29782 --------------------------------
   29783 
   29784 This section describes the macros that output function entry
   29785 ("prologue") and exit ("epilogue") code.
   29786 
   29787  -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE,
   29788           HOST_WIDE_INT SIZE)
   29789      If defined, a function that outputs the assembler code for entry
   29790      to a function.  The prologue is responsible for setting up the
   29791      stack frame, initializing the frame pointer register, saving
   29792      registers that must be saved, and allocating SIZE additional bytes
   29793      of storage for the local variables.  SIZE is an integer.  FILE is
   29794      a stdio stream to which the assembler code should be output.
   29795 
   29796      The label for the beginning of the function need not be output by
   29797      this macro.  That has already been done when the macro is run.
   29798 
   29799      To determine which registers to save, the macro can refer to the
   29800      array `regs_ever_live': element R is nonzero if hard register R is
   29801      used anywhere within the function.  This implies the function
   29802      prologue should save register R, provided it is not one of the
   29803      call-used registers.  (`TARGET_ASM_FUNCTION_EPILOGUE' must
   29804      likewise use `regs_ever_live'.)
   29805 
   29806      On machines that have "register windows", the function entry code
   29807      does not save on the stack the registers that are in the windows,
   29808      even if they are supposed to be preserved by function calls;
   29809      instead it takes appropriate steps to "push" the register stack,
   29810      if any non-call-used registers are used in the function.
   29811 
   29812      On machines where functions may or may not have frame-pointers, the
   29813      function entry code must vary accordingly; it must set up the frame
   29814      pointer if one is wanted, and not otherwise.  To determine whether
   29815      a frame pointer is in wanted, the macro can refer to the variable
   29816      `frame_pointer_needed'.  The variable's value will be 1 at run
   29817      time in a function that needs a frame pointer.  *Note
   29818      Elimination::.
   29819 
   29820      The function entry code is responsible for allocating any stack
   29821      space required for the function.  This stack space consists of the
   29822      regions listed below.  In most cases, these regions are allocated
   29823      in the order listed, with the last listed region closest to the
   29824      top of the stack (the lowest address if `STACK_GROWS_DOWNWARD' is
   29825      defined, and the highest address if it is not defined).  You can
   29826      use a different order for a machine if doing so is more convenient
   29827      or required for compatibility reasons.  Except in cases where
   29828      required by standard or by a debugger, there is no reason why the
   29829      stack layout used by GCC need agree with that used by other
   29830      compilers for a machine.
   29831 
   29832  -- Target Hook: void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *FILE)
   29833      If defined, a function that outputs assembler code at the end of a
   29834      prologue.  This should be used when the function prologue is being
   29835      emitted as RTL, and you have some extra assembler that needs to be
   29836      emitted.  *Note prologue instruction pattern::.
   29837 
   29838  -- Target Hook: void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *FILE)
   29839      If defined, a function that outputs assembler code at the start of
   29840      an epilogue.  This should be used when the function epilogue is
   29841      being emitted as RTL, and you have some extra assembler that needs
   29842      to be emitted.  *Note epilogue instruction pattern::.
   29843 
   29844  -- Target Hook: void TARGET_ASM_FUNCTION_EPILOGUE (FILE *FILE,
   29845           HOST_WIDE_INT SIZE)
   29846      If defined, a function that outputs the assembler code for exit
   29847      from a function.  The epilogue is responsible for restoring the
   29848      saved registers and stack pointer to their values when the
   29849      function was called, and returning control to the caller.  This
   29850      macro takes the same arguments as the macro
   29851      `TARGET_ASM_FUNCTION_PROLOGUE', and the registers to restore are
   29852      determined from `regs_ever_live' and `CALL_USED_REGISTERS' in the
   29853      same way.
   29854 
   29855      On some machines, there is a single instruction that does all the
   29856      work of returning from the function.  On these machines, give that
   29857      instruction the name `return' and do not define the macro
   29858      `TARGET_ASM_FUNCTION_EPILOGUE' at all.
   29859 
   29860      Do not define a pattern named `return' if you want the
   29861      `TARGET_ASM_FUNCTION_EPILOGUE' to be used.  If you want the target
   29862      switches to control whether return instructions or epilogues are
   29863      used, define a `return' pattern with a validity condition that
   29864      tests the target switches appropriately.  If the `return'
   29865      pattern's validity condition is false, epilogues will be used.
   29866 
   29867      On machines where functions may or may not have frame-pointers, the
   29868      function exit code must vary accordingly.  Sometimes the code for
   29869      these two cases is completely different.  To determine whether a
   29870      frame pointer is wanted, the macro can refer to the variable
   29871      `frame_pointer_needed'.  The variable's value will be 1 when
   29872      compiling a function that needs a frame pointer.
   29873 
   29874      Normally, `TARGET_ASM_FUNCTION_PROLOGUE' and
   29875      `TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially.
   29876      The C variable `current_function_is_leaf' is nonzero for such a
   29877      function.  *Note Leaf Functions::.
   29878 
   29879      On some machines, some functions pop their arguments on exit while
   29880      others leave that for the caller to do.  For example, the 68020
   29881      when given `-mrtd' pops arguments in functions that take a fixed
   29882      number of arguments.
   29883 
   29884      Your definition of the macro `RETURN_POPS_ARGS' decides which
   29885      functions pop their own arguments.  `TARGET_ASM_FUNCTION_EPILOGUE'
   29886      needs to know what was decided.  The number of bytes of the current
   29887      function's arguments that this function should pop is available in
   29888      `crtl->args.pops_args'.  *Note Scalar Return::.
   29889 
   29890    * A region of `current_function_pretend_args_size' bytes of
   29891      uninitialized space just underneath the first argument arriving on
   29892      the stack.  (This may not be at the very start of the allocated
   29893      stack region if the calling sequence has pushed anything else
   29894      since pushing the stack arguments.  But usually, on such machines,
   29895      nothing else has been pushed yet, because the function prologue
   29896      itself does all the pushing.)  This region is used on machines
   29897      where an argument may be passed partly in registers and partly in
   29898      memory, and, in some cases to support the features in `<stdarg.h>'.
   29899 
   29900    * An area of memory used to save certain registers used by the
   29901      function.  The size of this area, which may also include space for
   29902      such things as the return address and pointers to previous stack
   29903      frames, is machine-specific and usually depends on which registers
   29904      have been used in the function.  Machines with register windows
   29905      often do not require a save area.
   29906 
   29907    * A region of at least SIZE bytes, possibly rounded up to an
   29908      allocation boundary, to contain the local variables of the
   29909      function.  On some machines, this region and the save area may
   29910      occur in the opposite order, with the save area closer to the top
   29911      of the stack.
   29912 
   29913    * Optionally, when `ACCUMULATE_OUTGOING_ARGS' is defined, a region of
   29914      `current_function_outgoing_args_size' bytes to be used for outgoing
   29915      argument lists of the function.  *Note Stack Arguments::.
   29916 
   29917  -- Macro: EXIT_IGNORE_STACK
   29918      Define this macro as a C expression that is nonzero if the return
   29919      instruction or the function epilogue ignores the value of the stack
   29920      pointer; in other words, if it is safe to delete an instruction to
   29921      adjust the stack pointer before a return from the function.  The
   29922      default is 0.
   29923 
   29924      Note that this macro's value is relevant only for functions for
   29925      which frame pointers are maintained.  It is never safe to delete a
   29926      final stack adjustment in a function that has no frame pointer,
   29927      and the compiler knows this regardless of `EXIT_IGNORE_STACK'.
   29928 
   29929  -- Macro: EPILOGUE_USES (REGNO)
   29930      Define this macro as a C expression that is nonzero for registers
   29931      that are used by the epilogue or the `return' pattern.  The stack
   29932      and frame pointer registers are already assumed to be used as
   29933      needed.
   29934 
   29935  -- Macro: EH_USES (REGNO)
   29936      Define this macro as a C expression that is nonzero for registers
   29937      that are used by the exception handling mechanism, and so should
   29938      be considered live on entry to an exception edge.
   29939 
   29940  -- Macro: DELAY_SLOTS_FOR_EPILOGUE
   29941      Define this macro if the function epilogue contains delay slots to
   29942      which instructions from the rest of the function can be "moved".
   29943      The definition should be a C expression whose value is an integer
   29944      representing the number of delay slots there.
   29945 
   29946  -- Macro: ELIGIBLE_FOR_EPILOGUE_DELAY (INSN, N)
   29947      A C expression that returns 1 if INSN can be placed in delay slot
   29948      number N of the epilogue.
   29949 
   29950      The argument N is an integer which identifies the delay slot now
   29951      being considered (since different slots may have different rules of
   29952      eligibility).  It is never negative and is always less than the
   29953      number of epilogue delay slots (what `DELAY_SLOTS_FOR_EPILOGUE'
   29954      returns).  If you reject a particular insn for a given delay slot,
   29955      in principle, it may be reconsidered for a subsequent delay slot.
   29956      Also, other insns may (at least in principle) be considered for
   29957      the so far unfilled delay slot.
   29958 
   29959      The insns accepted to fill the epilogue delay slots are put in an
   29960      RTL list made with `insn_list' objects, stored in the variable
   29961      `current_function_epilogue_delay_list'.  The insn for the first
   29962      delay slot comes first in the list.  Your definition of the macro
   29963      `TARGET_ASM_FUNCTION_EPILOGUE' should fill the delay slots by
   29964      outputting the insns in this list, usually by calling
   29965      `final_scan_insn'.
   29966 
   29967      You need not define this macro if you did not define
   29968      `DELAY_SLOTS_FOR_EPILOGUE'.
   29969 
   29970  -- Target Hook: void TARGET_ASM_OUTPUT_MI_THUNK (FILE *FILE, tree
   29971           THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT
   29972           VCALL_OFFSET, tree FUNCTION)
   29973      A function that outputs the assembler code for a thunk function,
   29974      used to implement C++ virtual function calls with multiple
   29975      inheritance.  The thunk acts as a wrapper around a virtual
   29976      function, adjusting the implicit object parameter before handing
   29977      control off to the real function.
   29978 
   29979      First, emit code to add the integer DELTA to the location that
   29980      contains the incoming first argument.  Assume that this argument
   29981      contains a pointer, and is the one used to pass the `this' pointer
   29982      in C++.  This is the incoming argument _before_ the function
   29983      prologue, e.g. `%o0' on a sparc.  The addition must preserve the
   29984      values of all other incoming arguments.
   29985 
   29986      Then, if VCALL_OFFSET is nonzero, an additional adjustment should
   29987      be made after adding `delta'.  In particular, if P is the adjusted
   29988      pointer, the following adjustment should be made:
   29989 
   29990           p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]
   29991 
   29992      After the additions, emit code to jump to FUNCTION, which is a
   29993      `FUNCTION_DECL'.  This is a direct pure jump, not a call, and does
   29994      not touch the return address.  Hence returning from FUNCTION will
   29995      return to whoever called the current `thunk'.
   29996 
   29997      The effect must be as if FUNCTION had been called directly with
   29998      the adjusted first argument.  This macro is responsible for
   29999      emitting all of the code for a thunk function;
   30000      `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE'
   30001      are not invoked.
   30002 
   30003      The THUNK_FNDECL is redundant.  (DELTA and FUNCTION have already
   30004      been extracted from it.)  It might possibly be useful on some
   30005      targets, but probably not.
   30006 
   30007      If you do not define this macro, the target-independent code in
   30008      the C++ front end will generate a less efficient heavyweight thunk
   30009      that calls FUNCTION instead of jumping to it.  The generic
   30010      approach does not support varargs.
   30011 
   30012  -- Target Hook: bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (const_tree
   30013           THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT
   30014           VCALL_OFFSET, const_tree FUNCTION)
   30015      A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would
   30016      be able to output the assembler code for the thunk function
   30017      specified by the arguments it is passed, and false otherwise.  In
   30018      the latter case, the generic approach will be used by the C++
   30019      front end, with the limitations previously exposed.
   30020 
   30021 
   30022 File: gccint.info,  Node: Profiling,  Next: Tail Calls,  Prev: Function Entry,  Up: Stack and Calling
   30023 
   30024 17.10.12 Generating Code for Profiling
   30025 --------------------------------------
   30026 
   30027 These macros will help you generate code for profiling.
   30028 
   30029  -- Macro: FUNCTION_PROFILER (FILE, LABELNO)
   30030      A C statement or compound statement to output to FILE some
   30031      assembler code to call the profiling subroutine `mcount'.
   30032 
   30033      The details of how `mcount' expects to be called are determined by
   30034      your operating system environment, not by GCC.  To figure them out,
   30035      compile a small program for profiling using the system's installed
   30036      C compiler and look at the assembler code that results.
   30037 
   30038      Older implementations of `mcount' expect the address of a counter
   30039      variable to be loaded into some register.  The name of this
   30040      variable is `LP' followed by the number LABELNO, so you would
   30041      generate the name using `LP%d' in a `fprintf'.
   30042 
   30043  -- Macro: PROFILE_HOOK
   30044      A C statement or compound statement to output to FILE some assembly
   30045      code to call the profiling subroutine `mcount' even the target does
   30046      not support profiling.
   30047 
   30048  -- Macro: NO_PROFILE_COUNTERS
   30049      Define this macro to be an expression with a nonzero value if the
   30050      `mcount' subroutine on your system does not need a counter variable
   30051      allocated for each function.  This is true for almost all modern
   30052      implementations.  If you define this macro, you must not use the
   30053      LABELNO argument to `FUNCTION_PROFILER'.
   30054 
   30055  -- Macro: PROFILE_BEFORE_PROLOGUE
   30056      Define this macro if the code for function profiling should come
   30057      before the function prologue.  Normally, the profiling code comes
   30058      after.
   30059 
   30060 
   30061 File: gccint.info,  Node: Tail Calls,  Next: Stack Smashing Protection,  Prev: Profiling,  Up: Stack and Calling
   30062 
   30063 17.10.13 Permitting tail calls
   30064 ------------------------------
   30065 
   30066  -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree
   30067           EXP)
   30068      True if it is ok to do sibling call optimization for the specified
   30069      call expression EXP.  DECL will be the called function, or `NULL'
   30070      if this is an indirect call.
   30071 
   30072      It is not uncommon for limitations of calling conventions to
   30073      prevent tail calls to functions outside the current unit of
   30074      translation, or during PIC compilation.  The hook is used to
   30075      enforce these restrictions, as the `sibcall' md pattern can not
   30076      fail, or fall over to a "normal" call.  The criteria for
   30077      successful sibling call optimization may vary greatly between
   30078      different architectures.
   30079 
   30080  -- Target Hook: void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap REGS)
   30081      Add any hard registers to REGS that are live on entry to the
   30082      function.  This hook only needs to be defined to provide registers
   30083      that cannot be found by examination of FUNCTION_ARG_REGNO_P, the
   30084      callee saved registers, STATIC_CHAIN_INCOMING_REGNUM,
   30085      STATIC_CHAIN_REGNUM, TARGET_STRUCT_VALUE_RTX,
   30086      FRAME_POINTER_REGNUM, EH_USES, FRAME_POINTER_REGNUM,
   30087      ARG_POINTER_REGNUM, and the PIC_OFFSET_TABLE_REGNUM.
   30088 
   30089 
   30090 File: gccint.info,  Node: Stack Smashing Protection,  Prev: Tail Calls,  Up: Stack and Calling
   30091 
   30092 17.10.14 Stack smashing protection
   30093 ----------------------------------
   30094 
   30095  -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void)
   30096      This hook returns a `DECL' node for the external variable to use
   30097      for the stack protection guard.  This variable is initialized by
   30098      the runtime to some random value and is used to initialize the
   30099      guard value that is placed at the top of the local stack frame.
   30100      The type of this variable must be `ptr_type_node'.
   30101 
   30102      The default version of this hook creates a variable called
   30103      `__stack_chk_guard', which is normally defined in `libgcc2.c'.
   30104 
   30105  -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void)
   30106      This hook returns a tree expression that alerts the runtime that
   30107      the stack protect guard variable has been modified.  This
   30108      expression should involve a call to a `noreturn' function.
   30109 
   30110      The default version of this hook invokes a function called
   30111      `__stack_chk_fail', taking no arguments.  This function is
   30112      normally defined in `libgcc2.c'.
   30113 
   30114  -- Target Hook: bool TARGET_SUPPORTS_SPLIT_STACK (bool REPORT, struct
   30115           gcc_options *OPTS)
   30116      Whether this target supports splitting the stack when the options
   30117      described in OPTS have been passed.  This is called after options
   30118      have been parsed, so the target may reject splitting the stack in
   30119      some configurations.  The default version of this hook returns
   30120      false.  If REPORT is true, this function may issue a warning or
   30121      error; if REPORT is false, it must simply return a value
   30122 
   30123 
   30124 File: gccint.info,  Node: Varargs,  Next: Trampolines,  Prev: Stack and Calling,  Up: Target Macros
   30125 
   30126 17.11 Implementing the Varargs Macros
   30127 =====================================
   30128 
   30129 GCC comes with an implementation of `<varargs.h>' and `<stdarg.h>' that
   30130 work without change on machines that pass arguments on the stack.
   30131 Other machines require their own implementations of varargs, and the
   30132 two machine independent header files must have conditionals to include
   30133 it.
   30134 
   30135  ISO `<stdarg.h>' differs from traditional `<varargs.h>' mainly in the
   30136 calling convention for `va_start'.  The traditional implementation
   30137 takes just one argument, which is the variable in which to store the
   30138 argument pointer.  The ISO implementation of `va_start' takes an
   30139 additional second argument.  The user is supposed to write the last
   30140 named argument of the function here.
   30141 
   30142  However, `va_start' should not use this argument.  The way to find the
   30143 end of the named arguments is with the built-in functions described
   30144 below.
   30145 
   30146  -- Macro: __builtin_saveregs ()
   30147      Use this built-in function to save the argument registers in
   30148      memory so that the varargs mechanism can access them.  Both ISO
   30149      and traditional versions of `va_start' must use
   30150      `__builtin_saveregs', unless you use
   30151      `TARGET_SETUP_INCOMING_VARARGS' (see below) instead.
   30152 
   30153      On some machines, `__builtin_saveregs' is open-coded under the
   30154      control of the target hook `TARGET_EXPAND_BUILTIN_SAVEREGS'.  On
   30155      other machines, it calls a routine written in assembler language,
   30156      found in `libgcc2.c'.
   30157 
   30158      Code generated for the call to `__builtin_saveregs' appears at the
   30159      beginning of the function, as opposed to where the call to
   30160      `__builtin_saveregs' is written, regardless of what the code is.
   30161      This is because the registers must be saved before the function
   30162      starts to use them for its own purposes.
   30163 
   30164  -- Macro: __builtin_next_arg (LASTARG)
   30165      This builtin returns the address of the first anonymous stack
   30166      argument, as type `void *'.  If `ARGS_GROW_DOWNWARD', it returns
   30167      the address of the location above the first anonymous stack
   30168      argument.  Use it in `va_start' to initialize the pointer for
   30169      fetching arguments from the stack.  Also use it in `va_start' to
   30170      verify that the second parameter LASTARG is the last named argument
   30171      of the current function.
   30172 
   30173  -- Macro: __builtin_classify_type (OBJECT)
   30174      Since each machine has its own conventions for which data types are
   30175      passed in which kind of register, your implementation of `va_arg'
   30176      has to embody these conventions.  The easiest way to categorize the
   30177      specified data type is to use `__builtin_classify_type' together
   30178      with `sizeof' and `__alignof__'.
   30179 
   30180      `__builtin_classify_type' ignores the value of OBJECT, considering
   30181      only its data type.  It returns an integer describing what kind of
   30182      type that is--integer, floating, pointer, structure, and so on.
   30183 
   30184      The file `typeclass.h' defines an enumeration that you can use to
   30185      interpret the values of `__builtin_classify_type'.
   30186 
   30187  These machine description macros help implement varargs:
   30188 
   30189  -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void)
   30190      If defined, this hook produces the machine-specific code for a
   30191      call to `__builtin_saveregs'.  This code will be moved to the very
   30192      beginning of the function, before any parameter access are made.
   30193      The return value of this function should be an RTX that contains
   30194      the value to use as the return of `__builtin_saveregs'.
   30195 
   30196  -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (CUMULATIVE_ARGS
   30197           *ARGS_SO_FAR, enum machine_mode MODE, tree TYPE, int
   30198           *PRETEND_ARGS_SIZE, int SECOND_TIME)
   30199      This target hook offers an alternative to using
   30200      `__builtin_saveregs' and defining the hook
   30201      `TARGET_EXPAND_BUILTIN_SAVEREGS'.  Use it to store the anonymous
   30202      register arguments into the stack so that all the arguments appear
   30203      to have been passed consecutively on the stack.  Once this is
   30204      done, you can use the standard implementation of varargs that
   30205      works for machines that pass all their arguments on the stack.
   30206 
   30207      The argument ARGS_SO_FAR points to the `CUMULATIVE_ARGS' data
   30208      structure, containing the values that are obtained after
   30209      processing the named arguments.  The arguments MODE and TYPE
   30210      describe the last named argument--its machine mode and its data
   30211      type as a tree node.
   30212 
   30213      The target hook should do two things: first, push onto the stack
   30214      all the argument registers _not_ used for the named arguments, and
   30215      second, store the size of the data thus pushed into the
   30216      `int'-valued variable pointed to by PRETEND_ARGS_SIZE.  The value
   30217      that you store here will serve as additional offset for setting up
   30218      the stack frame.
   30219 
   30220      Because you must generate code to push the anonymous arguments at
   30221      compile time without knowing their data types,
   30222      `TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that
   30223      have just a single category of argument register and use it
   30224      uniformly for all data types.
   30225 
   30226      If the argument SECOND_TIME is nonzero, it means that the
   30227      arguments of the function are being analyzed for the second time.
   30228      This happens for an inline function, which is not actually
   30229      compiled until the end of the source file.  The hook
   30230      `TARGET_SETUP_INCOMING_VARARGS' should not generate any
   30231      instructions in this case.
   30232 
   30233  -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (CUMULATIVE_ARGS
   30234           *CA)
   30235      Define this hook to return `true' if the location where a function
   30236      argument is passed depends on whether or not it is a named
   30237      argument.
   30238 
   30239      This hook controls how the NAMED argument to `FUNCTION_ARG' is set
   30240      for varargs and stdarg functions.  If this hook returns `true',
   30241      the NAMED argument is always true for named arguments, and false
   30242      for unnamed arguments.  If it returns `false', but
   30243      `TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns `true', then all
   30244      arguments are treated as named.  Otherwise, all named arguments
   30245      except the last are treated as named.
   30246 
   30247      You need not define this hook if it always returns `false'.
   30248 
   30249  -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED
   30250           (CUMULATIVE_ARGS *CA)
   30251      If you need to conditionally change ABIs so that one works with
   30252      `TARGET_SETUP_INCOMING_VARARGS', but the other works like neither
   30253      `TARGET_SETUP_INCOMING_VARARGS' nor
   30254      `TARGET_STRICT_ARGUMENT_NAMING' was defined, then define this hook
   30255      to return `true' if `TARGET_SETUP_INCOMING_VARARGS' is used,
   30256      `false' otherwise.  Otherwise, you should not define this hook.
   30257 
   30258 
   30259 File: gccint.info,  Node: Trampolines,  Next: Library Calls,  Prev: Varargs,  Up: Target Macros
   30260 
   30261 17.12 Trampolines for Nested Functions
   30262 ======================================
   30263 
   30264 A "trampoline" is a small piece of code that is created at run time
   30265 when the address of a nested function is taken.  It normally resides on
   30266 the stack, in the stack frame of the containing function.  These macros
   30267 tell GCC how to generate code to allocate and initialize a trampoline.
   30268 
   30269  The instructions in the trampoline must do two things: load a constant
   30270 address into the static chain register, and jump to the real address of
   30271 the nested function.  On CISC machines such as the m68k, this requires
   30272 two instructions, a move immediate and a jump.  Then the two addresses
   30273 exist in the trampoline as word-long immediate operands.  On RISC
   30274 machines, it is often necessary to load each address into a register in
   30275 two parts.  Then pieces of each address form separate immediate
   30276 operands.
   30277 
   30278  The code generated to initialize the trampoline must store the variable
   30279 parts--the static chain value and the function address--into the
   30280 immediate operands of the instructions.  On a CISC machine, this is
   30281 simply a matter of copying each address to a memory reference at the
   30282 proper offset from the start of the trampoline.  On a RISC machine, it
   30283 may be necessary to take out pieces of the address and store them
   30284 separately.
   30285 
   30286  -- Target Hook: void TARGET_ASM_TRAMPOLINE_TEMPLATE (FILE *F)
   30287      This hook is called by `assemble_trampoline_template' to output,
   30288      on the stream F, assembler code for a block of data that contains
   30289      the constant parts of a trampoline.  This code should not include a
   30290      label--the label is taken care of automatically.
   30291 
   30292      If you do not define this hook, it means no template is needed for
   30293      the target.  Do not define this hook on systems where the block
   30294      move code to copy the trampoline into place would be larger than
   30295      the code to generate it on the spot.
   30296 
   30297  -- Macro: TRAMPOLINE_SECTION
   30298      Return the section into which the trampoline template is to be
   30299      placed (*note Sections::).  The default value is
   30300      `readonly_data_section'.
   30301 
   30302  -- Macro: TRAMPOLINE_SIZE
   30303      A C expression for the size in bytes of the trampoline, as an
   30304      integer.
   30305 
   30306  -- Macro: TRAMPOLINE_ALIGNMENT
   30307      Alignment required for trampolines, in bits.
   30308 
   30309      If you don't define this macro, the value of `FUNCTION_ALIGNMENT'
   30310      is used for aligning trampolines.
   30311 
   30312  -- Target Hook: void TARGET_TRAMPOLINE_INIT (rtx M_TRAMP, tree FNDECL,
   30313           rtx STATIC_CHAIN)
   30314      This hook is called to initialize a trampoline.  M_TRAMP is an RTX
   30315      for the memory block for the trampoline; FNDECL is the
   30316      `FUNCTION_DECL' for the nested function; STATIC_CHAIN is an RTX
   30317      for the static chain value that should be passed to the function
   30318      when it is called.
   30319 
   30320      If the target defines `TARGET_ASM_TRAMPOLINE_TEMPLATE', then the
   30321      first thing this hook should do is emit a block move into M_TRAMP
   30322      from the memory block returned by `assemble_trampoline_template'.
   30323      Note that the block move need only cover the constant parts of the
   30324      trampoline.  If the target isolates the variable parts of the
   30325      trampoline to the end, not all `TRAMPOLINE_SIZE' bytes need be
   30326      copied.
   30327 
   30328      If the target requires any other actions, such as flushing caches
   30329      or enabling stack execution, these actions should be performed
   30330      after initializing the trampoline proper.
   30331 
   30332  -- Target Hook: rtx TARGET_TRAMPOLINE_ADJUST_ADDRESS (rtx ADDR)
   30333      This hook should perform any machine-specific adjustment in the
   30334      address of the trampoline.  Its argument contains the address of
   30335      the memory block that was passed to `TARGET_TRAMPOLINE_INIT'.  In
   30336      case the address to be used for a function call should be
   30337      different from the address at which the template was stored, the
   30338      different address should be returned; otherwise ADDR should be
   30339      returned unchanged.  If this hook is not defined, ADDR will be
   30340      used for function calls.
   30341 
   30342  Implementing trampolines is difficult on many machines because they
   30343 have separate instruction and data caches.  Writing into a stack
   30344 location fails to clear the memory in the instruction cache, so when
   30345 the program jumps to that location, it executes the old contents.
   30346 
   30347  Here are two possible solutions.  One is to clear the relevant parts of
   30348 the instruction cache whenever a trampoline is set up.  The other is to
   30349 make all trampolines identical, by having them jump to a standard
   30350 subroutine.  The former technique makes trampoline execution faster; the
   30351 latter makes initialization faster.
   30352 
   30353  To clear the instruction cache when a trampoline is initialized, define
   30354 the following macro.
   30355 
   30356  -- Macro: CLEAR_INSN_CACHE (BEG, END)
   30357      If defined, expands to a C expression clearing the _instruction
   30358      cache_ in the specified interval.  The definition of this macro
   30359      would typically be a series of `asm' statements.  Both BEG and END
   30360      are both pointer expressions.
   30361 
   30362  The operating system may also require the stack to be made executable
   30363 before calling the trampoline.  To implement this requirement, define
   30364 the following macro.
   30365 
   30366  -- Macro: ENABLE_EXECUTE_STACK
   30367      Define this macro if certain operations must be performed before
   30368      executing code located on the stack.  The macro should expand to a
   30369      series of C file-scope constructs (e.g. functions) and provide a
   30370      unique entry point named `__enable_execute_stack'.  The target is
   30371      responsible for emitting calls to the entry point in the code, for
   30372      example from the `TARGET_TRAMPOLINE_INIT' hook.
   30373 
   30374  To use a standard subroutine, define the following macro.  In addition,
   30375 you must make sure that the instructions in a trampoline fill an entire
   30376 cache line with identical instructions, or else ensure that the
   30377 beginning of the trampoline code is always aligned at the same point in
   30378 its cache line.  Look in `m68k.h' as a guide.
   30379 
   30380  -- Macro: TRANSFER_FROM_TRAMPOLINE
   30381      Define this macro if trampolines need a special subroutine to do
   30382      their work.  The macro should expand to a series of `asm'
   30383      statements which will be compiled with GCC.  They go in a library
   30384      function named `__transfer_from_trampoline'.
   30385 
   30386      If you need to avoid executing the ordinary prologue code of a
   30387      compiled C function when you jump to the subroutine, you can do so
   30388      by placing a special label of your own in the assembler code.  Use
   30389      one `asm' statement to generate an assembler label, and another to
   30390      make the label global.  Then trampolines can use that label to
   30391      jump directly to your special assembler code.
   30392 
   30393 
   30394 File: gccint.info,  Node: Library Calls,  Next: Addressing Modes,  Prev: Trampolines,  Up: Target Macros
   30395 
   30396 17.13 Implicit Calls to Library Routines
   30397 ========================================
   30398 
   30399 Here is an explanation of implicit calls to library routines.
   30400 
   30401  -- Macro: DECLARE_LIBRARY_RENAMES
   30402      This macro, if defined, should expand to a piece of C code that
   30403      will get expanded when compiling functions for libgcc.a.  It can
   30404      be used to provide alternate names for GCC's internal library
   30405      functions if there are ABI-mandated names that the compiler should
   30406      provide.
   30407 
   30408  -- Target Hook: void TARGET_INIT_LIBFUNCS (void)
   30409      This hook should declare additional library routines or rename
   30410      existing ones, using the functions `set_optab_libfunc' and
   30411      `init_one_libfunc' defined in `optabs.c'.  `init_optabs' calls
   30412      this macro after initializing all the normal library routines.
   30413 
   30414      The default is to do nothing.  Most ports don't need to define
   30415      this hook.
   30416 
   30417  -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON)
   30418      This macro should return `true' if the library routine that
   30419      implements the floating point comparison operator COMPARISON in
   30420      mode MODE will return a boolean, and FALSE if it will return a
   30421      tristate.
   30422 
   30423      GCC's own floating point libraries return tristates from the
   30424      comparison operators, so the default returns false always.  Most
   30425      ports don't need to define this macro.
   30426 
   30427  -- Macro: TARGET_LIB_INT_CMP_BIASED
   30428      This macro should evaluate to `true' if the integer comparison
   30429      functions (like `__cmpdi2') return 0 to indicate that the first
   30430      operand is smaller than the second, 1 to indicate that they are
   30431      equal, and 2 to indicate that the first operand is greater than
   30432      the second.  If this macro evaluates to `false' the comparison
   30433      functions return -1, 0, and 1 instead of 0, 1, and 2.  If the
   30434      target uses the routines in `libgcc.a', you do not need to define
   30435      this macro.
   30436 
   30437  -- Macro: TARGET_EDOM
   30438      The value of `EDOM' on the target machine, as a C integer constant
   30439      expression.  If you don't define this macro, GCC does not attempt
   30440      to deposit the value of `EDOM' into `errno' directly.  Look in
   30441      `/usr/include/errno.h' to find the value of `EDOM' on your system.
   30442 
   30443      If you do not define `TARGET_EDOM', then compiled code reports
   30444      domain errors by calling the library function and letting it
   30445      report the error.  If mathematical functions on your system use
   30446      `matherr' when there is an error, then you should leave
   30447      `TARGET_EDOM' undefined so that `matherr' is used normally.
   30448 
   30449  -- Macro: GEN_ERRNO_RTX
   30450      Define this macro as a C expression to create an rtl expression
   30451      that refers to the global "variable" `errno'.  (On certain systems,
   30452      `errno' may not actually be a variable.)  If you don't define this
   30453      macro, a reasonable default is used.
   30454 
   30455  -- Macro: TARGET_C99_FUNCTIONS
   30456      When this macro is nonzero, GCC will implicitly optimize `sin'
   30457      calls into `sinf' and similarly for other functions defined by C99
   30458      standard.  The default is zero because a number of existing
   30459      systems lack support for these functions in their runtime so this
   30460      macro needs to be redefined to one on systems that do support the
   30461      C99 runtime.
   30462 
   30463  -- Macro: TARGET_HAS_SINCOS
   30464      When this macro is nonzero, GCC will implicitly optimize calls to
   30465      `sin' and `cos' with the same argument to a call to `sincos'.  The
   30466      default is zero.  The target has to provide the following
   30467      functions:
   30468           void sincos(double x, double *sin, double *cos);
   30469           void sincosf(float x, float *sin, float *cos);
   30470           void sincosl(long double x, long double *sin, long double *cos);
   30471 
   30472  -- Macro: NEXT_OBJC_RUNTIME
   30473      Define this macro to generate code for Objective-C message sending
   30474      using the calling convention of the NeXT system.  This calling
   30475      convention involves passing the object, the selector and the
   30476      method arguments all at once to the method-lookup library function.
   30477 
   30478      The default calling convention passes just the object and the
   30479      selector to the lookup function, which returns a pointer to the
   30480      method.
   30481 
   30482 
   30483 File: gccint.info,  Node: Addressing Modes,  Next: Anchored Addresses,  Prev: Library Calls,  Up: Target Macros
   30484 
   30485 17.14 Addressing Modes
   30486 ======================
   30487 
   30488 This is about addressing modes.
   30489 
   30490  -- Macro: HAVE_PRE_INCREMENT
   30491  -- Macro: HAVE_PRE_DECREMENT
   30492  -- Macro: HAVE_POST_INCREMENT
   30493  -- Macro: HAVE_POST_DECREMENT
   30494      A C expression that is nonzero if the machine supports
   30495      pre-increment, pre-decrement, post-increment, or post-decrement
   30496      addressing respectively.
   30497 
   30498  -- Macro: HAVE_PRE_MODIFY_DISP
   30499  -- Macro: HAVE_POST_MODIFY_DISP
   30500      A C expression that is nonzero if the machine supports pre- or
   30501      post-address side-effect generation involving constants other than
   30502      the size of the memory operand.
   30503 
   30504  -- Macro: HAVE_PRE_MODIFY_REG
   30505  -- Macro: HAVE_POST_MODIFY_REG
   30506      A C expression that is nonzero if the machine supports pre- or
   30507      post-address side-effect generation involving a register
   30508      displacement.
   30509 
   30510  -- Macro: CONSTANT_ADDRESS_P (X)
   30511      A C expression that is 1 if the RTX X is a constant which is a
   30512      valid address.  On most machines the default definition of
   30513      `(CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)' is acceptable,
   30514      but a few machines are more restrictive as to which constant
   30515      addresses are supported.
   30516 
   30517  -- Macro: CONSTANT_P (X)
   30518      `CONSTANT_P', which is defined by target-independent code, accepts
   30519      integer-values expressions whose values are not explicitly known,
   30520      such as `symbol_ref', `label_ref', and `high' expressions and
   30521      `const' arithmetic expressions, in addition to `const_int' and
   30522      `const_double' expressions.
   30523 
   30524  -- Macro: MAX_REGS_PER_ADDRESS
   30525      A number, the maximum number of registers that can appear in a
   30526      valid memory address.  Note that it is up to you to specify a
   30527      value equal to the maximum number that
   30528      `TARGET_LEGITIMATE_ADDRESS_P' would ever accept.
   30529 
   30530  -- Target Hook: bool TARGET_LEGITIMATE_ADDRESS_P (enum machine_mode
   30531           MODE, rtx X, bool STRICT)
   30532      A function that returns whether X (an RTX) is a legitimate memory
   30533      address on the target machine for a memory operand of mode MODE.
   30534 
   30535      Legitimate addresses are defined in two variants: a strict variant
   30536      and a non-strict one.  The STRICT parameter chooses which variant
   30537      is desired by the caller.
   30538 
   30539      The strict variant is used in the reload pass.  It must be defined
   30540      so that any pseudo-register that has not been allocated a hard
   30541      register is considered a memory reference.  This is because in
   30542      contexts where some kind of register is required, a
   30543      pseudo-register with no hard register must be rejected.  For
   30544      non-hard registers, the strict variant should look up the
   30545      `reg_renumber' array; it should then proceed using the hard
   30546      register number in the array, or treat the pseudo as a memory
   30547      reference if the array holds `-1'.
   30548 
   30549      The non-strict variant is used in other passes.  It must be
   30550      defined to accept all pseudo-registers in every context where some
   30551      kind of register is required.
   30552 
   30553      Normally, constant addresses which are the sum of a `symbol_ref'
   30554      and an integer are stored inside a `const' RTX to mark them as
   30555      constant.  Therefore, there is no need to recognize such sums
   30556      specifically as legitimate addresses.  Normally you would simply
   30557      recognize any `const' as legitimate.
   30558 
   30559      Usually `PRINT_OPERAND_ADDRESS' is not prepared to handle constant
   30560      sums that are not marked with  `const'.  It assumes that a naked
   30561      `plus' indicates indexing.  If so, then you _must_ reject such
   30562      naked constant sums as illegitimate addresses, so that none of
   30563      them will be given to `PRINT_OPERAND_ADDRESS'.
   30564 
   30565      On some machines, whether a symbolic address is legitimate depends
   30566      on the section that the address refers to.  On these machines,
   30567      define the target hook `TARGET_ENCODE_SECTION_INFO' to store the
   30568      information into the `symbol_ref', and then check for it here.
   30569      When you see a `const', you will have to look inside it to find the
   30570      `symbol_ref' in order to determine the section.  *Note Assembler
   30571      Format::.
   30572 
   30573      Some ports are still using a deprecated legacy substitute for this
   30574      hook, the `GO_IF_LEGITIMATE_ADDRESS' macro.  This macro has this
   30575      syntax:
   30576 
   30577           #define GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)
   30578 
   30579      and should `goto LABEL' if the address X is a valid address on the
   30580      target machine for a memory operand of mode MODE.
   30581 
   30582      Compiler source files that want to use the strict variant of this
   30583      macro define the macro `REG_OK_STRICT'.  You should use an `#ifdef
   30584      REG_OK_STRICT' conditional to define the strict variant in that
   30585      case and the non-strict variant otherwise.
   30586 
   30587      Using the hook is usually simpler because it limits the number of
   30588      files that are recompiled when changes are made.
   30589 
   30590  -- Macro: TARGET_MEM_CONSTRAINT
   30591      A single character to be used instead of the default `'m''
   30592      character for general memory addresses.  This defines the
   30593      constraint letter which matches the memory addresses accepted by
   30594      `TARGET_LEGITIMATE_ADDRESS_P'.  Define this macro if you want to
   30595      support new address formats in your back end without changing the
   30596      semantics of the `'m'' constraint.  This is necessary in order to
   30597      preserve functionality of inline assembly constructs using the
   30598      `'m'' constraint.
   30599 
   30600  -- Macro: FIND_BASE_TERM (X)
   30601      A C expression to determine the base term of address X, or to
   30602      provide a simplified version of X from which `alias.c' can easily
   30603      find the base term.  This macro is used in only two places:
   30604      `find_base_value' and `find_base_term' in `alias.c'.
   30605 
   30606      It is always safe for this macro to not be defined.  It exists so
   30607      that alias analysis can understand machine-dependent addresses.
   30608 
   30609      The typical use of this macro is to handle addresses containing a
   30610      label_ref or symbol_ref within an UNSPEC.
   30611 
   30612  -- Target Hook: rtx TARGET_LEGITIMIZE_ADDRESS (rtx X, rtx OLDX, enum
   30613           machine_mode MODE)
   30614      This hook is given an invalid memory address X for an operand of
   30615      mode MODE and should try to return a valid memory address.
   30616 
   30617      X will always be the result of a call to `break_out_memory_refs',
   30618      and OLDX will be the operand that was given to that function to
   30619      produce X.
   30620 
   30621      The code of the hook should not alter the substructure of X.  If
   30622      it transforms X into a more legitimate form, it should return the
   30623      new X.
   30624 
   30625      It is not necessary for this hook to come up with a legitimate
   30626      address.  The compiler has standard ways of doing so in all cases.
   30627      In fact, it is safe to omit this hook or make it return X if it
   30628      cannot find a valid way to legitimize the address.  But often a
   30629      machine-dependent strategy can generate better code.
   30630 
   30631  -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS,
   30632           WIN)
   30633      A C compound statement that attempts to replace X, which is an
   30634      address that needs reloading, with a valid memory address for an
   30635      operand of mode MODE.  WIN will be a C statement label elsewhere
   30636      in the code.  It is not necessary to define this macro, but it
   30637      might be useful for performance reasons.
   30638 
   30639      For example, on the i386, it is sometimes possible to use a single
   30640      reload register instead of two by reloading a sum of two pseudo
   30641      registers into a register.  On the other hand, for number of RISC
   30642      processors offsets are limited so that often an intermediate
   30643      address needs to be generated in order to address a stack slot.
   30644      By defining `LEGITIMIZE_RELOAD_ADDRESS' appropriately, the
   30645      intermediate addresses generated for adjacent some stack slots can
   30646      be made identical, and thus be shared.
   30647 
   30648      _Note_: This macro should be used with caution.  It is necessary
   30649      to know something of how reload works in order to effectively use
   30650      this, and it is quite easy to produce macros that build in too
   30651      much knowledge of reload internals.
   30652 
   30653      _Note_: This macro must be able to reload an address created by a
   30654      previous invocation of this macro.  If it fails to handle such
   30655      addresses then the compiler may generate incorrect code or abort.
   30656 
   30657      The macro definition should use `push_reload' to indicate parts
   30658      that need reloading; OPNUM, TYPE and IND_LEVELS are usually
   30659      suitable to be passed unaltered to `push_reload'.
   30660 
   30661      The code generated by this macro must not alter the substructure of
   30662      X.  If it transforms X into a more legitimate form, it should
   30663      assign X (which will always be a C variable) a new value.  This
   30664      also applies to parts that you change indirectly by calling
   30665      `push_reload'.
   30666 
   30667      The macro definition may use `strict_memory_address_p' to test if
   30668      the address has become legitimate.
   30669 
   30670      If you want to change only a part of X, one standard way of doing
   30671      this is to use `copy_rtx'.  Note, however, that it unshares only a
   30672      single level of rtl.  Thus, if the part to be changed is not at the
   30673      top level, you'll need to replace first the top level.  It is not
   30674      necessary for this macro to come up with a legitimate address;
   30675      but often a machine-dependent strategy can generate better code.
   30676 
   30677  -- Target Hook: bool TARGET_MODE_DEPENDENT_ADDRESS_P (const_rtx ADDR)
   30678      This hook returns `true' if memory address ADDR can have different
   30679      meanings depending on the machine mode of the memory reference it
   30680      is used for or if the address is valid for some modes but not
   30681      others.
   30682 
   30683      Autoincrement and autodecrement addresses typically have
   30684      mode-dependent effects because the amount of the increment or
   30685      decrement is the size of the operand being addressed.  Some
   30686      machines have other mode-dependent addresses.  Many RISC machines
   30687      have no mode-dependent addresses.
   30688 
   30689      You may assume that ADDR is a valid address for the machine.
   30690 
   30691      The default version of this hook returns `false'.
   30692 
   30693  -- Macro: GO_IF_MODE_DEPENDENT_ADDRESS (ADDR, LABEL)
   30694      A C statement or compound statement with a conditional `goto
   30695      LABEL;' executed if memory address X (an RTX) can have different
   30696      meanings depending on the machine mode of the memory reference it
   30697      is used for or if the address is valid for some modes but not
   30698      others.
   30699 
   30700      Autoincrement and autodecrement addresses typically have
   30701      mode-dependent effects because the amount of the increment or
   30702      decrement is the size of the operand being addressed.  Some
   30703      machines have other mode-dependent addresses.  Many RISC machines
   30704      have no mode-dependent addresses.
   30705 
   30706      You may assume that ADDR is a valid address for the machine.
   30707 
   30708      These are obsolete macros, replaced by the
   30709      `TARGET_MODE_DEPENDENT_ADDRESS_P' target hook.
   30710 
   30711  -- Macro: LEGITIMATE_CONSTANT_P (X)
   30712      A C expression that is nonzero if X is a legitimate constant for
   30713      an immediate operand on the target machine.  You can assume that X
   30714      satisfies `CONSTANT_P', so you need not check this.  In fact, `1'
   30715      is a suitable definition for this macro on machines where anything
   30716      `CONSTANT_P' is valid.
   30717 
   30718  -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X)
   30719      This hook is used to undo the possibly obfuscating effects of the
   30720      `LEGITIMIZE_ADDRESS' and `LEGITIMIZE_RELOAD_ADDRESS' target
   30721      macros.  Some backend implementations of these macros wrap symbol
   30722      references inside an `UNSPEC' rtx to represent PIC or similar
   30723      addressing modes.  This target hook allows GCC's optimizers to
   30724      understand the semantics of these opaque `UNSPEC's by converting
   30725      them back into their original form.
   30726 
   30727  -- Target Hook: bool TARGET_CANNOT_FORCE_CONST_MEM (rtx X)
   30728      This hook should return true if X is of a form that cannot (or
   30729      should not) be spilled to the constant pool.  The default version
   30730      of this hook returns false.
   30731 
   30732      The primary reason to define this hook is to prevent reload from
   30733      deciding that a non-legitimate constant would be better reloaded
   30734      from the constant pool instead of spilling and reloading a register
   30735      holding the constant.  This restriction is often true of addresses
   30736      of TLS symbols for various targets.
   30737 
   30738  -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (enum
   30739           machine_mode MODE, const_rtx X)
   30740      This hook should return true if pool entries for constant X can be
   30741      placed in an `object_block' structure.  MODE is the mode of X.
   30742 
   30743      The default version returns false for all constants.
   30744 
   30745  -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (unsigned FN, bool
   30746           MD_FN, bool SQRT)
   30747      This hook should return the DECL of a function that implements
   30748      reciprocal of the builtin function with builtin function code FN,
   30749      or `NULL_TREE' if such a function is not available.  MD_FN is true
   30750      when FN is a code of a machine-dependent builtin function.  When
   30751      SQRT is true, additional optimizations that apply only to the
   30752      reciprocal of a square root function are performed, and only
   30753      reciprocals of `sqrt' function are valid.
   30754 
   30755  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void)
   30756      This hook should return the DECL of a function F that given an
   30757      address ADDR as an argument returns a mask M that can be used to
   30758      extract from two vectors the relevant data that resides in ADDR in
   30759      case ADDR is not properly aligned.
   30760 
   30761      The autovectorizer, when vectorizing a load operation from an
   30762      address ADDR that may be unaligned, will generate two vector loads
   30763      from the two aligned addresses around ADDR. It then generates a
   30764      `REALIGN_LOAD' operation to extract the relevant data from the two
   30765      loaded vectors. The first two arguments to `REALIGN_LOAD', V1 and
   30766      V2, are the two vectors, each of size VS, and the third argument,
   30767      OFF, defines how the data will be extracted from these two
   30768      vectors: if OFF is 0, then the returned vector is V2; otherwise,
   30769      the returned vector is composed from the last VS-OFF elements of
   30770      V1 concatenated to the first OFF elements of V2.
   30771 
   30772      If this hook is defined, the autovectorizer will generate a call
   30773      to F (using the DECL tree that this hook returns) and will use the
   30774      return value of F as the argument OFF to `REALIGN_LOAD'.
   30775      Therefore, the mask M returned by F should comply with the
   30776      semantics expected by `REALIGN_LOAD' described above.  If this
   30777      hook is not defined, then ADDR will be used as the argument OFF to
   30778      `REALIGN_LOAD', in which case the low log2(VS) - 1 bits of ADDR
   30779      will be considered.
   30780 
   30781  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN (tree X)
   30782      This hook should return the DECL of a function F that implements
   30783      widening multiplication of the even elements of two input vectors
   30784      of type X.
   30785 
   30786      If this hook is defined, the autovectorizer will use it along with
   30787      the `TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD' target hook when
   30788      vectorizing widening multiplication in cases that the order of the
   30789      results does not have to be preserved (e.g. used only by a
   30790      reduction computation). Otherwise, the `widen_mult_hi/lo' idioms
   30791      will be used.
   30792 
   30793  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD (tree X)
   30794      This hook should return the DECL of a function F that implements
   30795      widening multiplication of the odd elements of two input vectors
   30796      of type X.
   30797 
   30798      If this hook is defined, the autovectorizer will use it along with
   30799      the `TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN' target hook when
   30800      vectorizing widening multiplication in cases that the order of the
   30801      results does not have to be preserved (e.g. used only by a
   30802      reduction computation). Otherwise, the `widen_mult_hi/lo' idioms
   30803      will be used.
   30804 
   30805  -- Target Hook: int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST (enum
   30806           vect_cost_for_stmt TYPE_OF_COST, tree VECTYPE, int MISALIGN)
   30807      Returns cost of different scalar or vector statements for
   30808      vectorization cost model.  For vector memory operations the cost
   30809      may depend on type (VECTYPE) and misalignment value (MISALIGN).
   30810 
   30811  -- Target Hook: bool TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE
   30812           (const_tree TYPE, bool IS_PACKED)
   30813      Return true if vector alignment is reachable (by peeling N
   30814      iterations) for the given type.
   30815 
   30816  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VEC_PERM (tree TYPE,
   30817           tree *MASK_ELEMENT_TYPE)
   30818      Target builtin that implements vector permute.
   30819 
   30820  -- Target Hook: bool TARGET_VECTORIZE_BUILTIN_VEC_PERM_OK (tree
   30821           VEC_TYPE, tree MASK)
   30822      Return true if a vector created for `builtin_vec_perm' is valid.
   30823 
   30824  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_CONVERSION (unsigned
   30825           CODE, tree DEST_TYPE, tree SRC_TYPE)
   30826      This hook should return the DECL of a function that implements
   30827      conversion of the input vector of type SRC_TYPE to type DEST_TYPE.
   30828      The value of CODE is one of the enumerators in `enum tree_code' and
   30829      specifies how the conversion is to be applied (truncation,
   30830      rounding, etc.).
   30831 
   30832      If this hook is defined, the autovectorizer will use the
   30833      `TARGET_VECTORIZE_BUILTIN_CONVERSION' target hook when vectorizing
   30834      conversion. Otherwise, it will return `NULL_TREE'.
   30835 
   30836  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION
   30837           (tree FNDECL, tree VEC_TYPE_OUT, tree VEC_TYPE_IN)
   30838      This hook should return the decl of a function that implements the
   30839      vectorized variant of the builtin function with builtin function
   30840      code CODE or `NULL_TREE' if such a function is not available.  The
   30841      value of FNDECL is the builtin function declaration.  The return
   30842      type of the vectorized function shall be of vector type
   30843      VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN.
   30844 
   30845  -- Target Hook: bool TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT
   30846           (enum machine_mode MODE, const_tree TYPE, int MISALIGNMENT,
   30847           bool IS_PACKED)
   30848      This hook should return true if the target supports misaligned
   30849      vector store/load of a specific factor denoted in the MISALIGNMENT
   30850      parameter.  The vector store/load should be of machine mode MODE
   30851      and the elements in the vectors should be of type TYPE.  IS_PACKED
   30852      parameter is true if the memory access is defined in a packed
   30853      struct.
   30854 
   30855  -- Target Hook: enum machine_mode TARGET_VECTORIZE_PREFERRED_SIMD_MODE
   30856           (enum machine_mode MODE)
   30857      This hook should return the preferred mode for vectorizing scalar
   30858      mode MODE.  The default is equal to `word_mode', because the
   30859      vectorizer can do some transformations even in absence of
   30860      specialized SIMD hardware.
   30861 
   30862  -- Target Hook: unsigned int
   30863 TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES (void)
   30864      This hook should return a mask of sizes that should be iterated
   30865      over after trying to autovectorize using the vector size derived
   30866      from the mode returned by `TARGET_VECTORIZE_PREFERRED_SIMD_MODE'.
   30867      The default is zero which means to not iterate over other vector
   30868      sizes.
   30869 
   30870 
   30871 File: gccint.info,  Node: Anchored Addresses,  Next: Condition Code,  Prev: Addressing Modes,  Up: Target Macros
   30872 
   30873 17.15 Anchored Addresses
   30874 ========================
   30875 
   30876 GCC usually addresses every static object as a separate entity.  For
   30877 example, if we have:
   30878 
   30879      static int a, b, c;
   30880      int foo (void) { return a + b + c; }
   30881 
   30882  the code for `foo' will usually calculate three separate symbolic
   30883 addresses: those of `a', `b' and `c'.  On some targets, it would be
   30884 better to calculate just one symbolic address and access the three
   30885 variables relative to it.  The equivalent pseudocode would be something
   30886 like:
   30887 
   30888      int foo (void)
   30889      {
   30890        register int *xr = &x;
   30891        return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
   30892      }
   30893 
   30894  (which isn't valid C).  We refer to shared addresses like `x' as
   30895 "section anchors".  Their use is controlled by `-fsection-anchors'.
   30896 
   30897  The hooks below describe the target properties that GCC needs to know
   30898 in order to make effective use of section anchors.  It won't use
   30899 section anchors at all unless either `TARGET_MIN_ANCHOR_OFFSET' or
   30900 `TARGET_MAX_ANCHOR_OFFSET' is set to a nonzero value.
   30901 
   30902  -- Target Hook: HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET
   30903      The minimum offset that should be applied to a section anchor.  On
   30904      most targets, it should be the smallest offset that can be applied
   30905      to a base register while still giving a legitimate address for
   30906      every mode.  The default value is 0.
   30907 
   30908  -- Target Hook: HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET
   30909      Like `TARGET_MIN_ANCHOR_OFFSET', but the maximum (inclusive)
   30910      offset that should be applied to section anchors.  The default
   30911      value is 0.
   30912 
   30913  -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X)
   30914      Write the assembly code to define section anchor X, which is a
   30915      `SYMBOL_REF' for which `SYMBOL_REF_ANCHOR_P (X)' is true.  The
   30916      hook is called with the assembly output position set to the
   30917      beginning of `SYMBOL_REF_BLOCK (X)'.
   30918 
   30919      If `ASM_OUTPUT_DEF' is available, the hook's default definition
   30920      uses it to define the symbol as `. + SYMBOL_REF_BLOCK_OFFSET (X)'.
   30921      If `ASM_OUTPUT_DEF' is not available, the hook's default definition
   30922      is `NULL', which disables the use of section anchors altogether.
   30923 
   30924  -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (const_rtx X)
   30925      Return true if GCC should attempt to use anchors to access
   30926      `SYMBOL_REF' X.  You can assume `SYMBOL_REF_HAS_BLOCK_INFO_P (X)'
   30927      and `!SYMBOL_REF_ANCHOR_P (X)'.
   30928 
   30929      The default version is correct for most targets, but you might
   30930      need to intercept this hook to handle things like target-specific
   30931      attributes or target-specific sections.
   30932 
   30933 
   30934 File: gccint.info,  Node: Condition Code,  Next: Costs,  Prev: Anchored Addresses,  Up: Target Macros
   30935 
   30936 17.16 Condition Code Status
   30937 ===========================
   30938 
   30939 The macros in this section can be split in two families, according to
   30940 the two ways of representing condition codes in GCC.
   30941 
   30942  The first representation is the so called `(cc0)' representation
   30943 (*note Jump Patterns::), where all instructions can have an implicit
   30944 clobber of the condition codes.  The second is the condition code
   30945 register representation, which provides better schedulability for
   30946 architectures that do have a condition code register, but on which most
   30947 instructions do not affect it.  The latter category includes most RISC
   30948 machines.
   30949 
   30950  The implicit clobbering poses a strong restriction on the placement of
   30951 the definition and use of the condition code, which need to be in
   30952 adjacent insns for machines using `(cc0)'.  This can prevent important
   30953 optimizations on some machines.  For example, on the IBM RS/6000, there
   30954 is a delay for taken branches unless the condition code register is set
   30955 three instructions earlier than the conditional branch.  The instruction
   30956 scheduler cannot perform this optimization if it is not permitted to
   30957 separate the definition and use of the condition code register.
   30958 
   30959  For this reason, it is possible and suggested to use a register to
   30960 represent the condition code for new ports.  If there is a specific
   30961 condition code register in the machine, use a hard register.  If the
   30962 condition code or comparison result can be placed in any general
   30963 register, or if there are multiple condition registers, use a pseudo
   30964 register.  Registers used to store the condition code value will
   30965 usually have a mode that is in class `MODE_CC'.
   30966 
   30967  Alternatively, you can use `BImode' if the comparison operator is
   30968 specified already in the compare instruction.  In this case, you are not
   30969 interested in most macros in this section.
   30970 
   30971 * Menu:
   30972 
   30973 * CC0 Condition Codes::      Old style representation of condition codes.
   30974 * MODE_CC Condition Codes::  Modern representation of condition codes.
   30975 * Cond Exec Macros::         Macros to control conditional execution.
   30976 
   30977 
   30978 File: gccint.info,  Node: CC0 Condition Codes,  Next: MODE_CC Condition Codes,  Up: Condition Code
   30979 
   30980 17.16.1 Representation of condition codes using `(cc0)'
   30981 -------------------------------------------------------
   30982 
   30983 The file `conditions.h' defines a variable `cc_status' to describe how
   30984 the condition code was computed (in case the interpretation of the
   30985 condition code depends on the instruction that it was set by).  This
   30986 variable contains the RTL expressions on which the condition code is
   30987 currently based, and several standard flags.
   30988 
   30989  Sometimes additional machine-specific flags must be defined in the
   30990 machine description header file.  It can also add additional
   30991 machine-specific information by defining `CC_STATUS_MDEP'.
   30992 
   30993  -- Macro: CC_STATUS_MDEP
   30994      C code for a data type which is used for declaring the `mdep'
   30995      component of `cc_status'.  It defaults to `int'.
   30996 
   30997      This macro is not used on machines that do not use `cc0'.
   30998 
   30999  -- Macro: CC_STATUS_MDEP_INIT
   31000      A C expression to initialize the `mdep' field to "empty".  The
   31001      default definition does nothing, since most machines don't use the
   31002      field anyway.  If you want to use the field, you should probably
   31003      define this macro to initialize it.
   31004 
   31005      This macro is not used on machines that do not use `cc0'.
   31006 
   31007  -- Macro: NOTICE_UPDATE_CC (EXP, INSN)
   31008      A C compound statement to set the components of `cc_status'
   31009      appropriately for an insn INSN whose body is EXP.  It is this
   31010      macro's responsibility to recognize insns that set the condition
   31011      code as a byproduct of other activity as well as those that
   31012      explicitly set `(cc0)'.
   31013 
   31014      This macro is not used on machines that do not use `cc0'.
   31015 
   31016      If there are insns that do not set the condition code but do alter
   31017      other machine registers, this macro must check to see whether they
   31018      invalidate the expressions that the condition code is recorded as
   31019      reflecting.  For example, on the 68000, insns that store in address
   31020      registers do not set the condition code, which means that usually
   31021      `NOTICE_UPDATE_CC' can leave `cc_status' unaltered for such insns.
   31022      But suppose that the previous insn set the condition code based on
   31023      location `a4@(102)' and the current insn stores a new value in
   31024      `a4'.  Although the condition code is not changed by this, it will
   31025      no longer be true that it reflects the contents of `a4@(102)'.
   31026      Therefore, `NOTICE_UPDATE_CC' must alter `cc_status' in this case
   31027      to say that nothing is known about the condition code value.
   31028 
   31029      The definition of `NOTICE_UPDATE_CC' must be prepared to deal with
   31030      the results of peephole optimization: insns whose patterns are
   31031      `parallel' RTXs containing various `reg', `mem' or constants which
   31032      are just the operands.  The RTL structure of these insns is not
   31033      sufficient to indicate what the insns actually do.  What
   31034      `NOTICE_UPDATE_CC' should do when it sees one is just to run
   31035      `CC_STATUS_INIT'.
   31036 
   31037      A possible definition of `NOTICE_UPDATE_CC' is to call a function
   31038      that looks at an attribute (*note Insn Attributes::) named, for
   31039      example, `cc'.  This avoids having detailed information about
   31040      patterns in two places, the `md' file and in `NOTICE_UPDATE_CC'.
   31041 
   31042 
   31043 File: gccint.info,  Node: MODE_CC Condition Codes,  Next: Cond Exec Macros,  Prev: CC0 Condition Codes,  Up: Condition Code
   31044 
   31045 17.16.2 Representation of condition codes using registers
   31046 ---------------------------------------------------------
   31047 
   31048  -- Macro: SELECT_CC_MODE (OP, X, Y)
   31049      On many machines, the condition code may be produced by other
   31050      instructions than compares, for example the branch can use
   31051      directly the condition code set by a subtract instruction.
   31052      However, on some machines when the condition code is set this way
   31053      some bits (such as the overflow bit) are not set in the same way
   31054      as a test instruction, so that a different branch instruction must
   31055      be used for some conditional branches.  When this happens, use the
   31056      machine mode of the condition code register to record different
   31057      formats of the condition code register.  Modes can also be used to
   31058      record which compare instruction (e.g. a signed or an unsigned
   31059      comparison) produced the condition codes.
   31060 
   31061      If other modes than `CCmode' are required, add them to
   31062      `MACHINE-modes.def' and define `SELECT_CC_MODE' to choose a mode
   31063      given an operand of a compare.  This is needed because the modes
   31064      have to be chosen not only during RTL generation but also, for
   31065      example, by instruction combination.  The result of
   31066      `SELECT_CC_MODE' should be consistent with the mode used in the
   31067      patterns; for example to support the case of the add on the SPARC
   31068      discussed above, we have the pattern
   31069 
   31070           (define_insn ""
   31071             [(set (reg:CC_NOOV 0)
   31072                   (compare:CC_NOOV
   31073                     (plus:SI (match_operand:SI 0 "register_operand" "%r")
   31074                              (match_operand:SI 1 "arith_operand" "rI"))
   31075                     (const_int 0)))]
   31076             ""
   31077             "...")
   31078 
   31079      together with a `SELECT_CC_MODE' that returns `CC_NOOVmode' for
   31080      comparisons whose argument is a `plus':
   31081 
   31082           #define SELECT_CC_MODE(OP,X,Y) \
   31083             (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT          \
   31084              ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode)    \
   31085              : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS    \
   31086                  || GET_CODE (X) == NEG) \
   31087                 ? CC_NOOVmode : CCmode))
   31088 
   31089      Another reason to use modes is to retain information on which
   31090      operands were used by the comparison; see `REVERSIBLE_CC_MODE'
   31091      later in this section.
   31092 
   31093      You should define this macro if and only if you define extra CC
   31094      modes in `MACHINE-modes.def'.
   31095 
   31096  -- Macro: CANONICALIZE_COMPARISON (CODE, OP0, OP1)
   31097      On some machines not all possible comparisons are defined, but you
   31098      can convert an invalid comparison into a valid one.  For example,
   31099      the Alpha does not have a `GT' comparison, but you can use an `LT'
   31100      comparison instead and swap the order of the operands.
   31101 
   31102      On such machines, define this macro to be a C statement to do any
   31103      required conversions.  CODE is the initial comparison code and OP0
   31104      and OP1 are the left and right operands of the comparison,
   31105      respectively.  You should modify CODE, OP0, and OP1 as required.
   31106 
   31107      GCC will not assume that the comparison resulting from this macro
   31108      is valid but will see if the resulting insn matches a pattern in
   31109      the `md' file.
   31110 
   31111      You need not define this macro if it would never change the
   31112      comparison code or operands.
   31113 
   31114  -- Macro: REVERSIBLE_CC_MODE (MODE)
   31115      A C expression whose value is one if it is always safe to reverse a
   31116      comparison whose mode is MODE.  If `SELECT_CC_MODE' can ever
   31117      return MODE for a floating-point inequality comparison, then
   31118      `REVERSIBLE_CC_MODE (MODE)' must be zero.
   31119 
   31120      You need not define this macro if it would always returns zero or
   31121      if the floating-point format is anything other than
   31122      `IEEE_FLOAT_FORMAT'.  For example, here is the definition used on
   31123      the SPARC, where floating-point inequality comparisons are always
   31124      given `CCFPEmode':
   31125 
   31126           #define REVERSIBLE_CC_MODE(MODE)  ((MODE) != CCFPEmode)
   31127 
   31128  -- Macro: REVERSE_CONDITION (CODE, MODE)
   31129      A C expression whose value is reversed condition code of the CODE
   31130      for comparison done in CC_MODE MODE.  The macro is used only in
   31131      case `REVERSIBLE_CC_MODE (MODE)' is nonzero.  Define this macro in
   31132      case machine has some non-standard way how to reverse certain
   31133      conditionals.  For instance in case all floating point conditions
   31134      are non-trapping, compiler may freely convert unordered compares
   31135      to ordered one.  Then definition may look like:
   31136 
   31137           #define REVERSE_CONDITION(CODE, MODE) \
   31138              ((MODE) != CCFPmode ? reverse_condition (CODE) \
   31139               : reverse_condition_maybe_unordered (CODE))
   31140 
   31141  -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int
   31142           *P1, unsigned int *P2)
   31143      On targets which do not use `(cc0)', and which use a hard register
   31144      rather than a pseudo-register to hold condition codes, the regular
   31145      CSE passes are often not able to identify cases in which the hard
   31146      register is set to a common value.  Use this hook to enable a
   31147      small pass which optimizes such cases.  This hook should return
   31148      true to enable this pass, and it should set the integers to which
   31149      its arguments point to the hard register numbers used for
   31150      condition codes.  When there is only one such register, as is true
   31151      on most systems, the integer pointed to by P2 should be set to
   31152      `INVALID_REGNUM'.
   31153 
   31154      The default version of this hook returns false.
   31155 
   31156  -- Target Hook: enum machine_mode TARGET_CC_MODES_COMPATIBLE (enum
   31157           machine_mode M1, enum machine_mode M2)
   31158      On targets which use multiple condition code modes in class
   31159      `MODE_CC', it is sometimes the case that a comparison can be
   31160      validly done in more than one mode.  On such a system, define this
   31161      target hook to take two mode arguments and to return a mode in
   31162      which both comparisons may be validly done.  If there is no such
   31163      mode, return `VOIDmode'.
   31164 
   31165      The default version of this hook checks whether the modes are the
   31166      same.  If they are, it returns that mode.  If they are different,
   31167      it returns `VOIDmode'.
   31168 
   31169 
   31170 File: gccint.info,  Node: Cond Exec Macros,  Prev: MODE_CC Condition Codes,  Up: Condition Code
   31171 
   31172 17.16.3 Macros to control conditional execution
   31173 -----------------------------------------------
   31174 
   31175 There is one macro that may need to be defined for targets supporting
   31176 conditional execution, independent of how they represent conditional
   31177 branches.
   31178 
   31179  -- Macro: REVERSE_CONDEXEC_PREDICATES_P (OP1, OP2)
   31180      A C expression that returns true if the conditional execution
   31181      predicate OP1, a comparison operation, is the inverse of OP2 and
   31182      vice versa.  Define this to return 0 if the target has conditional
   31183      execution predicates that cannot be reversed safely.  There is no
   31184      need to validate that the arguments of op1 and op2 are the same,
   31185      this is done separately.  If no expansion is specified, this macro
   31186      is defined as follows:
   31187 
   31188           #define REVERSE_CONDEXEC_PREDICATES_P (x, y) \
   31189              (GET_CODE ((x)) == reversed_comparison_code ((y), NULL))
   31190 
   31191 
   31192 File: gccint.info,  Node: Costs,  Next: Scheduling,  Prev: Condition Code,  Up: Target Macros
   31193 
   31194 17.17 Describing Relative Costs of Operations
   31195 =============================================
   31196 
   31197 These macros let you describe the relative speed of various operations
   31198 on the target machine.
   31199 
   31200  -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO)
   31201      A C expression for the cost of moving data of mode MODE from a
   31202      register in class FROM to one in class TO.  The classes are
   31203      expressed using the enumeration values such as `GENERAL_REGS'.  A
   31204      value of 2 is the default; other values are interpreted relative to
   31205      that.
   31206 
   31207      It is not required that the cost always equal 2 when FROM is the
   31208      same as TO; on some machines it is expensive to move between
   31209      registers if they are not general registers.
   31210 
   31211      If reload sees an insn consisting of a single `set' between two
   31212      hard registers, and if `REGISTER_MOVE_COST' applied to their
   31213      classes returns a value of 2, reload does not check to ensure that
   31214      the constraints of the insn are met.  Setting a cost of other than
   31215      2 will allow reload to verify that the constraints are met.  You
   31216      should do this if the `movM' pattern's constraints do not allow
   31217      such copying.
   31218 
   31219      These macros are obsolete, new ports should use the target hook
   31220      `TARGET_REGISTER_MOVE_COST' instead.
   31221 
   31222  -- Target Hook: int TARGET_REGISTER_MOVE_COST (enum machine_mode MODE,
   31223           reg_class_t FROM, reg_class_t TO)
   31224      This target hook should return the cost of moving data of mode MODE
   31225      from a register in class FROM to one in class TO.  The classes are
   31226      expressed using the enumeration values such as `GENERAL_REGS'.  A
   31227      value of 2 is the default; other values are interpreted relative to
   31228      that.
   31229 
   31230      It is not required that the cost always equal 2 when FROM is the
   31231      same as TO; on some machines it is expensive to move between
   31232      registers if they are not general registers.
   31233 
   31234      If reload sees an insn consisting of a single `set' between two
   31235      hard registers, and if `TARGET_REGISTER_MOVE_COST' applied to their
   31236      classes returns a value of 2, reload does not check to ensure that
   31237      the constraints of the insn are met.  Setting a cost of other than
   31238      2 will allow reload to verify that the constraints are met.  You
   31239      should do this if the `movM' pattern's constraints do not allow
   31240      such copying.
   31241 
   31242      The default version of this function returns 2.
   31243 
   31244  -- Macro: MEMORY_MOVE_COST (MODE, CLASS, IN)
   31245      A C expression for the cost of moving data of mode MODE between a
   31246      register of class CLASS and memory; IN is zero if the value is to
   31247      be written to memory, nonzero if it is to be read in.  This cost
   31248      is relative to those in `REGISTER_MOVE_COST'.  If moving between
   31249      registers and memory is more expensive than between two registers,
   31250      you should define this macro to express the relative cost.
   31251 
   31252      If you do not define this macro, GCC uses a default cost of 4 plus
   31253      the cost of copying via a secondary reload register, if one is
   31254      needed.  If your machine requires a secondary reload register to
   31255      copy between memory and a register of CLASS but the reload
   31256      mechanism is more complex than copying via an intermediate, define
   31257      this macro to reflect the actual cost of the move.
   31258 
   31259      GCC defines the function `memory_move_secondary_cost' if secondary
   31260      reloads are needed.  It computes the costs due to copying via a
   31261      secondary register.  If your machine copies from memory using a
   31262      secondary register in the conventional way but the default base
   31263      value of 4 is not correct for your machine, define this macro to
   31264      add some other value to the result of that function.  The
   31265      arguments to that function are the same as to this macro.
   31266 
   31267      These macros are obsolete, new ports should use the target hook
   31268      `TARGET_MEMORY_MOVE_COST' instead.
   31269 
   31270  -- Target Hook: int TARGET_MEMORY_MOVE_COST (enum machine_mode MODE,
   31271           reg_class_t RCLASS, bool IN)
   31272      This target hook should return the cost of moving data of mode MODE
   31273      between a register of class RCLASS and memory; IN is `false' if
   31274      the value is to be written to memory, `true' if it is to be read
   31275      in.  This cost is relative to those in `TARGET_REGISTER_MOVE_COST'.
   31276      If moving between registers and memory is more expensive than
   31277      between two registers, you should add this target hook to express
   31278      the relative cost.
   31279 
   31280      If you do not add this target hook, GCC uses a default cost of 4
   31281      plus the cost of copying via a secondary reload register, if one is
   31282      needed.  If your machine requires a secondary reload register to
   31283      copy between memory and a register of RCLASS but the reload
   31284      mechanism is more complex than copying via an intermediate, use
   31285      this target hook to reflect the actual cost of the move.
   31286 
   31287      GCC defines the function `memory_move_secondary_cost' if secondary
   31288      reloads are needed.  It computes the costs due to copying via a
   31289      secondary register.  If your machine copies from memory using a
   31290      secondary register in the conventional way but the default base
   31291      value of 4 is not correct for your machine, use this target hook
   31292      to add some other value to the result of that function.  The
   31293      arguments to that function are the same as to this target hook.
   31294 
   31295  -- Macro: BRANCH_COST (SPEED_P, PREDICTABLE_P)
   31296      A C expression for the cost of a branch instruction.  A value of 1
   31297      is the default; other values are interpreted relative to that.
   31298      Parameter SPEED_P is true when the branch in question should be
   31299      optimized for speed.  When it is false, `BRANCH_COST' should
   31300      return a value optimal for code size rather than performance.
   31301      PREDICTABLE_P is true for well-predicted branches. On many
   31302      architectures the `BRANCH_COST' can be reduced then.
   31303 
   31304  Here are additional macros which do not specify precise relative costs,
   31305 but only that certain actions are more expensive than GCC would
   31306 ordinarily expect.
   31307 
   31308  -- Macro: SLOW_BYTE_ACCESS
   31309      Define this macro as a C expression which is nonzero if accessing
   31310      less than a word of memory (i.e. a `char' or a `short') is no
   31311      faster than accessing a word of memory, i.e., if such access
   31312      require more than one instruction or if there is no difference in
   31313      cost between byte and (aligned) word loads.
   31314 
   31315      When this macro is not defined, the compiler will access a field by
   31316      finding the smallest containing object; when it is defined, a
   31317      fullword load will be used if alignment permits.  Unless bytes
   31318      accesses are faster than word accesses, using word accesses is
   31319      preferable since it may eliminate subsequent memory access if
   31320      subsequent accesses occur to other fields in the same word of the
   31321      structure, but to different bytes.
   31322 
   31323  -- Macro: SLOW_UNALIGNED_ACCESS (MODE, ALIGNMENT)
   31324      Define this macro to be the value 1 if memory accesses described
   31325      by the MODE and ALIGNMENT parameters have a cost many times greater
   31326      than aligned accesses, for example if they are emulated in a trap
   31327      handler.
   31328 
   31329      When this macro is nonzero, the compiler will act as if
   31330      `STRICT_ALIGNMENT' were nonzero when generating code for block
   31331      moves.  This can cause significantly more instructions to be
   31332      produced.  Therefore, do not set this macro nonzero if unaligned
   31333      accesses only add a cycle or two to the time for a memory access.
   31334 
   31335      If the value of this macro is always zero, it need not be defined.
   31336      If this macro is defined, it should produce a nonzero value when
   31337      `STRICT_ALIGNMENT' is nonzero.
   31338 
   31339  -- Macro: MOVE_RATIO (SPEED)
   31340      The threshold of number of scalar memory-to-memory move insns,
   31341      _below_ which a sequence of insns should be generated instead of a
   31342      string move insn or a library call.  Increasing the value will
   31343      always make code faster, but eventually incurs high cost in
   31344      increased code size.
   31345 
   31346      Note that on machines where the corresponding move insn is a
   31347      `define_expand' that emits a sequence of insns, this macro counts
   31348      the number of such sequences.
   31349 
   31350      The parameter SPEED is true if the code is currently being
   31351      optimized for speed rather than size.
   31352 
   31353      If you don't define this, a reasonable default is used.
   31354 
   31355  -- Macro: MOVE_BY_PIECES_P (SIZE, ALIGNMENT)
   31356      A C expression used to determine whether `move_by_pieces' will be
   31357      used to copy a chunk of memory, or whether some other block move
   31358      mechanism will be used.  Defaults to 1 if `move_by_pieces_ninsns'
   31359      returns less than `MOVE_RATIO'.
   31360 
   31361  -- Macro: MOVE_MAX_PIECES
   31362      A C expression used by `move_by_pieces' to determine the largest
   31363      unit a load or store used to copy memory is.  Defaults to
   31364      `MOVE_MAX'.
   31365 
   31366  -- Macro: CLEAR_RATIO (SPEED)
   31367      The threshold of number of scalar move insns, _below_ which a
   31368      sequence of insns should be generated to clear memory instead of a
   31369      string clear insn or a library call.  Increasing the value will
   31370      always make code faster, but eventually incurs high cost in
   31371      increased code size.
   31372 
   31373      The parameter SPEED is true if the code is currently being
   31374      optimized for speed rather than size.
   31375 
   31376      If you don't define this, a reasonable default is used.
   31377 
   31378  -- Macro: CLEAR_BY_PIECES_P (SIZE, ALIGNMENT)
   31379      A C expression used to determine whether `clear_by_pieces' will be
   31380      used to clear a chunk of memory, or whether some other block clear
   31381      mechanism will be used.  Defaults to 1 if `move_by_pieces_ninsns'
   31382      returns less than `CLEAR_RATIO'.
   31383 
   31384  -- Macro: SET_RATIO (SPEED)
   31385      The threshold of number of scalar move insns, _below_ which a
   31386      sequence of insns should be generated to set memory to a constant
   31387      value, instead of a block set insn or a library call.  Increasing
   31388      the value will always make code faster, but eventually incurs high
   31389      cost in increased code size.
   31390 
   31391      The parameter SPEED is true if the code is currently being
   31392      optimized for speed rather than size.
   31393 
   31394      If you don't define this, it defaults to the value of `MOVE_RATIO'.
   31395 
   31396  -- Macro: SET_BY_PIECES_P (SIZE, ALIGNMENT)
   31397      A C expression used to determine whether `store_by_pieces' will be
   31398      used to set a chunk of memory to a constant value, or whether some
   31399      other mechanism will be used.  Used by `__builtin_memset' when
   31400      storing values other than constant zero.  Defaults to 1 if
   31401      `move_by_pieces_ninsns' returns less than `SET_RATIO'.
   31402 
   31403  -- Macro: STORE_BY_PIECES_P (SIZE, ALIGNMENT)
   31404      A C expression used to determine whether `store_by_pieces' will be
   31405      used to set a chunk of memory to a constant string value, or
   31406      whether some other mechanism will be used.  Used by
   31407      `__builtin_strcpy' when called with a constant source string.
   31408      Defaults to 1 if `move_by_pieces_ninsns' returns less than
   31409      `MOVE_RATIO'.
   31410 
   31411  -- Macro: USE_LOAD_POST_INCREMENT (MODE)
   31412      A C expression used to determine whether a load postincrement is a
   31413      good thing to use for a given mode.  Defaults to the value of
   31414      `HAVE_POST_INCREMENT'.
   31415 
   31416  -- Macro: USE_LOAD_POST_DECREMENT (MODE)
   31417      A C expression used to determine whether a load postdecrement is a
   31418      good thing to use for a given mode.  Defaults to the value of
   31419      `HAVE_POST_DECREMENT'.
   31420 
   31421  -- Macro: USE_LOAD_PRE_INCREMENT (MODE)
   31422      A C expression used to determine whether a load preincrement is a
   31423      good thing to use for a given mode.  Defaults to the value of
   31424      `HAVE_PRE_INCREMENT'.
   31425 
   31426  -- Macro: USE_LOAD_PRE_DECREMENT (MODE)
   31427      A C expression used to determine whether a load predecrement is a
   31428      good thing to use for a given mode.  Defaults to the value of
   31429      `HAVE_PRE_DECREMENT'.
   31430 
   31431  -- Macro: USE_STORE_POST_INCREMENT (MODE)
   31432      A C expression used to determine whether a store postincrement is
   31433      a good thing to use for a given mode.  Defaults to the value of
   31434      `HAVE_POST_INCREMENT'.
   31435 
   31436  -- Macro: USE_STORE_POST_DECREMENT (MODE)
   31437      A C expression used to determine whether a store postdecrement is
   31438      a good thing to use for a given mode.  Defaults to the value of
   31439      `HAVE_POST_DECREMENT'.
   31440 
   31441  -- Macro: USE_STORE_PRE_INCREMENT (MODE)
   31442      This macro is used to determine whether a store preincrement is a
   31443      good thing to use for a given mode.  Defaults to the value of
   31444      `HAVE_PRE_INCREMENT'.
   31445 
   31446  -- Macro: USE_STORE_PRE_DECREMENT (MODE)
   31447      This macro is used to determine whether a store predecrement is a
   31448      good thing to use for a given mode.  Defaults to the value of
   31449      `HAVE_PRE_DECREMENT'.
   31450 
   31451  -- Macro: NO_FUNCTION_CSE
   31452      Define this macro if it is as good or better to call a constant
   31453      function address than to call an address kept in a register.
   31454 
   31455  -- Macro: RANGE_TEST_NON_SHORT_CIRCUIT
   31456      Define this macro if a non-short-circuit operation produced by
   31457      `fold_range_test ()' is optimal.  This macro defaults to true if
   31458      `BRANCH_COST' is greater than or equal to the value 2.
   31459 
   31460  -- Target Hook: bool TARGET_RTX_COSTS (rtx X, int CODE, int
   31461           OUTER_CODE, int *TOTAL, bool SPEED)
   31462      This target hook describes the relative costs of RTL expressions.
   31463 
   31464      The cost may depend on the precise form of the expression, which is
   31465      available for examination in X, and the rtx code of the expression
   31466      in which it is contained, found in OUTER_CODE.  CODE is the
   31467      expression code--redundant, since it can be obtained with
   31468      `GET_CODE (X)'.
   31469 
   31470      In implementing this hook, you can use the construct
   31471      `COSTS_N_INSNS (N)' to specify a cost equal to N fast instructions.
   31472 
   31473      On entry to the hook, `*TOTAL' contains a default estimate for the
   31474      cost of the expression.  The hook should modify this value as
   31475      necessary.  Traditionally, the default costs are `COSTS_N_INSNS
   31476      (5)' for multiplications, `COSTS_N_INSNS (7)' for division and
   31477      modulus operations, and `COSTS_N_INSNS (1)' for all other
   31478      operations.
   31479 
   31480      When optimizing for code size, i.e. when `speed' is false, this
   31481      target hook should be used to estimate the relative size cost of
   31482      an expression, again relative to `COSTS_N_INSNS'.
   31483 
   31484      The hook returns true when all subexpressions of X have been
   31485      processed, and false when `rtx_cost' should recurse.
   31486 
   31487  -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS, bool SPEED)
   31488      This hook computes the cost of an addressing mode that contains
   31489      ADDRESS.  If not defined, the cost is computed from the ADDRESS
   31490      expression and the `TARGET_RTX_COST' hook.
   31491 
   31492      For most CISC machines, the default cost is a good approximation
   31493      of the true cost of the addressing mode.  However, on RISC
   31494      machines, all instructions normally have the same length and
   31495      execution time.  Hence all addresses will have equal costs.
   31496 
   31497      In cases where more than one form of an address is known, the form
   31498      with the lowest cost will be used.  If multiple forms have the
   31499      same, lowest, cost, the one that is the most complex will be used.
   31500 
   31501      For example, suppose an address that is equal to the sum of a
   31502      register and a constant is used twice in the same basic block.
   31503      When this macro is not defined, the address will be computed in a
   31504      register and memory references will be indirect through that
   31505      register.  On machines where the cost of the addressing mode
   31506      containing the sum is no higher than that of a simple indirect
   31507      reference, this will produce an additional instruction and
   31508      possibly require an additional register.  Proper specification of
   31509      this macro eliminates this overhead for such machines.
   31510 
   31511      This hook is never called with an invalid address.
   31512 
   31513      On machines where an address involving more than one register is as
   31514      cheap as an address computation involving only one register,
   31515      defining `TARGET_ADDRESS_COST' to reflect this can cause two
   31516      registers to be live over a region of code where only one would
   31517      have been if `TARGET_ADDRESS_COST' were not defined in that
   31518      manner.  This effect should be considered in the definition of
   31519      this macro.  Equivalent costs should probably only be given to
   31520      addresses with different numbers of registers on machines with
   31521      lots of registers.
   31522 
   31523 
   31524 File: gccint.info,  Node: Scheduling,  Next: Sections,  Prev: Costs,  Up: Target Macros
   31525 
   31526 17.18 Adjusting the Instruction Scheduler
   31527 =========================================
   31528 
   31529 The instruction scheduler may need a fair amount of machine-specific
   31530 adjustment in order to produce good code.  GCC provides several target
   31531 hooks for this purpose.  It is usually enough to define just a few of
   31532 them: try the first ones in this list first.
   31533 
   31534  -- Target Hook: int TARGET_SCHED_ISSUE_RATE (void)
   31535      This hook returns the maximum number of instructions that can ever
   31536      issue at the same time on the target machine.  The default is one.
   31537      Although the insn scheduler can define itself the possibility of
   31538      issue an insn on the same cycle, the value can serve as an
   31539      additional constraint to issue insns on the same simulated
   31540      processor cycle (see hooks `TARGET_SCHED_REORDER' and
   31541      `TARGET_SCHED_REORDER2').  This value must be constant over the
   31542      entire compilation.  If you need it to vary depending on what the
   31543      instructions are, you must use `TARGET_SCHED_VARIABLE_ISSUE'.
   31544 
   31545  -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int
   31546           VERBOSE, rtx INSN, int MORE)
   31547      This hook is executed by the scheduler after it has scheduled an
   31548      insn from the ready list.  It should return the number of insns
   31549      which can still be issued in the current cycle.  The default is
   31550      `MORE - 1' for insns other than `CLOBBER' and `USE', which
   31551      normally are not counted against the issue rate.  You should
   31552      define this hook if some insns take more machine resources than
   31553      others, so that fewer insns can follow them in the same cycle.
   31554      FILE is either a null pointer, or a stdio stream to write any
   31555      debug output to.  VERBOSE is the verbose level provided by
   31556      `-fsched-verbose-N'.  INSN is the instruction that was scheduled.
   31557 
   31558  -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx INSN, rtx LINK, rtx
   31559           DEP_INSN, int COST)
   31560      This function corrects the value of COST based on the relationship
   31561      between INSN and DEP_INSN through the dependence LINK.  It should
   31562      return the new value.  The default is to make no adjustment to
   31563      COST.  This can be used for example to specify to the scheduler
   31564      using the traditional pipeline description that an output- or
   31565      anti-dependence does not incur the same cost as a data-dependence.
   31566      If the scheduler using the automaton based pipeline description,
   31567      the cost of anti-dependence is zero and the cost of
   31568      output-dependence is maximum of one and the difference of latency
   31569      times of the first and the second insns.  If these values are not
   31570      acceptable, you could use the hook to modify them too.  See also
   31571      *note Processor pipeline description::.
   31572 
   31573  -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx INSN, int
   31574           PRIORITY)
   31575      This hook adjusts the integer scheduling priority PRIORITY of
   31576      INSN.  It should return the new priority.  Increase the priority to
   31577      execute INSN earlier, reduce the priority to execute INSN later.
   31578      Do not define this hook if you do not need to adjust the
   31579      scheduling priorities of insns.
   31580 
   31581  -- Target Hook: int TARGET_SCHED_REORDER (FILE *FILE, int VERBOSE, rtx
   31582           *READY, int *N_READYP, int CLOCK)
   31583      This hook is executed by the scheduler after it has scheduled the
   31584      ready list, to allow the machine description to reorder it (for
   31585      example to combine two small instructions together on `VLIW'
   31586      machines).  FILE is either a null pointer, or a stdio stream to
   31587      write any debug output to.  VERBOSE is the verbose level provided
   31588      by `-fsched-verbose-N'.  READY is a pointer to the ready list of
   31589      instructions that are ready to be scheduled.  N_READYP is a
   31590      pointer to the number of elements in the ready list.  The scheduler
   31591      reads the ready list in reverse order, starting with
   31592      READY[*N_READYP - 1] and going to READY[0].  CLOCK is the timer
   31593      tick of the scheduler.  You may modify the ready list and the
   31594      number of ready insns.  The return value is the number of insns
   31595      that can issue this cycle; normally this is just `issue_rate'.
   31596      See also `TARGET_SCHED_REORDER2'.
   31597 
   31598  -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE,
   31599           rtx *READY, int *N_READYP, int CLOCK)
   31600      Like `TARGET_SCHED_REORDER', but called at a different time.  That
   31601      function is called whenever the scheduler starts a new cycle.
   31602      This one is called once per iteration over a cycle, immediately
   31603      after `TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list
   31604      and return the number of insns to be scheduled in the same cycle.
   31605      Defining this hook can be useful if there are frequent situations
   31606      where scheduling one insn causes other insns to become ready in
   31607      the same cycle.  These other insns can then be taken into account
   31608      properly.
   31609 
   31610  -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK (rtx
   31611           HEAD, rtx TAIL)
   31612      This hook is called after evaluation forward dependencies of insns
   31613      in chain given by two parameter values (HEAD and TAIL
   31614      correspondingly) but before insns scheduling of the insn chain.
   31615      For example, it can be used for better insn classification if it
   31616      requires analysis of dependencies.  This hook can use backward and
   31617      forward dependencies of the insn scheduler because they are already
   31618      calculated.
   31619 
   31620  -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int
   31621           MAX_READY)
   31622      This hook is executed by the scheduler at the beginning of each
   31623      block of instructions that are to be scheduled.  FILE is either a
   31624      null pointer, or a stdio stream to write any debug output to.
   31625      VERBOSE is the verbose level provided by `-fsched-verbose-N'.
   31626      MAX_READY is the maximum number of insns in the current scheduling
   31627      region that can be live at the same time.  This can be used to
   31628      allocate scratch space if it is needed, e.g. by
   31629      `TARGET_SCHED_REORDER'.
   31630 
   31631  -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE)
   31632      This hook is executed by the scheduler at the end of each block of
   31633      instructions that are to be scheduled.  It can be used to perform
   31634      cleanup of any actions done by the other scheduling hooks.  FILE
   31635      is either a null pointer, or a stdio stream to write any debug
   31636      output to.  VERBOSE is the verbose level provided by
   31637      `-fsched-verbose-N'.
   31638 
   31639  -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int
   31640           VERBOSE, int OLD_MAX_UID)
   31641      This hook is executed by the scheduler after function level
   31642      initializations.  FILE is either a null pointer, or a stdio stream
   31643      to write any debug output to.  VERBOSE is the verbose level
   31644      provided by `-fsched-verbose-N'.  OLD_MAX_UID is the maximum insn
   31645      uid when scheduling begins.
   31646 
   31647  -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int
   31648           VERBOSE)
   31649      This is the cleanup hook corresponding to
   31650      `TARGET_SCHED_INIT_GLOBAL'.  FILE is either a null pointer, or a
   31651      stdio stream to write any debug output to.  VERBOSE is the verbose
   31652      level provided by `-fsched-verbose-N'.
   31653 
   31654  -- Target Hook: rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void)
   31655      The hook returns an RTL insn.  The automaton state used in the
   31656      pipeline hazard recognizer is changed as if the insn were scheduled
   31657      when the new simulated processor cycle starts.  Usage of the hook
   31658      may simplify the automaton pipeline description for some VLIW
   31659      processors.  If the hook is defined, it is used only for the
   31660      automaton based pipeline description.  The default is not to
   31661      change the state when the new simulated processor cycle starts.
   31662 
   31663  -- Target Hook: void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void)
   31664      The hook can be used to initialize data used by the previous hook.
   31665 
   31666  -- Target Hook: rtx TARGET_SCHED_DFA_POST_CYCLE_INSN (void)
   31667      The hook is analogous to `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used
   31668      to changed the state as if the insn were scheduled when the new
   31669      simulated processor cycle finishes.
   31670 
   31671  -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void)
   31672      The hook is analogous to `TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but
   31673      used to initialize data used by the previous hook.
   31674 
   31675  -- Target Hook: void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void)
   31676      The hook to notify target that the current simulated cycle is
   31677      about to finish.  The hook is analogous to
   31678      `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used to change the state in
   31679      more complicated situations - e.g., when advancing state on a
   31680      single insn is not enough.
   31681 
   31682  -- Target Hook: void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void)
   31683      The hook to notify target that new simulated cycle has just
   31684      started.  The hook is analogous to
   31685      `TARGET_SCHED_DFA_POST_CYCLE_INSN' but used to change the state in
   31686      more complicated situations - e.g., when advancing state on a
   31687      single insn is not enough.
   31688 
   31689  -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
   31690           (void)
   31691      This hook controls better choosing an insn from the ready insn
   31692      queue for the DFA-based insn scheduler.  Usually the scheduler
   31693      chooses the first insn from the queue.  If the hook returns a
   31694      positive value, an additional scheduler code tries all
   31695      permutations of `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
   31696      ()' subsequent ready insns to choose an insn whose issue will
   31697      result in maximal number of issued insns on the same cycle.  For
   31698      the VLIW processor, the code could actually solve the problem of
   31699      packing simple insns into the VLIW insn.  Of course, if the rules
   31700      of VLIW packing are described in the automaton.
   31701 
   31702      This code also could be used for superscalar RISC processors.  Let
   31703      us consider a superscalar RISC processor with 3 pipelines.  Some
   31704      insns can be executed in pipelines A or B, some insns can be
   31705      executed only in pipelines B or C, and one insn can be executed in
   31706      pipeline B.  The processor may issue the 1st insn into A and the
   31707      2nd one into B.  In this case, the 3rd insn will wait for freeing B
   31708      until the next cycle.  If the scheduler issues the 3rd insn the
   31709      first, the processor could issue all 3 insns per cycle.
   31710 
   31711      Actually this code demonstrates advantages of the automaton based
   31712      pipeline hazard recognizer.  We try quickly and easy many insn
   31713      schedules to choose the best one.
   31714 
   31715      The default is no multipass scheduling.
   31716 
   31717  -- Target Hook: int
   31718 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD (rtx INSN)
   31719      This hook controls what insns from the ready insn queue will be
   31720      considered for the multipass insn scheduling.  If the hook returns
   31721      zero for INSN, the insn will be not chosen to be issued.
   31722 
   31723      The default is that any ready insns can be chosen to be issued.
   31724 
   31725  -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN (void
   31726           *DATA, char *READY_TRY, int N_READY, bool FIRST_CYCLE_INSN_P)
   31727      This hook prepares the target backend for a new round of multipass
   31728      scheduling.
   31729 
   31730  -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE (void
   31731           *DATA, char *READY_TRY, int N_READY, rtx INSN, const void
   31732           *PREV_DATA)
   31733      This hook is called when multipass scheduling evaluates
   31734      instruction INSN.
   31735 
   31736  -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK
   31737           (const void *DATA, char *READY_TRY, int N_READY)
   31738      This is called when multipass scheduling backtracks from
   31739      evaluation of an instruction.
   31740 
   31741  -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END (const
   31742           void *DATA)
   31743      This hook notifies the target about the result of the concluded
   31744      current round of multipass scheduling.
   31745 
   31746  -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT (void
   31747           *DATA)
   31748      This hook initializes target-specific data used in multipass
   31749      scheduling.
   31750 
   31751  -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI (void
   31752           *DATA)
   31753      This hook finalizes target-specific data used in multipass
   31754      scheduling.
   31755 
   31756  -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *DUMP, int
   31757           VERBOSE, rtx INSN, int LAST_CLOCK, int CLOCK, int *SORT_P)
   31758      This hook is called by the insn scheduler before issuing INSN on
   31759      cycle CLOCK.  If the hook returns nonzero, INSN is not issued on
   31760      this processor cycle.  Instead, the processor cycle is advanced.
   31761      If *SORT_P is zero, the insn ready queue is not sorted on the new
   31762      cycle start as usually.  DUMP and VERBOSE specify the file and
   31763      verbosity level to use for debugging output.  LAST_CLOCK and CLOCK
   31764      are, respectively, the processor cycle on which the previous insn
   31765      has been issued, and the current processor cycle.
   31766 
   31767  -- Target Hook: bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct _dep
   31768           *_DEP, int COST, int DISTANCE)
   31769      This hook is used to define which dependences are considered
   31770      costly by the target, so costly that it is not advisable to
   31771      schedule the insns that are involved in the dependence too close
   31772      to one another.  The parameters to this hook are as follows:  The
   31773      first parameter _DEP is the dependence being evaluated.  The
   31774      second parameter COST is the cost of the dependence as estimated
   31775      by the scheduler, and the third parameter DISTANCE is the distance
   31776      in cycles between the two insns.  The hook returns `true' if
   31777      considering the distance between the two insns the dependence
   31778      between them is considered costly by the target, and `false'
   31779      otherwise.
   31780 
   31781      Defining this hook can be useful in multiple-issue out-of-order
   31782      machines, where (a) it's practically hopeless to predict the
   31783      actual data/resource delays, however: (b) there's a better chance
   31784      to predict the actual grouping that will be formed, and (c)
   31785      correctly emulating the grouping can be very important.  In such
   31786      targets one may want to allow issuing dependent insns closer to
   31787      one another--i.e., closer than the dependence distance;  however,
   31788      not in cases of "costly dependences", which this hooks allows to
   31789      define.
   31790 
   31791  -- Target Hook: void TARGET_SCHED_H_I_D_EXTENDED (void)
   31792      This hook is called by the insn scheduler after emitting a new
   31793      instruction to the instruction stream.  The hook notifies a target
   31794      backend to extend its per instruction data structures.
   31795 
   31796  -- Target Hook: void * TARGET_SCHED_ALLOC_SCHED_CONTEXT (void)
   31797      Return a pointer to a store large enough to hold target scheduling
   31798      context.
   31799 
   31800  -- Target Hook: void TARGET_SCHED_INIT_SCHED_CONTEXT (void *TC, bool
   31801           CLEAN_P)
   31802      Initialize store pointed to by TC to hold target scheduling
   31803      context.  It CLEAN_P is true then initialize TC as if scheduler is
   31804      at the beginning of the block.  Otherwise, copy the current
   31805      context into TC.
   31806 
   31807  -- Target Hook: void TARGET_SCHED_SET_SCHED_CONTEXT (void *TC)
   31808      Copy target scheduling context pointed to by TC to the current
   31809      context.
   31810 
   31811  -- Target Hook: void TARGET_SCHED_CLEAR_SCHED_CONTEXT (void *TC)
   31812      Deallocate internal data in target scheduling context pointed to
   31813      by TC.
   31814 
   31815  -- Target Hook: void TARGET_SCHED_FREE_SCHED_CONTEXT (void *TC)
   31816      Deallocate a store for target scheduling context pointed to by TC.
   31817 
   31818  -- Target Hook: int TARGET_SCHED_SPECULATE_INSN (rtx INSN, int
   31819           REQUEST, rtx *NEW_PAT)
   31820      This hook is called by the insn scheduler when INSN has only
   31821      speculative dependencies and therefore can be scheduled
   31822      speculatively.  The hook is used to check if the pattern of INSN
   31823      has a speculative version and, in case of successful check, to
   31824      generate that speculative pattern.  The hook should return 1, if
   31825      the instruction has a speculative form, or -1, if it doesn't.
   31826      REQUEST describes the type of requested speculation.  If the
   31827      return value equals 1 then NEW_PAT is assigned the generated
   31828      speculative pattern.
   31829 
   31830  -- Target Hook: bool TARGET_SCHED_NEEDS_BLOCK_P (int DEP_STATUS)
   31831      This hook is called by the insn scheduler during generation of
   31832      recovery code for INSN.  It should return `true', if the
   31833      corresponding check instruction should branch to recovery code, or
   31834      `false' otherwise.
   31835 
   31836  -- Target Hook: rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx INSN, rtx LABEL,
   31837           int MUTATE_P)
   31838      This hook is called by the insn scheduler to generate a pattern
   31839      for recovery check instruction.  If MUTATE_P is zero, then INSN is
   31840      a speculative instruction for which the check should be generated.
   31841      LABEL is either a label of a basic block, where recovery code
   31842      should be emitted, or a null pointer, when requested check doesn't
   31843      branch to recovery code (a simple check).  If MUTATE_P is nonzero,
   31844      then a pattern for a branchy check corresponding to a simple check
   31845      denoted by INSN should be generated.  In this case LABEL can't be
   31846      null.
   31847 
   31848  -- Target Hook: bool
   31849 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC (const_rtx
   31850           INSN)
   31851      This hook is used as a workaround for
   31852      `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD' not being
   31853      called on the first instruction of the ready list.  The hook is
   31854      used to discard speculative instructions that stand first in the
   31855      ready list from being scheduled on the current cycle.  If the hook
   31856      returns `false', INSN will not be chosen to be issued.  For
   31857      non-speculative instructions, the hook should always return
   31858      `true'.  For example, in the ia64 backend the hook is used to
   31859      cancel data speculative insns when the ALAT table is nearly full.
   31860 
   31861  -- Target Hook: void TARGET_SCHED_SET_SCHED_FLAGS (struct
   31862           spec_info_def *SPEC_INFO)
   31863      This hook is used by the insn scheduler to find out what features
   31864      should be enabled/used.  The structure *SPEC_INFO should be filled
   31865      in by the target.  The structure describes speculation types that
   31866      can be used in the scheduler.
   31867 
   31868  -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G)
   31869      This hook is called by the swing modulo scheduler to calculate a
   31870      resource-based lower bound which is based on the resources
   31871      available in the machine and the resources required by each
   31872      instruction.  The target backend can use G to calculate such
   31873      bound.  A very simple lower bound will be used in case this hook
   31874      is not implemented: the total number of instructions divided by
   31875      the issue rate.
   31876 
   31877  -- Target Hook: bool TARGET_SCHED_DISPATCH (rtx INSN, int X)
   31878      This hook is called by Haifa Scheduler.  It returns true if
   31879      dispatch scheduling is supported in hardware and the condition
   31880      specified in the parameter is true.
   31881 
   31882  -- Target Hook: void TARGET_SCHED_DISPATCH_DO (rtx INSN, int X)
   31883      This hook is called by Haifa Scheduler.  It performs the operation
   31884      specified in its second parameter.
   31885 
   31886 
   31887 File: gccint.info,  Node: Sections,  Next: PIC,  Prev: Scheduling,  Up: Target Macros
   31888 
   31889 17.19 Dividing the Output into Sections (Texts, Data, ...)
   31890 ==========================================================
   31891 
   31892 An object file is divided into sections containing different types of
   31893 data.  In the most common case, there are three sections: the "text
   31894 section", which holds instructions and read-only data; the "data
   31895 section", which holds initialized writable data; and the "bss section",
   31896 which holds uninitialized data.  Some systems have other kinds of
   31897 sections.
   31898 
   31899  `varasm.c' provides several well-known sections, such as
   31900 `text_section', `data_section' and `bss_section'.  The normal way of
   31901 controlling a `FOO_section' variable is to define the associated
   31902 `FOO_SECTION_ASM_OP' macro, as described below.  The macros are only
   31903 read once, when `varasm.c' initializes itself, so their values must be
   31904 run-time constants.  They may however depend on command-line flags.
   31905 
   31906  _Note:_ Some run-time files, such `crtstuff.c', also make use of the
   31907 `FOO_SECTION_ASM_OP' macros, and expect them to be string literals.
   31908 
   31909  Some assemblers require a different string to be written every time a
   31910 section is selected.  If your assembler falls into this category, you
   31911 should define the `TARGET_ASM_INIT_SECTIONS' hook and use
   31912 `get_unnamed_section' to set up the sections.
   31913 
   31914  You must always create a `text_section', either by defining
   31915 `TEXT_SECTION_ASM_OP' or by initializing `text_section' in
   31916 `TARGET_ASM_INIT_SECTIONS'.  The same is true of `data_section' and
   31917 `DATA_SECTION_ASM_OP'.  If you do not create a distinct
   31918 `readonly_data_section', the default is to reuse `text_section'.
   31919 
   31920  All the other `varasm.c' sections are optional, and are null if the
   31921 target does not provide them.
   31922 
   31923  -- Macro: TEXT_SECTION_ASM_OP
   31924      A C expression whose value is a string, including spacing,
   31925      containing the assembler operation that should precede
   31926      instructions and read-only data.  Normally `"\t.text"' is right.
   31927 
   31928  -- Macro: HOT_TEXT_SECTION_NAME
   31929      If defined, a C string constant for the name of the section
   31930      containing most frequently executed functions of the program.  If
   31931      not defined, GCC will provide a default definition if the target
   31932      supports named sections.
   31933 
   31934  -- Macro: UNLIKELY_EXECUTED_TEXT_SECTION_NAME
   31935      If defined, a C string constant for the name of the section
   31936      containing unlikely executed functions in the program.
   31937 
   31938  -- Macro: DATA_SECTION_ASM_OP
   31939      A C expression whose value is a string, including spacing,
   31940      containing the assembler operation to identify the following data
   31941      as writable initialized data.  Normally `"\t.data"' is right.
   31942 
   31943  -- Macro: SDATA_SECTION_ASM_OP
   31944      If defined, a C expression whose value is a string, including
   31945      spacing, containing the assembler operation to identify the
   31946      following data as initialized, writable small data.
   31947 
   31948  -- Macro: READONLY_DATA_SECTION_ASM_OP
   31949      A C expression whose value is a string, including spacing,
   31950      containing the assembler operation to identify the following data
   31951      as read-only initialized data.
   31952 
   31953  -- Macro: BSS_SECTION_ASM_OP
   31954      If defined, a C expression whose value is a string, including
   31955      spacing, containing the assembler operation to identify the
   31956      following data as uninitialized global data.  If not defined, and
   31957      neither `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined,
   31958      uninitialized global data will be output in the data section if
   31959      `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be
   31960      used.
   31961 
   31962  -- Macro: SBSS_SECTION_ASM_OP
   31963      If defined, a C expression whose value is a string, including
   31964      spacing, containing the assembler operation to identify the
   31965      following data as uninitialized, writable small data.
   31966 
   31967  -- Macro: TLS_COMMON_ASM_OP
   31968      If defined, a C expression whose value is a string containing the
   31969      assembler operation to identify the following data as thread-local
   31970      common data.  The default is `".tls_common"'.
   31971 
   31972  -- Macro: TLS_SECTION_ASM_FLAG
   31973      If defined, a C expression whose value is a character constant
   31974      containing the flag used to mark a section as a TLS section.  The
   31975      default is `'T''.
   31976 
   31977  -- Macro: INIT_SECTION_ASM_OP
   31978      If defined, a C expression whose value is a string, including
   31979      spacing, containing the assembler operation to identify the
   31980      following data as initialization code.  If not defined, GCC will
   31981      assume such a section does not exist.  This section has no
   31982      corresponding `init_section' variable; it is used entirely in
   31983      runtime code.
   31984 
   31985  -- Macro: FINI_SECTION_ASM_OP
   31986      If defined, a C expression whose value is a string, including
   31987      spacing, containing the assembler operation to identify the
   31988      following data as finalization code.  If not defined, GCC will
   31989      assume such a section does not exist.  This section has no
   31990      corresponding `fini_section' variable; it is used entirely in
   31991      runtime code.
   31992 
   31993  -- Macro: INIT_ARRAY_SECTION_ASM_OP
   31994      If defined, a C expression whose value is a string, including
   31995      spacing, containing the assembler operation to identify the
   31996      following data as part of the `.init_array' (or equivalent)
   31997      section.  If not defined, GCC will assume such a section does not
   31998      exist.  Do not define both this macro and `INIT_SECTION_ASM_OP'.
   31999 
   32000  -- Macro: FINI_ARRAY_SECTION_ASM_OP
   32001      If defined, a C expression whose value is a string, including
   32002      spacing, containing the assembler operation to identify the
   32003      following data as part of the `.fini_array' (or equivalent)
   32004      section.  If not defined, GCC will assume such a section does not
   32005      exist.  Do not define both this macro and `FINI_SECTION_ASM_OP'.
   32006 
   32007  -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION)
   32008      If defined, an ASM statement that switches to a different section
   32009      via SECTION_OP, calls FUNCTION, and switches back to the text
   32010      section.  This is used in `crtstuff.c' if `INIT_SECTION_ASM_OP' or
   32011      `FINI_SECTION_ASM_OP' to calls to initialization and finalization
   32012      functions from the init and fini sections.  By default, this macro
   32013      uses a simple function call.  Some ports need hand-crafted
   32014      assembly code to avoid dependencies on registers initialized in
   32015      the function prologue or to ensure that constant pools don't end
   32016      up too far way in the text section.
   32017 
   32018  -- Macro: TARGET_LIBGCC_SDATA_SECTION
   32019      If defined, a string which names the section into which small
   32020      variables defined in crtstuff and libgcc should go.  This is useful
   32021      when the target has options for optimizing access to small data,
   32022      and you want the crtstuff and libgcc routines to be conservative
   32023      in what they expect of your application yet liberal in what your
   32024      application expects.  For example, for targets with a `.sdata'
   32025      section (like MIPS), you could compile crtstuff with `-G 0' so
   32026      that it doesn't require small data support from your application,
   32027      but use this macro to put small data into `.sdata' so that your
   32028      application can access these variables whether it uses small data
   32029      or not.
   32030 
   32031  -- Macro: FORCE_CODE_SECTION_ALIGN
   32032      If defined, an ASM statement that aligns a code section to some
   32033      arbitrary boundary.  This is used to force all fragments of the
   32034      `.init' and `.fini' sections to have to same alignment and thus
   32035      prevent the linker from having to add any padding.
   32036 
   32037  -- Macro: JUMP_TABLES_IN_TEXT_SECTION
   32038      Define this macro to be an expression with a nonzero value if jump
   32039      tables (for `tablejump' insns) should be output in the text
   32040      section, along with the assembler instructions.  Otherwise, the
   32041      readonly data section is used.
   32042 
   32043      This macro is irrelevant if there is no separate readonly data
   32044      section.
   32045 
   32046  -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void)
   32047      Define this hook if you need to do something special to set up the
   32048      `varasm.c' sections, or if your target has some special sections
   32049      of its own that you need to create.
   32050 
   32051      GCC calls this hook after processing the command line, but before
   32052      writing any assembly code, and before calling any of the
   32053      section-returning hooks described below.
   32054 
   32055  -- Target Hook: int TARGET_ASM_RELOC_RW_MASK (void)
   32056      Return a mask describing how relocations should be treated when
   32057      selecting sections.  Bit 1 should be set if global relocations
   32058      should be placed in a read-write section; bit 0 should be set if
   32059      local relocations should be placed in a read-write section.
   32060 
   32061      The default version of this function returns 3 when `-fpic' is in
   32062      effect, and 0 otherwise.  The hook is typically redefined when the
   32063      target cannot support (some kinds of) dynamic relocations in
   32064      read-only sections even in executables.
   32065 
   32066  -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int
   32067           RELOC, unsigned HOST_WIDE_INT ALIGN)
   32068      Return the section into which EXP should be placed.  You can
   32069      assume that EXP is either a `VAR_DECL' node or a constant of some
   32070      sort.  RELOC indicates whether the initial value of EXP requires
   32071      link-time relocations.  Bit 0 is set when variable contains local
   32072      relocations only, while bit 1 is set for global relocations.
   32073      ALIGN is the constant alignment in bits.
   32074 
   32075      The default version of this function takes care of putting
   32076      read-only variables in `readonly_data_section'.
   32077 
   32078      See also USE_SELECT_SECTION_FOR_FUNCTIONS.
   32079 
   32080  -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS
   32081      Define this macro if you wish TARGET_ASM_SELECT_SECTION to be
   32082      called for `FUNCTION_DECL's as well as for variables and constants.
   32083 
   32084      In the case of a `FUNCTION_DECL', RELOC will be zero if the
   32085      function has been determined to be likely to be called, and
   32086      nonzero if it is unlikely to be called.
   32087 
   32088  -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC)
   32089      Build up a unique section name, expressed as a `STRING_CST' node,
   32090      and assign it to `DECL_SECTION_NAME (DECL)'.  As with
   32091      `TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial
   32092      value of EXP requires link-time relocations.
   32093 
   32094      The default version of this function appends the symbol name to the
   32095      ELF section name that would normally be used for the symbol.  For
   32096      example, the function `foo' would be placed in `.text.foo'.
   32097      Whatever the actual target object format, this is often good
   32098      enough.
   32099 
   32100  -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree
   32101           DECL)
   32102      Return the readonly data section associated with
   32103      `DECL_SECTION_NAME (DECL)'.  The default version of this function
   32104      selects `.gnu.linkonce.r.name' if the function's section is
   32105      `.gnu.linkonce.t.name', `.rodata.name' if function is in
   32106      `.text.name', and the normal readonly-data section otherwise.
   32107 
   32108  -- Target Hook: section * TARGET_ASM_SELECT_RTX_SECTION (enum
   32109           machine_mode MODE, rtx X, unsigned HOST_WIDE_INT ALIGN)
   32110      Return the section into which a constant X, of mode MODE, should
   32111      be placed.  You can assume that X is some kind of constant in RTL.
   32112      The argument MODE is redundant except in the case of a `const_int'
   32113      rtx.  ALIGN is the constant alignment in bits.
   32114 
   32115      The default version of this function takes care of putting symbolic
   32116      constants in `flag_pic' mode in `data_section' and everything else
   32117      in `readonly_data_section'.
   32118 
   32119  -- Target Hook: tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL,
   32120           tree ID)
   32121      Define this hook if you need to postprocess the assembler name
   32122      generated by target-independent code.  The ID provided to this
   32123      hook will be the computed name (e.g., the macro `DECL_NAME' of the
   32124      DECL in C, or the mangled name of the DECL in C++).  The return
   32125      value of the hook is an `IDENTIFIER_NODE' for the appropriate
   32126      mangled name on your target system.  The default implementation of
   32127      this hook just returns the ID provided.
   32128 
   32129  -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL,
   32130           int NEW_DECL_P)
   32131      Define this hook if references to a symbol or a constant must be
   32132      treated differently depending on something about the variable or
   32133      function named by the symbol (such as what section it is in).
   32134 
   32135      The hook is executed immediately after rtl has been created for
   32136      DECL, which may be a variable or function declaration or an entry
   32137      in the constant pool.  In either case, RTL is the rtl in question.
   32138      Do _not_ use `DECL_RTL (DECL)' in this hook; that field may not
   32139      have been initialized yet.
   32140 
   32141      In the case of a constant, it is safe to assume that the rtl is a
   32142      `mem' whose address is a `symbol_ref'.  Most decls will also have
   32143      this form, but that is not guaranteed.  Global register variables,
   32144      for instance, will have a `reg' for their rtl.  (Normally the
   32145      right thing to do with such unusual rtl is leave it alone.)
   32146 
   32147      The NEW_DECL_P argument will be true if this is the first time
   32148      that `TARGET_ENCODE_SECTION_INFO' has been invoked on this decl.
   32149      It will be false for subsequent invocations, which will happen for
   32150      duplicate declarations.  Whether or not anything must be done for
   32151      the duplicate declaration depends on whether the hook examines
   32152      `DECL_ATTRIBUTES'.  NEW_DECL_P is always true when the hook is
   32153      called for a constant.
   32154 
   32155      The usual thing for this hook to do is to record flags in the
   32156      `symbol_ref', using `SYMBOL_REF_FLAG' or `SYMBOL_REF_FLAGS'.
   32157      Historically, the name string was modified if it was necessary to
   32158      encode more than one bit of information, but this practice is now
   32159      discouraged; use `SYMBOL_REF_FLAGS'.
   32160 
   32161      The default definition of this hook, `default_encode_section_info'
   32162      in `varasm.c', sets a number of commonly-useful bits in
   32163      `SYMBOL_REF_FLAGS'.  Check whether the default does what you need
   32164      before overriding it.
   32165 
   32166  -- Target Hook: const char * TARGET_STRIP_NAME_ENCODING (const char
   32167           *NAME)
   32168      Decode NAME and return the real name part, sans the characters
   32169      that `TARGET_ENCODE_SECTION_INFO' may have added.
   32170 
   32171  -- Target Hook: bool TARGET_IN_SMALL_DATA_P (const_tree EXP)
   32172      Returns true if EXP should be placed into a "small data" section.
   32173      The default version of this hook always returns false.
   32174 
   32175  -- Target Hook: bool TARGET_HAVE_SRODATA_SECTION
   32176      Contains the value true if the target places read-only "small
   32177      data" into a separate section.  The default value is false.
   32178 
   32179  -- Target Hook: bool TARGET_PROFILE_BEFORE_PROLOGUE (void)
   32180      It returns true if target wants profile code emitted before
   32181      prologue.
   32182 
   32183      The default version of this hook use the target macro
   32184      `PROFILE_BEFORE_PROLOGUE'.
   32185 
   32186  -- Target Hook: bool TARGET_BINDS_LOCAL_P (const_tree EXP)
   32187      Returns true if EXP names an object for which name resolution
   32188      rules must resolve to the current "module" (dynamic shared library
   32189      or executable image).
   32190 
   32191      The default version of this hook implements the name resolution
   32192      rules for ELF, which has a looser model of global name binding
   32193      than other currently supported object file formats.
   32194 
   32195  -- Target Hook: bool TARGET_HAVE_TLS
   32196      Contains the value true if the target supports thread-local
   32197      storage.  The default value is false.
   32198 
   32199 
   32200 File: gccint.info,  Node: PIC,  Next: Assembler Format,  Prev: Sections,  Up: Target Macros
   32201 
   32202 17.20 Position Independent Code
   32203 ===============================
   32204 
   32205 This section describes macros that help implement generation of position
   32206 independent code.  Simply defining these macros is not enough to
   32207 generate valid PIC; you must also add support to the hook
   32208 `TARGET_LEGITIMATE_ADDRESS_P' and to the macro `PRINT_OPERAND_ADDRESS',
   32209 as well as `LEGITIMIZE_ADDRESS'.  You must modify the definition of
   32210 `movsi' to do something appropriate when the source operand contains a
   32211 symbolic address.  You may also need to alter the handling of switch
   32212 statements so that they use relative addresses.
   32213 
   32214  -- Macro: PIC_OFFSET_TABLE_REGNUM
   32215      The register number of the register used to address a table of
   32216      static data addresses in memory.  In some cases this register is
   32217      defined by a processor's "application binary interface" (ABI).
   32218      When this macro is defined, RTL is generated for this register
   32219      once, as with the stack pointer and frame pointer registers.  If
   32220      this macro is not defined, it is up to the machine-dependent files
   32221      to allocate such a register (if necessary).  Note that this
   32222      register must be fixed when in use (e.g.  when `flag_pic' is true).
   32223 
   32224  -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
   32225      A C expression that is nonzero if the register defined by
   32226      `PIC_OFFSET_TABLE_REGNUM' is clobbered by calls.  If not defined,
   32227      the default is zero.  Do not define this macro if
   32228      `PIC_OFFSET_TABLE_REGNUM' is not defined.
   32229 
   32230  -- Macro: LEGITIMATE_PIC_OPERAND_P (X)
   32231      A C expression that is nonzero if X is a legitimate immediate
   32232      operand on the target machine when generating position independent
   32233      code.  You can assume that X satisfies `CONSTANT_P', so you need
   32234      not check this.  You can also assume FLAG_PIC is true, so you need
   32235      not check it either.  You need not define this macro if all
   32236      constants (including `SYMBOL_REF') can be immediate operands when
   32237      generating position independent code.
   32238 
   32239 
   32240 File: gccint.info,  Node: Assembler Format,  Next: Debugging Info,  Prev: PIC,  Up: Target Macros
   32241 
   32242 17.21 Defining the Output Assembler Language
   32243 ============================================
   32244 
   32245 This section describes macros whose principal purpose is to describe how
   32246 to write instructions in assembler language--rather than what the
   32247 instructions do.
   32248 
   32249 * Menu:
   32250 
   32251 * File Framework::       Structural information for the assembler file.
   32252 * Data Output::          Output of constants (numbers, strings, addresses).
   32253 * Uninitialized Data::   Output of uninitialized variables.
   32254 * Label Output::         Output and generation of labels.
   32255 * Initialization::       General principles of initialization
   32256                          and termination routines.
   32257 * Macros for Initialization::
   32258                          Specific macros that control the handling of
   32259                          initialization and termination routines.
   32260 * Instruction Output::   Output of actual instructions.
   32261 * Dispatch Tables::      Output of jump tables.
   32262 * Exception Region Output:: Output of exception region code.
   32263 * Alignment Output::     Pseudo ops for alignment and skipping data.
   32264 
   32265 
   32266 File: gccint.info,  Node: File Framework,  Next: Data Output,  Up: Assembler Format
   32267 
   32268 17.21.1 The Overall Framework of an Assembler File
   32269 --------------------------------------------------
   32270 
   32271 This describes the overall framework of an assembly file.
   32272 
   32273  -- Target Hook: void TARGET_ASM_FILE_START (void)
   32274      Output to `asm_out_file' any text which the assembler expects to
   32275      find at the beginning of a file.  The default behavior is
   32276      controlled by two flags, documented below.  Unless your target's
   32277      assembler is quite unusual, if you override the default, you
   32278      should call `default_file_start' at some point in your target
   32279      hook.  This lets other target files rely on these variables.
   32280 
   32281  -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF
   32282      If this flag is true, the text of the macro `ASM_APP_OFF' will be
   32283      printed as the very first line in the assembly file, unless
   32284      `-fverbose-asm' is in effect.  (If that macro has been defined to
   32285      the empty string, this variable has no effect.)  With the normal
   32286      definition of `ASM_APP_OFF', the effect is to notify the GNU
   32287      assembler that it need not bother stripping comments or extra
   32288      whitespace from its input.  This allows it to work a bit faster.
   32289 
   32290      The default is false.  You should not set it to true unless you
   32291      have verified that your port does not generate any extra
   32292      whitespace or comments that will cause GAS to issue errors in
   32293      NO_APP mode.
   32294 
   32295  -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE
   32296      If this flag is true, `output_file_directive' will be called for
   32297      the primary source file, immediately after printing `ASM_APP_OFF'
   32298      (if that is enabled).  Most ELF assemblers expect this to be done.
   32299      The default is false.
   32300 
   32301  -- Target Hook: void TARGET_ASM_FILE_END (void)
   32302      Output to `asm_out_file' any text which the assembler expects to
   32303      find at the end of a file.  The default is to output nothing.
   32304 
   32305  -- Function: void file_end_indicate_exec_stack ()
   32306      Some systems use a common convention, the `.note.GNU-stack'
   32307      special section, to indicate whether or not an object file relies
   32308      on the stack being executable.  If your system uses this
   32309      convention, you should define `TARGET_ASM_FILE_END' to this
   32310      function.  If you need to do other things in that hook, have your
   32311      hook function call this function.
   32312 
   32313  -- Target Hook: void TARGET_ASM_LTO_START (void)
   32314      Output to `asm_out_file' any text which the assembler expects to
   32315      find at the start of an LTO section.  The default is to output
   32316      nothing.
   32317 
   32318  -- Target Hook: void TARGET_ASM_LTO_END (void)
   32319      Output to `asm_out_file' any text which the assembler expects to
   32320      find at the end of an LTO section.  The default is to output
   32321      nothing.
   32322 
   32323  -- Target Hook: void TARGET_ASM_CODE_END (void)
   32324      Output to `asm_out_file' any text which is needed before emitting
   32325      unwind info and debug info at the end of a file.  Some targets emit
   32326      here PIC setup thunks that cannot be emitted at the end of file,
   32327      because they couldn't have unwind info then.  The default is to
   32328      output nothing.
   32329 
   32330  -- Macro: ASM_COMMENT_START
   32331      A C string constant describing how to begin a comment in the target
   32332      assembler language.  The compiler assumes that the comment will
   32333      end at the end of the line.
   32334 
   32335  -- Macro: ASM_APP_ON
   32336      A C string constant for text to be output before each `asm'
   32337      statement or group of consecutive ones.  Normally this is
   32338      `"#APP"', which is a comment that has no effect on most assemblers
   32339      but tells the GNU assembler that it must check the lines that
   32340      follow for all valid assembler constructs.
   32341 
   32342  -- Macro: ASM_APP_OFF
   32343      A C string constant for text to be output after each `asm'
   32344      statement or group of consecutive ones.  Normally this is
   32345      `"#NO_APP"', which tells the GNU assembler to resume making the
   32346      time-saving assumptions that are valid for ordinary compiler
   32347      output.
   32348 
   32349  -- Macro: ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME)
   32350      A C statement to output COFF information or DWARF debugging
   32351      information which indicates that filename NAME is the current
   32352      source file to the stdio stream STREAM.
   32353 
   32354      This macro need not be defined if the standard form of output for
   32355      the file format in use is appropriate.
   32356 
   32357  -- Target Hook: void TARGET_ASM_OUTPUT_SOURCE_FILENAME (FILE *FILE,
   32358           const char *NAME)
   32359      Output COFF information or DWARF debugging information which
   32360      indicates that filename NAME is the current source file to the
   32361      stdio stream FILE.
   32362 
   32363      This target hook need not be defined if the standard form of
   32364      output for the file format in use is appropriate.
   32365 
   32366  -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING)
   32367      A C statement to output the string STRING to the stdio stream
   32368      STREAM.  If you do not call the function `output_quoted_string' in
   32369      your config files, GCC will only call it to output filenames to
   32370      the assembler source.  So you can use it to canonicalize the format
   32371      of the filename using this macro.
   32372 
   32373  -- Macro: ASM_OUTPUT_IDENT (STREAM, STRING)
   32374      A C statement to output something to the assembler file to handle a
   32375      `#ident' directive containing the text STRING.  If this macro is
   32376      not defined, nothing is output for a `#ident' directive.
   32377 
   32378  -- Target Hook: void TARGET_ASM_NAMED_SECTION (const char *NAME,
   32379           unsigned int FLAGS, tree DECL)
   32380      Output assembly directives to switch to section NAME.  The section
   32381      should have attributes as specified by FLAGS, which is a bit mask
   32382      of the `SECTION_*' flags defined in `output.h'.  If DECL is
   32383      non-NULL, it is the `VAR_DECL' or `FUNCTION_DECL' with which this
   32384      section is associated.
   32385 
   32386  -- Target Hook: section * TARGET_ASM_FUNCTION_SECTION (tree DECL, enum
   32387           node_frequency FREQ, bool STARTUP, bool EXIT)
   32388      Return preferred text (sub)section for function DECL.  Main
   32389      purpose of this function is to separate cold, normal and hot
   32390      functions. STARTUP is true when function is known to be used only
   32391      at startup (from static constructors or it is `main()').  EXIT is
   32392      true when function is known to be used only at exit (from static
   32393      destructors).  Return NULL if function should go to default text
   32394      section.
   32395 
   32396  -- Target Hook: void TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS (FILE
   32397           *FILE, tree DECL, bool NEW_IS_COLD)
   32398      Used by the target to emit any assembler directives or additional
   32399      labels needed when a function is partitioned between different
   32400      sections.  Output should be written to FILE.  The function  decl
   32401      is available as DECL and the new section is `cold' if  NEW_IS_COLD
   32402      is `true'.
   32403 
   32404  -- Target Hook: bool TARGET_HAVE_NAMED_SECTIONS
   32405      This flag is true if the target supports
   32406      `TARGET_ASM_NAMED_SECTION'.  It must not be modified by
   32407      command-line option processing.
   32408 
   32409  -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS
   32410      This flag is true if we can create zeroed data by switching to a
   32411      BSS section and then using `ASM_OUTPUT_SKIP' to allocate the space.
   32412      This is true on most ELF targets.
   32413 
   32414  -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL,
   32415           const char *NAME, int RELOC)
   32416      Choose a set of section attributes for use by
   32417      `TARGET_ASM_NAMED_SECTION' based on a variable or function decl, a
   32418      section name, and whether or not the declaration's initializer may
   32419      contain runtime relocations.  DECL may be null, in which case
   32420      read-write data should be assumed.
   32421 
   32422      The default version of this function handles choosing code vs data,
   32423      read-only vs read-write data, and `flag_pic'.  You should only
   32424      need to override this if your target has special flags that might
   32425      be set via `__attribute__'.
   32426 
   32427  -- Target Hook: int TARGET_ASM_RECORD_GCC_SWITCHES (print_switch_type
   32428           TYPE, const char *TEXT)
   32429      Provides the target with the ability to record the gcc command line
   32430      switches that have been passed to the compiler, and options that
   32431      are enabled.  The TYPE argument specifies what is being recorded.
   32432      It can take the following values:
   32433 
   32434     `SWITCH_TYPE_PASSED'
   32435           TEXT is a command line switch that has been set by the user.
   32436 
   32437     `SWITCH_TYPE_ENABLED'
   32438           TEXT is an option which has been enabled.  This might be as a
   32439           direct result of a command line switch, or because it is
   32440           enabled by default or because it has been enabled as a side
   32441           effect of a different command line switch.  For example, the
   32442           `-O2' switch enables various different individual
   32443           optimization passes.
   32444 
   32445     `SWITCH_TYPE_DESCRIPTIVE'
   32446           TEXT is either NULL or some descriptive text which should be
   32447           ignored.  If TEXT is NULL then it is being used to warn the
   32448           target hook that either recording is starting or ending.  The
   32449           first time TYPE is SWITCH_TYPE_DESCRIPTIVE and TEXT is NULL,
   32450           the warning is for start up and the second time the warning
   32451           is for wind down.  This feature is to allow the target hook
   32452           to make any necessary preparations before it starts to record
   32453           switches and to perform any necessary tidying up after it has
   32454           finished recording switches.
   32455 
   32456     `SWITCH_TYPE_LINE_START'
   32457           This option can be ignored by this target hook.
   32458 
   32459     `SWITCH_TYPE_LINE_END'
   32460           This option can be ignored by this target hook.
   32461 
   32462      The hook's return value must be zero.  Other return values may be
   32463      supported in the future.
   32464 
   32465      By default this hook is set to NULL, but an example implementation
   32466      is provided for ELF based targets.  Called ELF_RECORD_GCC_SWITCHES,
   32467      it records the switches as ASCII text inside a new, string
   32468      mergeable section in the assembler output file.  The name of the
   32469      new section is provided by the
   32470      `TARGET_ASM_RECORD_GCC_SWITCHES_SECTION' target hook.
   32471 
   32472  -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION
   32473      This is the name of the section that will be created by the example
   32474      ELF implementation of the `TARGET_ASM_RECORD_GCC_SWITCHES' target
   32475      hook.
   32476 
   32477 
   32478 File: gccint.info,  Node: Data Output,  Next: Uninitialized Data,  Prev: File Framework,  Up: Assembler Format
   32479 
   32480 17.21.2 Output of Data
   32481 ----------------------
   32482 
   32483  -- Target Hook: const char * TARGET_ASM_BYTE_OP
   32484  -- Target Hook: const char * TARGET_ASM_ALIGNED_HI_OP
   32485  -- Target Hook: const char * TARGET_ASM_ALIGNED_SI_OP
   32486  -- Target Hook: const char * TARGET_ASM_ALIGNED_DI_OP
   32487  -- Target Hook: const char * TARGET_ASM_ALIGNED_TI_OP
   32488  -- Target Hook: const char * TARGET_ASM_UNALIGNED_HI_OP
   32489  -- Target Hook: const char * TARGET_ASM_UNALIGNED_SI_OP
   32490  -- Target Hook: const char * TARGET_ASM_UNALIGNED_DI_OP
   32491  -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP
   32492      These hooks specify assembly directives for creating certain kinds
   32493      of integer object.  The `TARGET_ASM_BYTE_OP' directive creates a
   32494      byte-sized object, the `TARGET_ASM_ALIGNED_HI_OP' one creates an
   32495      aligned two-byte object, and so on.  Any of the hooks may be
   32496      `NULL', indicating that no suitable directive is available.
   32497 
   32498      The compiler will print these strings at the start of a new line,
   32499      followed immediately by the object's initial value.  In most cases,
   32500      the string should contain a tab, a pseudo-op, and then another tab.
   32501 
   32502  -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int
   32503           ALIGNED_P)
   32504      The `assemble_integer' function uses this hook to output an
   32505      integer object.  X is the object's value, SIZE is its size in
   32506      bytes and ALIGNED_P indicates whether it is aligned.  The function
   32507      should return `true' if it was able to output the object.  If it
   32508      returns false, `assemble_integer' will try to split the object
   32509      into smaller parts.
   32510 
   32511      The default implementation of this hook will use the
   32512      `TARGET_ASM_BYTE_OP' family of strings, returning `false' when the
   32513      relevant string is `NULL'.
   32514 
   32515  -- Target Hook: bool TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA (FILE *FILE,
   32516           rtx X)
   32517      A target hook to recognize RTX patterns that `output_addr_const'
   32518      can't deal with, and output assembly code to FILE corresponding to
   32519      the pattern X.  This may be used to allow machine-dependent
   32520      `UNSPEC's to appear within constants.
   32521 
   32522      If target hook fails to recognize a pattern, it must return
   32523      `false', so that a standard error message is printed.  If it
   32524      prints an error message itself, by calling, for example,
   32525      `output_operand_lossage', it may just return `true'.
   32526 
   32527  -- Macro: OUTPUT_ADDR_CONST_EXTRA (STREAM, X, FAIL)
   32528      A C statement to recognize RTX patterns that `output_addr_const'
   32529      can't deal with, and output assembly code to STREAM corresponding
   32530      to the pattern X.  This may be used to allow machine-dependent
   32531      `UNSPEC's to appear within constants.
   32532 
   32533      If `OUTPUT_ADDR_CONST_EXTRA' fails to recognize a pattern, it must
   32534      `goto fail', so that a standard error message is printed.  If it
   32535      prints an error message itself, by calling, for example,
   32536      `output_operand_lossage', it may just complete normally.
   32537 
   32538  -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN)
   32539      A C statement to output to the stdio stream STREAM an assembler
   32540      instruction to assemble a string constant containing the LEN bytes
   32541      at PTR.  PTR will be a C expression of type `char *' and LEN a C
   32542      expression of type `int'.
   32543 
   32544      If the assembler has a `.ascii' pseudo-op as found in the Berkeley
   32545      Unix assembler, do not define the macro `ASM_OUTPUT_ASCII'.
   32546 
   32547  -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N)
   32548      A C statement to output word N of a function descriptor for DECL.
   32549      This must be defined if `TARGET_VTABLE_USES_DESCRIPTORS' is
   32550      defined, and is otherwise unused.
   32551 
   32552  -- Macro: CONSTANT_POOL_BEFORE_FUNCTION
   32553      You may define this macro as a C expression.  You should define the
   32554      expression to have a nonzero value if GCC should output the
   32555      constant pool for a function before the code for the function, or
   32556      a zero value if GCC should output the constant pool after the
   32557      function.  If you do not define this macro, the usual case, GCC
   32558      will output the constant pool before the function.
   32559 
   32560  -- Macro: ASM_OUTPUT_POOL_PROLOGUE (FILE, FUNNAME, FUNDECL, SIZE)
   32561      A C statement to output assembler commands to define the start of
   32562      the constant pool for a function.  FUNNAME is a string giving the
   32563      name of the function.  Should the return type of the function be
   32564      required, it can be obtained via FUNDECL.  SIZE is the size, in
   32565      bytes, of the constant pool that will be written immediately after
   32566      this call.
   32567 
   32568      If no constant-pool prefix is required, the usual case, this macro
   32569      need not be defined.
   32570 
   32571  -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN,
   32572           LABELNO, JUMPTO)
   32573      A C statement (with or without semicolon) to output a constant in
   32574      the constant pool, if it needs special treatment.  (This macro
   32575      need not do anything for RTL expressions that can be output
   32576      normally.)
   32577 
   32578      The argument FILE is the standard I/O stream to output the
   32579      assembler code on.  X is the RTL expression for the constant to
   32580      output, and MODE is the machine mode (in case X is a `const_int').
   32581      ALIGN is the required alignment for the value X; you should output
   32582      an assembler directive to force this much alignment.
   32583 
   32584      The argument LABELNO is a number to use in an internal label for
   32585      the address of this pool entry.  The definition of this macro is
   32586      responsible for outputting the label definition at the proper
   32587      place.  Here is how to do this:
   32588 
   32589           `(*targetm.asm_out.internal_label)' (FILE, "LC", LABELNO);
   32590 
   32591      When you output a pool entry specially, you should end with a
   32592      `goto' to the label JUMPTO.  This will prevent the same pool entry
   32593      from being output a second time in the usual manner.
   32594 
   32595      You need not define this macro if it would do nothing.
   32596 
   32597  -- Macro: ASM_OUTPUT_POOL_EPILOGUE (FILE FUNNAME FUNDECL SIZE)
   32598      A C statement to output assembler commands to at the end of the
   32599      constant pool for a function.  FUNNAME is a string giving the name
   32600      of the function.  Should the return type of the function be
   32601      required, you can obtain it via FUNDECL.  SIZE is the size, in
   32602      bytes, of the constant pool that GCC wrote immediately before this
   32603      call.
   32604 
   32605      If no constant-pool epilogue is required, the usual case, you need
   32606      not define this macro.
   32607 
   32608  -- Macro: IS_ASM_LOGICAL_LINE_SEPARATOR (C, STR)
   32609      Define this macro as a C expression which is nonzero if C is used
   32610      as a logical line separator by the assembler.  STR points to the
   32611      position in the string where C was found; this can be used if a
   32612      line separator uses multiple characters.
   32613 
   32614      If you do not define this macro, the default is that only the
   32615      character `;' is treated as a logical line separator.
   32616 
   32617  -- Target Hook: const char * TARGET_ASM_OPEN_PAREN
   32618  -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN
   32619      These target hooks are C string constants, describing the syntax
   32620      in the assembler for grouping arithmetic expressions.  If not
   32621      overridden, they default to normal parentheses, which is correct
   32622      for most assemblers.
   32623 
   32624  These macros are provided by `real.h' for writing the definitions of
   32625 `ASM_OUTPUT_DOUBLE' and the like:
   32626 
   32627  -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L)
   32628  -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L)
   32629  -- Macro: REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L)
   32630  -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L)
   32631  -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L)
   32632  -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L)
   32633      These translate X, of type `REAL_VALUE_TYPE', to the target's
   32634      floating point representation, and store its bit pattern in the
   32635      variable L.  For `REAL_VALUE_TO_TARGET_SINGLE' and
   32636      `REAL_VALUE_TO_TARGET_DECIMAL32', this variable should be a simple
   32637      `long int'.  For the others, it should be an array of `long int'.
   32638      The number of elements in this array is determined by the size of
   32639      the desired target floating point data type: 32 bits of it go in
   32640      each `long int' array element.  Each array element holds 32 bits
   32641      of the result, even if `long int' is wider than 32 bits on the
   32642      host machine.
   32643 
   32644      The array element values are designed so that you can print them
   32645      out using `fprintf' in the order they should appear in the target
   32646      machine's memory.
   32647 
   32648 
   32649 File: gccint.info,  Node: Uninitialized Data,  Next: Label Output,  Prev: Data Output,  Up: Assembler Format
   32650 
   32651 17.21.3 Output of Uninitialized Variables
   32652 -----------------------------------------
   32653 
   32654 Each of the macros in this section is used to do the whole job of
   32655 outputting a single uninitialized variable.
   32656 
   32657  -- Macro: ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED)
   32658      A C statement (sans semicolon) to output to the stdio stream
   32659      STREAM the assembler definition of a common-label named NAME whose
   32660      size is SIZE bytes.  The variable ROUNDED is the size rounded up
   32661      to whatever alignment the caller wants.  It is possible that SIZE
   32662      may be zero, for instance if a struct with no other member than a
   32663      zero-length array is defined.  In this case, the backend must
   32664      output a symbol definition that allocates at least one byte, both
   32665      so that the address of the resulting object does not compare equal
   32666      to any other, and because some object formats cannot even express
   32667      the concept of a zero-sized common symbol, as that is how they
   32668      represent an ordinary undefined external.
   32669 
   32670      Use the expression `assemble_name (STREAM, NAME)' to output the
   32671      name itself; before and after that, output the additional
   32672      assembler syntax for defining the name, and a newline.
   32673 
   32674      This macro controls how the assembler definitions of uninitialized
   32675      common global variables are output.
   32676 
   32677  -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT)
   32678      Like `ASM_OUTPUT_COMMON' except takes the required alignment as a
   32679      separate, explicit argument.  If you define this macro, it is used
   32680      in place of `ASM_OUTPUT_COMMON', and gives you more flexibility in
   32681      handling the required alignment of the variable.  The alignment is
   32682      specified as the number of bits.
   32683 
   32684  -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE,
   32685           ALIGNMENT)
   32686      Like `ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable
   32687      to be output, if there is one, or `NULL_TREE' if there is no
   32688      corresponding variable.  If you define this macro, GCC will use it
   32689      in place of both `ASM_OUTPUT_COMMON' and
   32690      `ASM_OUTPUT_ALIGNED_COMMON'.  Define this macro when you need to
   32691      see the variable's decl in order to chose what to output.
   32692 
   32693  -- Macro: ASM_OUTPUT_BSS (STREAM, DECL, NAME, SIZE, ROUNDED)
   32694      A C statement (sans semicolon) to output to the stdio stream
   32695      STREAM the assembler definition of uninitialized global DECL named
   32696      NAME whose size is SIZE bytes.  The variable ROUNDED is the size
   32697      rounded up to whatever alignment the caller wants.
   32698 
   32699      Try to use function `asm_output_bss' defined in `varasm.c' when
   32700      defining this macro.  If unable, use the expression `assemble_name
   32701      (STREAM, NAME)' to output the name itself; before and after that,
   32702      output the additional assembler syntax for defining the name, and
   32703      a newline.
   32704 
   32705      There are two ways of handling global BSS.  One is to define either
   32706      this macro or its aligned counterpart, `ASM_OUTPUT_ALIGNED_BSS'.
   32707      The other is to have `TARGET_ASM_SELECT_SECTION' return a
   32708      switchable BSS section (*note
   32709      TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::).  You do not need to do
   32710      both.
   32711 
   32712      Some languages do not have `common' data, and require a non-common
   32713      form of global BSS in order to handle uninitialized globals
   32714      efficiently.  C++ is one example of this.  However, if the target
   32715      does not support global BSS, the front end may choose to make
   32716      globals common in order to save space in the object file.
   32717 
   32718  -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT)
   32719      Like `ASM_OUTPUT_BSS' except takes the required alignment as a
   32720      separate, explicit argument.  If you define this macro, it is used
   32721      in place of `ASM_OUTPUT_BSS', and gives you more flexibility in
   32722      handling the required alignment of the variable.  The alignment is
   32723      specified as the number of bits.
   32724 
   32725      Try to use function `asm_output_aligned_bss' defined in file
   32726      `varasm.c' when defining this macro.
   32727 
   32728  -- Macro: ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED)
   32729      A C statement (sans semicolon) to output to the stdio stream
   32730      STREAM the assembler definition of a local-common-label named NAME
   32731      whose size is SIZE bytes.  The variable ROUNDED is the size
   32732      rounded up to whatever alignment the caller wants.
   32733 
   32734      Use the expression `assemble_name (STREAM, NAME)' to output the
   32735      name itself; before and after that, output the additional
   32736      assembler syntax for defining the name, and a newline.
   32737 
   32738      This macro controls how the assembler definitions of uninitialized
   32739      static variables are output.
   32740 
   32741  -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT)
   32742      Like `ASM_OUTPUT_LOCAL' except takes the required alignment as a
   32743      separate, explicit argument.  If you define this macro, it is used
   32744      in place of `ASM_OUTPUT_LOCAL', and gives you more flexibility in
   32745      handling the required alignment of the variable.  The alignment is
   32746      specified as the number of bits.
   32747 
   32748  -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE,
   32749           ALIGNMENT)
   32750      Like `ASM_OUTPUT_ALIGNED_DECL' except that DECL of the variable to
   32751      be output, if there is one, or `NULL_TREE' if there is no
   32752      corresponding variable.  If you define this macro, GCC will use it
   32753      in place of both `ASM_OUTPUT_DECL' and `ASM_OUTPUT_ALIGNED_DECL'.
   32754      Define this macro when you need to see the variable's decl in
   32755      order to chose what to output.
   32756 
   32757 
   32758 File: gccint.info,  Node: Label Output,  Next: Initialization,  Prev: Uninitialized Data,  Up: Assembler Format
   32759 
   32760 17.21.4 Output and Generation of Labels
   32761 ---------------------------------------
   32762 
   32763 This is about outputting labels.
   32764 
   32765  -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME)
   32766      A C statement (sans semicolon) to output to the stdio stream
   32767      STREAM the assembler definition of a label named NAME.  Use the
   32768      expression `assemble_name (STREAM, NAME)' to output the name
   32769      itself; before and after that, output the additional assembler
   32770      syntax for defining the name, and a newline.  A default definition
   32771      of this macro is provided which is correct for most systems.
   32772 
   32773  -- Macro: ASM_OUTPUT_FUNCTION_LABEL (STREAM, NAME, DECL)
   32774      A C statement (sans semicolon) to output to the stdio stream
   32775      STREAM the assembler definition of a label named NAME of a
   32776      function.  Use the expression `assemble_name (STREAM, NAME)' to
   32777      output the name itself; before and after that, output the
   32778      additional assembler syntax for defining the name, and a newline.
   32779      A default definition of this macro is provided which is correct
   32780      for most systems.
   32781 
   32782      If this macro is not defined, then the function name is defined in
   32783      the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
   32784 
   32785  -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME)
   32786      Identical to `ASM_OUTPUT_LABEL', except that NAME is known to
   32787      refer to a compiler-generated label.  The default definition uses
   32788      `assemble_name_raw', which is like `assemble_name' except that it
   32789      is more efficient.
   32790 
   32791  -- Macro: SIZE_ASM_OP
   32792      A C string containing the appropriate assembler directive to
   32793      specify the size of a symbol, without any arguments.  On systems
   32794      that use ELF, the default (in `config/elfos.h') is `"\t.size\t"';
   32795      on other systems, the default is not to define this macro.
   32796 
   32797      Define this macro only if it is correct to use the default
   32798      definitions of `ASM_OUTPUT_SIZE_DIRECTIVE' and
   32799      `ASM_OUTPUT_MEASURED_SIZE' for your system.  If you need your own
   32800      custom definitions of those macros, or if you do not need explicit
   32801      symbol sizes at all, do not define this macro.
   32802 
   32803  -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE)
   32804      A C statement (sans semicolon) to output to the stdio stream
   32805      STREAM a directive telling the assembler that the size of the
   32806      symbol NAME is SIZE.  SIZE is a `HOST_WIDE_INT'.  If you define
   32807      `SIZE_ASM_OP', a default definition of this macro is provided.
   32808 
   32809  -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME)
   32810      A C statement (sans semicolon) to output to the stdio stream
   32811      STREAM a directive telling the assembler to calculate the size of
   32812      the symbol NAME by subtracting its address from the current
   32813      address.
   32814 
   32815      If you define `SIZE_ASM_OP', a default definition of this macro is
   32816      provided.  The default assumes that the assembler recognizes a
   32817      special `.' symbol as referring to the current address, and can
   32818      calculate the difference between this and another symbol.  If your
   32819      assembler does not recognize `.' or cannot do calculations with
   32820      it, you will need to redefine `ASM_OUTPUT_MEASURED_SIZE' to use
   32821      some other technique.
   32822 
   32823  -- Macro: TYPE_ASM_OP
   32824      A C string containing the appropriate assembler directive to
   32825      specify the type of a symbol, without any arguments.  On systems
   32826      that use ELF, the default (in `config/elfos.h') is `"\t.type\t"';
   32827      on other systems, the default is not to define this macro.
   32828 
   32829      Define this macro only if it is correct to use the default
   32830      definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
   32831      need your own custom definition of this macro, or if you do not
   32832      need explicit symbol types at all, do not define this macro.
   32833 
   32834  -- Macro: TYPE_OPERAND_FMT
   32835      A C string which specifies (using `printf' syntax) the format of
   32836      the second operand to `TYPE_ASM_OP'.  On systems that use ELF, the
   32837      default (in `config/elfos.h') is `"@%s"'; on other systems, the
   32838      default is not to define this macro.
   32839 
   32840      Define this macro only if it is correct to use the default
   32841      definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
   32842      need your own custom definition of this macro, or if you do not
   32843      need explicit symbol types at all, do not define this macro.
   32844 
   32845  -- Macro: ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, TYPE)
   32846      A C statement (sans semicolon) to output to the stdio stream
   32847      STREAM a directive telling the assembler that the type of the
   32848      symbol NAME is TYPE.  TYPE is a C string; currently, that string
   32849      is always either `"function"' or `"object"', but you should not
   32850      count on this.
   32851 
   32852      If you define `TYPE_ASM_OP' and `TYPE_OPERAND_FMT', a default
   32853      definition of this macro is provided.
   32854 
   32855  -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)
   32856      A C statement (sans semicolon) to output to the stdio stream
   32857      STREAM any text necessary for declaring the name NAME of a
   32858      function which is being defined.  This macro is responsible for
   32859      outputting the label definition (perhaps using
   32860      `ASM_OUTPUT_FUNCTION_LABEL').  The argument DECL is the
   32861      `FUNCTION_DECL' tree node representing the function.
   32862 
   32863      If this macro is not defined, then the function name is defined in
   32864      the usual manner as a label (by means of
   32865      `ASM_OUTPUT_FUNCTION_LABEL').
   32866 
   32867      You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
   32868      of this macro.
   32869 
   32870  -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL)
   32871      A C statement (sans semicolon) to output to the stdio stream
   32872      STREAM any text necessary for declaring the size of a function
   32873      which is being defined.  The argument NAME is the name of the
   32874      function.  The argument DECL is the `FUNCTION_DECL' tree node
   32875      representing the function.
   32876 
   32877      If this macro is not defined, then the function size is not
   32878      defined.
   32879 
   32880      You may wish to use `ASM_OUTPUT_MEASURED_SIZE' in the definition
   32881      of this macro.
   32882 
   32883  -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL)
   32884      A C statement (sans semicolon) to output to the stdio stream
   32885      STREAM any text necessary for declaring the name NAME of an
   32886      initialized variable which is being defined.  This macro must
   32887      output the label definition (perhaps using `ASM_OUTPUT_LABEL').
   32888      The argument DECL is the `VAR_DECL' tree node representing the
   32889      variable.
   32890 
   32891      If this macro is not defined, then the variable name is defined in
   32892      the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
   32893 
   32894      You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' and/or
   32895      `ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro.
   32896 
   32897  -- Target Hook: void TARGET_ASM_DECLARE_CONSTANT_NAME (FILE *FILE,
   32898           const char *NAME, const_tree EXPR, HOST_WIDE_INT SIZE)
   32899      A target hook to output to the stdio stream FILE any text necessary
   32900      for declaring the name NAME of a constant which is being defined.
   32901      This target hook is responsible for outputting the label
   32902      definition (perhaps using `assemble_label').  The argument EXP is
   32903      the value of the constant, and SIZE is the size of the constant in
   32904      bytes.  The NAME will be an internal label.
   32905 
   32906      The default version of this target hook, define the NAME in the
   32907      usual manner as a label (by means of `assemble_label').
   32908 
   32909      You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in this target
   32910      hook.
   32911 
   32912  -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME)
   32913      A C statement (sans semicolon) to output to the stdio stream
   32914      STREAM any text necessary for claiming a register REGNO for a
   32915      global variable DECL with name NAME.
   32916 
   32917      If you don't define this macro, that is equivalent to defining it
   32918      to do nothing.
   32919 
   32920  -- Macro: ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND)
   32921      A C statement (sans semicolon) to finish up declaring a variable
   32922      name once the compiler has processed its initializer fully and
   32923      thus has had a chance to determine the size of an array when
   32924      controlled by an initializer.  This is used on systems where it's
   32925      necessary to declare something about the size of the object.
   32926 
   32927      If you don't define this macro, that is equivalent to defining it
   32928      to do nothing.
   32929 
   32930      You may wish to use `ASM_OUTPUT_SIZE_DIRECTIVE' and/or
   32931      `ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro.
   32932 
   32933  -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const
   32934           char *NAME)
   32935      This target hook is a function to output to the stdio stream
   32936      STREAM some commands that will make the label NAME global; that
   32937      is, available for reference from other files.
   32938 
   32939      The default implementation relies on a proper definition of
   32940      `GLOBAL_ASM_OP'.
   32941 
   32942  -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM,
   32943           tree DECL)
   32944      This target hook is a function to output to the stdio stream
   32945      STREAM some commands that will make the name associated with DECL
   32946      global; that is, available for reference from other files.
   32947 
   32948      The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL
   32949      target hook.
   32950 
   32951  -- Macro: ASM_WEAKEN_LABEL (STREAM, NAME)
   32952      A C statement (sans semicolon) to output to the stdio stream
   32953      STREAM some commands that will make the label NAME weak; that is,
   32954      available for reference from other files but only used if no other
   32955      definition is available.  Use the expression `assemble_name
   32956      (STREAM, NAME)' to output the name itself; before and after that,
   32957      output the additional assembler syntax for making that name weak,
   32958      and a newline.
   32959 
   32960      If you don't define this macro or `ASM_WEAKEN_DECL', GCC will not
   32961      support weak symbols and you should not define the `SUPPORTS_WEAK'
   32962      macro.
   32963 
   32964  -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE)
   32965      Combines (and replaces) the function of `ASM_WEAKEN_LABEL' and
   32966      `ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function
   32967      or variable decl.  If VALUE is not `NULL', this C statement should
   32968      output to the stdio stream STREAM assembler code which defines
   32969      (equates) the weak symbol NAME to have the value VALUE.  If VALUE
   32970      is `NULL', it should output commands to make NAME weak.
   32971 
   32972  -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE)
   32973      Outputs a directive that enables NAME to be used to refer to
   32974      symbol VALUE with weak-symbol semantics.  `decl' is the
   32975      declaration of `name'.
   32976 
   32977  -- Macro: SUPPORTS_WEAK
   32978      A preprocessor constant expression which evaluates to true if the
   32979      target supports weak symbols.
   32980 
   32981      If you don't define this macro, `defaults.h' provides a default
   32982      definition.  If either `ASM_WEAKEN_LABEL' or `ASM_WEAKEN_DECL' is
   32983      defined, the default definition is `1'; otherwise, it is `0'.
   32984 
   32985  -- Macro: TARGET_SUPPORTS_WEAK
   32986      A C expression which evaluates to true if the target supports weak
   32987      symbols.
   32988 
   32989      If you don't define this macro, `defaults.h' provides a default
   32990      definition.  The default definition is `(SUPPORTS_WEAK)'.  Define
   32991      this macro if you want to control weak symbol support with a
   32992      compiler flag such as `-melf'.
   32993 
   32994  -- Macro: MAKE_DECL_ONE_ONLY (DECL)
   32995      A C statement (sans semicolon) to mark DECL to be emitted as a
   32996      public symbol such that extra copies in multiple translation units
   32997      will be discarded by the linker.  Define this macro if your object
   32998      file format provides support for this concept, such as the `COMDAT'
   32999      section flags in the Microsoft Windows PE/COFF format, and this
   33000      support requires changes to DECL, such as putting it in a separate
   33001      section.
   33002 
   33003  -- Macro: SUPPORTS_ONE_ONLY
   33004      A C expression which evaluates to true if the target supports
   33005      one-only semantics.
   33006 
   33007      If you don't define this macro, `varasm.c' provides a default
   33008      definition.  If `MAKE_DECL_ONE_ONLY' is defined, the default
   33009      definition is `1'; otherwise, it is `0'.  Define this macro if you
   33010      want to control one-only symbol support with a compiler flag, or if
   33011      setting the `DECL_ONE_ONLY' flag is enough to mark a declaration to
   33012      be emitted as one-only.
   33013 
   33014  -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, int
   33015           VISIBILITY)
   33016      This target hook is a function to output to ASM_OUT_FILE some
   33017      commands that will make the symbol(s) associated with DECL have
   33018      hidden, protected or internal visibility as specified by
   33019      VISIBILITY.
   33020 
   33021  -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC
   33022      A C expression that evaluates to true if the target's linker
   33023      expects that weak symbols do not appear in a static archive's
   33024      table of contents.  The default is `0'.
   33025 
   33026      Leaving weak symbols out of an archive's table of contents means
   33027      that, if a symbol will only have a definition in one translation
   33028      unit and will have undefined references from other translation
   33029      units, that symbol should not be weak.  Defining this macro to be
   33030      nonzero will thus have the effect that certain symbols that would
   33031      normally be weak (explicit template instantiations, and vtables
   33032      for polymorphic classes with noninline key methods) will instead
   33033      be nonweak.
   33034 
   33035      The C++ ABI requires this macro to be zero.  Define this macro for
   33036      targets where full C++ ABI compliance is impossible and where
   33037      linker restrictions require weak symbols to be left out of a
   33038      static archive's table of contents.
   33039 
   33040  -- Macro: ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME)
   33041      A C statement (sans semicolon) to output to the stdio stream
   33042      STREAM any text necessary for declaring the name of an external
   33043      symbol named NAME which is referenced in this compilation but not
   33044      defined.  The value of DECL is the tree node for the declaration.
   33045 
   33046      This macro need not be defined if it does not need to output
   33047      anything.  The GNU assembler and most Unix assemblers don't
   33048      require anything.
   33049 
   33050  -- Target Hook: void TARGET_ASM_EXTERNAL_LIBCALL (rtx SYMREF)
   33051      This target hook is a function to output to ASM_OUT_FILE an
   33052      assembler pseudo-op to declare a library function name external.
   33053      The name of the library function is given by SYMREF, which is a
   33054      `symbol_ref'.
   33055 
   33056  -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (const char
   33057           *SYMBOL)
   33058      This target hook is a function to output to ASM_OUT_FILE an
   33059      assembler directive to annotate SYMBOL as used.  The Darwin target
   33060      uses the .no_dead_code_strip directive.
   33061 
   33062  -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME)
   33063      A C statement (sans semicolon) to output to the stdio stream
   33064      STREAM a reference in assembler syntax to a label named NAME.
   33065      This should add `_' to the front of the name, if that is customary
   33066      on your operating system, as it is in most Berkeley Unix systems.
   33067      This macro is used in `assemble_name'.
   33068 
   33069  -- Target Hook: tree TARGET_MANGLE_ASSEMBLER_NAME (const char *NAME)
   33070      Given a symbol NAME, perform same mangling as `varasm.c''s
   33071      `assemble_name', but in memory rather than to a file stream,
   33072      returning result as an `IDENTIFIER_NODE'.  Required for correct
   33073      LTO symtabs.  The default implementation calls the
   33074      `TARGET_STRIP_NAME_ENCODING' hook and then prepends the
   33075      `USER_LABEL_PREFIX', if any.
   33076 
   33077  -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM)
   33078      A C statement (sans semicolon) to output a reference to
   33079      `SYMBOL_REF' SYM.  If not defined, `assemble_name' will be used to
   33080      output the name of the symbol.  This macro may be used to modify
   33081      the way a symbol is referenced depending on information encoded by
   33082      `TARGET_ENCODE_SECTION_INFO'.
   33083 
   33084  -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF)
   33085      A C statement (sans semicolon) to output a reference to BUF, the
   33086      result of `ASM_GENERATE_INTERNAL_LABEL'.  If not defined,
   33087      `assemble_name' will be used to output the name of the symbol.
   33088      This macro is not used by `output_asm_label', or the `%l'
   33089      specifier that calls it; the intention is that this macro should
   33090      be set when it is necessary to output a label differently when its
   33091      address is being taken.
   33092 
   33093  -- Target Hook: void TARGET_ASM_INTERNAL_LABEL (FILE *STREAM, const
   33094           char *PREFIX, unsigned long LABELNO)
   33095      A function to output to the stdio stream STREAM a label whose name
   33096      is made from the string PREFIX and the number LABELNO.
   33097 
   33098      It is absolutely essential that these labels be distinct from the
   33099      labels used for user-level functions and variables.  Otherwise,
   33100      certain programs will have name conflicts with internal labels.
   33101 
   33102      It is desirable to exclude internal labels from the symbol table
   33103      of the object file.  Most assemblers have a naming convention for
   33104      labels that should be excluded; on many systems, the letter `L' at
   33105      the beginning of a label has this effect.  You should find out what
   33106      convention your system uses, and follow it.
   33107 
   33108      The default version of this function utilizes
   33109      `ASM_GENERATE_INTERNAL_LABEL'.
   33110 
   33111  -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM)
   33112      A C statement to output to the stdio stream STREAM a debug info
   33113      label whose name is made from the string PREFIX and the number
   33114      NUM.  This is useful for VLIW targets, where debug info labels may
   33115      need to be treated differently than branch target labels.  On some
   33116      systems, branch target labels must be at the beginning of
   33117      instruction bundles, but debug info labels can occur in the middle
   33118      of instruction bundles.
   33119 
   33120      If this macro is not defined, then
   33121      `(*targetm.asm_out.internal_label)' will be used.
   33122 
   33123  -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)
   33124      A C statement to store into the string STRING a label whose name
   33125      is made from the string PREFIX and the number NUM.
   33126 
   33127      This string, when output subsequently by `assemble_name', should
   33128      produce the output that `(*targetm.asm_out.internal_label)' would
   33129      produce with the same PREFIX and NUM.
   33130 
   33131      If the string begins with `*', then `assemble_name' will output
   33132      the rest of the string unchanged.  It is often convenient for
   33133      `ASM_GENERATE_INTERNAL_LABEL' to use `*' in this way.  If the
   33134      string doesn't start with `*', then `ASM_OUTPUT_LABELREF' gets to
   33135      output the string, and may change it.  (Of course,
   33136      `ASM_OUTPUT_LABELREF' is also part of your machine description, so
   33137      you should know what it does on your machine.)
   33138 
   33139  -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)
   33140      A C expression to assign to OUTVAR (which is a variable of type
   33141      `char *') a newly allocated string made from the string NAME and
   33142      the number NUMBER, with some suitable punctuation added.  Use
   33143      `alloca' to get space for the string.
   33144 
   33145      The string will be used as an argument to `ASM_OUTPUT_LABELREF' to
   33146      produce an assembler label for an internal static variable whose
   33147      name is NAME.  Therefore, the string must be such as to result in
   33148      valid assembler code.  The argument NUMBER is different each time
   33149      this macro is executed; it prevents conflicts between
   33150      similarly-named internal static variables in different scopes.
   33151 
   33152      Ideally this string should not be a valid C identifier, to prevent
   33153      any conflict with the user's own symbols.  Most assemblers allow
   33154      periods or percent signs in assembler symbols; putting at least
   33155      one of these between the name and the number will suffice.
   33156 
   33157      If this macro is not defined, a default definition will be provided
   33158      which is correct for most systems.
   33159 
   33160  -- Macro: ASM_OUTPUT_DEF (STREAM, NAME, VALUE)
   33161      A C statement to output to the stdio stream STREAM assembler code
   33162      which defines (equates) the symbol NAME to have the value VALUE.
   33163 
   33164      If `SET_ASM_OP' is defined, a default definition is provided which
   33165      is correct for most systems.
   33166 
   33167  -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME,
   33168           DECL_OF_VALUE)
   33169      A C statement to output to the stdio stream STREAM assembler code
   33170      which defines (equates) the symbol whose tree node is DECL_OF_NAME
   33171      to have the value of the tree node DECL_OF_VALUE.  This macro will
   33172      be used in preference to `ASM_OUTPUT_DEF' if it is defined and if
   33173      the tree nodes are available.
   33174 
   33175      If `SET_ASM_OP' is defined, a default definition is provided which
   33176      is correct for most systems.
   33177 
   33178  -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE)
   33179      A C statement that evaluates to true if the assembler code which
   33180      defines (equates) the symbol whose tree node is DECL_OF_NAME to
   33181      have the value of the tree node DECL_OF_VALUE should be emitted
   33182      near the end of the current compilation unit.  The default is to
   33183      not defer output of defines.  This macro affects defines output by
   33184      `ASM_OUTPUT_DEF' and `ASM_OUTPUT_DEF_FROM_DECLS'.
   33185 
   33186  -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE)
   33187      A C statement to output to the stdio stream STREAM assembler code
   33188      which defines (equates) the weak symbol NAME to have the value
   33189      VALUE.  If VALUE is `NULL', it defines NAME as an undefined weak
   33190      symbol.
   33191 
   33192      Define this macro if the target only supports weak aliases; define
   33193      `ASM_OUTPUT_DEF' instead if possible.
   33194 
   33195  -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME,
   33196           SEL_NAME)
   33197      Define this macro to override the default assembler names used for
   33198      Objective-C methods.
   33199 
   33200      The default name is a unique method number followed by the name of
   33201      the class (e.g. `_1_Foo').  For methods in categories, the name of
   33202      the category is also included in the assembler name (e.g.
   33203      `_1_Foo_Bar').
   33204 
   33205      These names are safe on most systems, but make debugging difficult
   33206      since the method's selector is not present in the name.
   33207      Therefore, particular systems define other ways of computing names.
   33208 
   33209      BUF is an expression of type `char *' which gives you a buffer in
   33210      which to store the name; its length is as long as CLASS_NAME,
   33211      CAT_NAME and SEL_NAME put together, plus 50 characters extra.
   33212 
   33213      The argument IS_INST specifies whether the method is an instance
   33214      method or a class method; CLASS_NAME is the name of the class;
   33215      CAT_NAME is the name of the category (or `NULL' if the method is
   33216      not in a category); and SEL_NAME is the name of the selector.
   33217 
   33218      On systems where the assembler can handle quoted names, you can
   33219      use this macro to provide more human-readable names.
   33220 
   33221  -- Macro: ASM_DECLARE_CLASS_REFERENCE (STREAM, NAME)
   33222      A C statement (sans semicolon) to output to the stdio stream
   33223      STREAM commands to declare that the label NAME is an Objective-C
   33224      class reference.  This is only needed for targets whose linkers
   33225      have special support for NeXT-style runtimes.
   33226 
   33227  -- Macro: ASM_DECLARE_UNRESOLVED_REFERENCE (STREAM, NAME)
   33228      A C statement (sans semicolon) to output to the stdio stream
   33229      STREAM commands to declare that the label NAME is an unresolved
   33230      Objective-C class reference.  This is only needed for targets
   33231      whose linkers have special support for NeXT-style runtimes.
   33232 
   33233 
   33234 File: gccint.info,  Node: Initialization,  Next: Macros for Initialization,  Prev: Label Output,  Up: Assembler Format
   33235 
   33236 17.21.5 How Initialization Functions Are Handled
   33237 ------------------------------------------------
   33238 
   33239 The compiled code for certain languages includes "constructors" (also
   33240 called "initialization routines")--functions to initialize data in the
   33241 program when the program is started.  These functions need to be called
   33242 before the program is "started"--that is to say, before `main' is
   33243 called.
   33244 
   33245  Compiling some languages generates "destructors" (also called
   33246 "termination routines") that should be called when the program
   33247 terminates.
   33248 
   33249  To make the initialization and termination functions work, the compiler
   33250 must output something in the assembler code to cause those functions to
   33251 be called at the appropriate time.  When you port the compiler to a new
   33252 system, you need to specify how to do this.
   33253 
   33254  There are two major ways that GCC currently supports the execution of
   33255 initialization and termination functions.  Each way has two variants.
   33256 Much of the structure is common to all four variations.
   33257 
   33258  The linker must build two lists of these functions--a list of
   33259 initialization functions, called `__CTOR_LIST__', and a list of
   33260 termination functions, called `__DTOR_LIST__'.
   33261 
   33262  Each list always begins with an ignored function pointer (which may
   33263 hold 0, -1, or a count of the function pointers after it, depending on
   33264 the environment).  This is followed by a series of zero or more function
   33265 pointers to constructors (or destructors), followed by a function
   33266 pointer containing zero.
   33267 
   33268  Depending on the operating system and its executable file format,
   33269 either `crtstuff.c' or `libgcc2.c' traverses these lists at startup
   33270 time and exit time.  Constructors are called in reverse order of the
   33271 list; destructors in forward order.
   33272 
   33273  The best way to handle static constructors works only for object file
   33274 formats which provide arbitrarily-named sections.  A section is set
   33275 aside for a list of constructors, and another for a list of destructors.
   33276 Traditionally these are called `.ctors' and `.dtors'.  Each object file
   33277 that defines an initialization function also puts a word in the
   33278 constructor section to point to that function.  The linker accumulates
   33279 all these words into one contiguous `.ctors' section.  Termination
   33280 functions are handled similarly.
   33281 
   33282  This method will be chosen as the default by `target-def.h' if
   33283 `TARGET_ASM_NAMED_SECTION' is defined.  A target that does not support
   33284 arbitrary sections, but does support special designated constructor and
   33285 destructor sections may define `CTORS_SECTION_ASM_OP' and
   33286 `DTORS_SECTION_ASM_OP' to achieve the same effect.
   33287 
   33288  When arbitrary sections are available, there are two variants,
   33289 depending upon how the code in `crtstuff.c' is called.  On systems that
   33290 support a ".init" section which is executed at program startup, parts
   33291 of `crtstuff.c' are compiled into that section.  The program is linked
   33292 by the `gcc' driver like this:
   33293 
   33294      ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o
   33295 
   33296  The prologue of a function (`__init') appears in the `.init' section
   33297 of `crti.o'; the epilogue appears in `crtn.o'.  Likewise for the
   33298 function `__fini' in the ".fini" section.  Normally these files are
   33299 provided by the operating system or by the GNU C library, but are
   33300 provided by GCC for a few targets.
   33301 
   33302  The objects `crtbegin.o' and `crtend.o' are (for most targets)
   33303 compiled from `crtstuff.c'.  They contain, among other things, code
   33304 fragments within the `.init' and `.fini' sections that branch to
   33305 routines in the `.text' section.  The linker will pull all parts of a
   33306 section together, which results in a complete `__init' function that
   33307 invokes the routines we need at startup.
   33308 
   33309  To use this variant, you must define the `INIT_SECTION_ASM_OP' macro
   33310 properly.
   33311 
   33312  If no init section is available, when GCC compiles any function called
   33313 `main' (or more accurately, any function designated as a program entry
   33314 point by the language front end calling `expand_main_function'), it
   33315 inserts a procedure call to `__main' as the first executable code after
   33316 the function prologue.  The `__main' function is defined in `libgcc2.c'
   33317 and runs the global constructors.
   33318 
   33319  In file formats that don't support arbitrary sections, there are again
   33320 two variants.  In the simplest variant, the GNU linker (GNU `ld') and
   33321 an `a.out' format must be used.  In this case, `TARGET_ASM_CONSTRUCTOR'
   33322 is defined to produce a `.stabs' entry of type `N_SETT', referencing
   33323 the name `__CTOR_LIST__', and with the address of the void function
   33324 containing the initialization code as its value.  The GNU linker
   33325 recognizes this as a request to add the value to a "set"; the values
   33326 are accumulated, and are eventually placed in the executable as a
   33327 vector in the format described above, with a leading (ignored) count
   33328 and a trailing zero element.  `TARGET_ASM_DESTRUCTOR' is handled
   33329 similarly.  Since no init section is available, the absence of
   33330 `INIT_SECTION_ASM_OP' causes the compilation of `main' to call `__main'
   33331 as above, starting the initialization process.
   33332 
   33333  The last variant uses neither arbitrary sections nor the GNU linker.
   33334 This is preferable when you want to do dynamic linking and when using
   33335 file formats which the GNU linker does not support, such as `ECOFF'.  In
   33336 this case, `TARGET_HAVE_CTORS_DTORS' is false, initialization and
   33337 termination functions are recognized simply by their names.  This
   33338 requires an extra program in the linkage step, called `collect2'.  This
   33339 program pretends to be the linker, for use with GCC; it does its job by
   33340 running the ordinary linker, but also arranges to include the vectors of
   33341 initialization and termination functions.  These functions are called
   33342 via `__main' as described above.  In order to use this method,
   33343 `use_collect2' must be defined in the target in `config.gcc'.
   33344 
   33345  The following section describes the specific macros that control and
   33346 customize the handling of initialization and termination functions.
   33347 
   33348 
   33349 File: gccint.info,  Node: Macros for Initialization,  Next: Instruction Output,  Prev: Initialization,  Up: Assembler Format
   33350 
   33351 17.21.6 Macros Controlling Initialization Routines
   33352 --------------------------------------------------
   33353 
   33354 Here are the macros that control how the compiler handles initialization
   33355 and termination functions:
   33356 
   33357  -- Macro: INIT_SECTION_ASM_OP
   33358      If defined, a C string constant, including spacing, for the
   33359      assembler operation to identify the following data as
   33360      initialization code.  If not defined, GCC will assume such a
   33361      section does not exist.  When you are using special sections for
   33362      initialization and termination functions, this macro also controls
   33363      how `crtstuff.c' and `libgcc2.c' arrange to run the initialization
   33364      functions.
   33365 
   33366  -- Macro: HAS_INIT_SECTION
   33367      If defined, `main' will not call `__main' as described above.
   33368      This macro should be defined for systems that control start-up code
   33369      on a symbol-by-symbol basis, such as OSF/1, and should not be
   33370      defined explicitly for systems that support `INIT_SECTION_ASM_OP'.
   33371 
   33372  -- Macro: LD_INIT_SWITCH
   33373      If defined, a C string constant for a switch that tells the linker
   33374      that the following symbol is an initialization routine.
   33375 
   33376  -- Macro: LD_FINI_SWITCH
   33377      If defined, a C string constant for a switch that tells the linker
   33378      that the following symbol is a finalization routine.
   33379 
   33380  -- Macro: COLLECT_SHARED_INIT_FUNC (STREAM, FUNC)
   33381      If defined, a C statement that will write a function that can be
   33382      automatically called when a shared library is loaded.  The function
   33383      should call FUNC, which takes no arguments.  If not defined, and
   33384      the object format requires an explicit initialization function,
   33385      then a function called `_GLOBAL__DI' will be generated.
   33386 
   33387      This function and the following one are used by collect2 when
   33388      linking a shared library that needs constructors or destructors,
   33389      or has DWARF2 exception tables embedded in the code.
   33390 
   33391  -- Macro: COLLECT_SHARED_FINI_FUNC (STREAM, FUNC)
   33392      If defined, a C statement that will write a function that can be
   33393      automatically called when a shared library is unloaded.  The
   33394      function should call FUNC, which takes no arguments.  If not
   33395      defined, and the object format requires an explicit finalization
   33396      function, then a function called `_GLOBAL__DD' will be generated.
   33397 
   33398  -- Macro: INVOKE__main
   33399      If defined, `main' will call `__main' despite the presence of
   33400      `INIT_SECTION_ASM_OP'.  This macro should be defined for systems
   33401      where the init section is not actually run automatically, but is
   33402      still useful for collecting the lists of constructors and
   33403      destructors.
   33404 
   33405  -- Macro: SUPPORTS_INIT_PRIORITY
   33406      If nonzero, the C++ `init_priority' attribute is supported and the
   33407      compiler should emit instructions to control the order of
   33408      initialization of objects.  If zero, the compiler will issue an
   33409      error message upon encountering an `init_priority' attribute.
   33410 
   33411  -- Target Hook: bool TARGET_HAVE_CTORS_DTORS
   33412      This value is true if the target supports some "native" method of
   33413      collecting constructors and destructors to be run at startup and
   33414      exit.  It is false if we must use `collect2'.
   33415 
   33416  -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY)
   33417      If defined, a function that outputs assembler code to arrange to
   33418      call the function referenced by SYMBOL at initialization time.
   33419 
   33420      Assume that SYMBOL is a `SYMBOL_REF' for a function taking no
   33421      arguments and with no return value.  If the target supports
   33422      initialization priorities, PRIORITY is a value between 0 and
   33423      `MAX_INIT_PRIORITY'; otherwise it must be `DEFAULT_INIT_PRIORITY'.
   33424 
   33425      If this macro is not defined by the target, a suitable default will
   33426      be chosen if (1) the target supports arbitrary section names, (2)
   33427      the target defines `CTORS_SECTION_ASM_OP', or (3) `USE_COLLECT2'
   33428      is not defined.
   33429 
   33430  -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY)
   33431      This is like `TARGET_ASM_CONSTRUCTOR' but used for termination
   33432      functions rather than initialization functions.
   33433 
   33434  If `TARGET_HAVE_CTORS_DTORS' is true, the initialization routine
   33435 generated for the generated object file will have static linkage.
   33436 
   33437  If your system uses `collect2' as the means of processing
   33438 constructors, then that program normally uses `nm' to scan an object
   33439 file for constructor functions to be called.
   33440 
   33441  On certain kinds of systems, you can define this macro to make
   33442 `collect2' work faster (and, in some cases, make it work at all):
   33443 
   33444  -- Macro: OBJECT_FORMAT_COFF
   33445      Define this macro if the system uses COFF (Common Object File
   33446      Format) object files, so that `collect2' can assume this format
   33447      and scan object files directly for dynamic constructor/destructor
   33448      functions.
   33449 
   33450      This macro is effective only in a native compiler; `collect2' as
   33451      part of a cross compiler always uses `nm' for the target machine.
   33452 
   33453  -- Macro: REAL_NM_FILE_NAME
   33454      Define this macro as a C string constant containing the file name
   33455      to use to execute `nm'.  The default is to search the path
   33456      normally for `nm'.
   33457 
   33458  -- Macro: NM_FLAGS
   33459      `collect2' calls `nm' to scan object files for static constructors
   33460      and destructors and LTO info.  By default, `-n' is passed.  Define
   33461      `NM_FLAGS' to a C string constant if other options are needed to
   33462      get the same output format as GNU `nm -n' produces.
   33463 
   33464  If your system supports shared libraries and has a program to list the
   33465 dynamic dependencies of a given library or executable, you can define
   33466 these macros to enable support for running initialization and
   33467 termination functions in shared libraries:
   33468 
   33469  -- Macro: LDD_SUFFIX
   33470      Define this macro to a C string constant containing the name of
   33471      the program which lists dynamic dependencies, like `ldd' under
   33472      SunOS 4.
   33473 
   33474  -- Macro: PARSE_LDD_OUTPUT (PTR)
   33475      Define this macro to be C code that extracts filenames from the
   33476      output of the program denoted by `LDD_SUFFIX'.  PTR is a variable
   33477      of type `char *' that points to the beginning of a line of output
   33478      from `LDD_SUFFIX'.  If the line lists a dynamic dependency, the
   33479      code must advance PTR to the beginning of the filename on that
   33480      line.  Otherwise, it must set PTR to `NULL'.
   33481 
   33482  -- Macro: SHLIB_SUFFIX
   33483      Define this macro to a C string constant containing the default
   33484      shared library extension of the target (e.g., `".so"').  `collect2'
   33485      strips version information after this suffix when generating global
   33486      constructor and destructor names.  This define is only needed on
   33487      targets that use `collect2' to process constructors and
   33488      destructors.
   33489 
   33490 
   33491 File: gccint.info,  Node: Instruction Output,  Next: Dispatch Tables,  Prev: Macros for Initialization,  Up: Assembler Format
   33492 
   33493 17.21.7 Output of Assembler Instructions
   33494 ----------------------------------------
   33495 
   33496 This describes assembler instruction output.
   33497 
   33498  -- Macro: REGISTER_NAMES
   33499      A C initializer containing the assembler's names for the machine
   33500      registers, each one as a C string constant.  This is what
   33501      translates register numbers in the compiler into assembler
   33502      language.
   33503 
   33504  -- Macro: ADDITIONAL_REGISTER_NAMES
   33505      If defined, a C initializer for an array of structures containing
   33506      a name and a register number.  This macro defines additional names
   33507      for hard registers, thus allowing the `asm' option in declarations
   33508      to refer to registers using alternate names.
   33509 
   33510  -- Macro: OVERLAPPING_REGISTER_NAMES
   33511      If defined, a C initializer for an array of structures containing a
   33512      name, a register number and a count of the number of consecutive
   33513      machine registers the name overlaps.  This macro defines additional
   33514      names for hard registers, thus allowing the `asm' option in
   33515      declarations to refer to registers using alternate names.  Unlike
   33516      `ADDITIONAL_REGISTER_NAMES', this macro should be used when the
   33517      register name implies multiple underlying registers.
   33518 
   33519      This macro should be used when it is important that a clobber in an
   33520      `asm' statement clobbers all the underlying values implied by the
   33521      register name.  For example, on ARM, clobbering the
   33522      double-precision VFP register "d0" implies clobbering both
   33523      single-precision registers "s0" and "s1".
   33524 
   33525  -- Macro: ASM_OUTPUT_OPCODE (STREAM, PTR)
   33526      Define this macro if you are using an unusual assembler that
   33527      requires different names for the machine instructions.
   33528 
   33529      The definition is a C statement or statements which output an
   33530      assembler instruction opcode to the stdio stream STREAM.  The
   33531      macro-operand PTR is a variable of type `char *' which points to
   33532      the opcode name in its "internal" form--the form that is written
   33533      in the machine description.  The definition should output the
   33534      opcode name to STREAM, performing any translation you desire, and
   33535      increment the variable PTR to point at the end of the opcode so
   33536      that it will not be output twice.
   33537 
   33538      In fact, your macro definition may process less than the entire
   33539      opcode name, or more than the opcode name; but if you want to
   33540      process text that includes `%'-sequences to substitute operands,
   33541      you must take care of the substitution yourself.  Just be sure to
   33542      increment PTR over whatever text should not be output normally.
   33543 
   33544      If you need to look at the operand values, they can be found as the
   33545      elements of `recog_data.operand'.
   33546 
   33547      If the macro definition does nothing, the instruction is output in
   33548      the usual way.
   33549 
   33550  -- Macro: FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)
   33551      If defined, a C statement to be executed just prior to the output
   33552      of assembler code for INSN, to modify the extracted operands so
   33553      they will be output differently.
   33554 
   33555      Here the argument OPVEC is the vector containing the operands
   33556      extracted from INSN, and NOPERANDS is the number of elements of
   33557      the vector which contain meaningful data for this insn.  The
   33558      contents of this vector are what will be used to convert the insn
   33559      template into assembler code, so you can change the assembler
   33560      output by changing the contents of the vector.
   33561 
   33562      This macro is useful when various assembler syntaxes share a single
   33563      file of instruction patterns; by defining this macro differently,
   33564      you can cause a large class of instructions to be output
   33565      differently (such as with rearranged operands).  Naturally,
   33566      variations in assembler syntax affecting individual insn patterns
   33567      ought to be handled by writing conditional output routines in
   33568      those patterns.
   33569 
   33570      If this macro is not defined, it is equivalent to a null statement.
   33571 
   33572  -- Target Hook: void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *FILE, rtx
   33573           INSN, rtx *OPVEC, int NOPERANDS)
   33574      If defined, this target hook is a function which is executed just
   33575      after the output of assembler code for INSN, to change the mode of
   33576      the assembler if necessary.
   33577 
   33578      Here the argument OPVEC is the vector containing the operands
   33579      extracted from INSN, and NOPERANDS is the number of elements of
   33580      the vector which contain meaningful data for this insn.  The
   33581      contents of this vector are what was used to convert the insn
   33582      template into assembler code, so you can change the assembler mode
   33583      by checking the contents of the vector.
   33584 
   33585  -- Macro: PRINT_OPERAND (STREAM, X, CODE)
   33586      A C compound statement to output to stdio stream STREAM the
   33587      assembler syntax for an instruction operand X.  X is an RTL
   33588      expression.
   33589 
   33590      CODE is a value that can be used to specify one of several ways of
   33591      printing the operand.  It is used when identical operands must be
   33592      printed differently depending on the context.  CODE comes from the
   33593      `%' specification that was used to request printing of the
   33594      operand.  If the specification was just `%DIGIT' then CODE is 0;
   33595      if the specification was `%LTR DIGIT' then CODE is the ASCII code
   33596      for LTR.
   33597 
   33598      If X is a register, this macro should print the register's name.
   33599      The names can be found in an array `reg_names' whose type is `char
   33600      *[]'.  `reg_names' is initialized from `REGISTER_NAMES'.
   33601 
   33602      When the machine description has a specification `%PUNCT' (a `%'
   33603      followed by a punctuation character), this macro is called with a
   33604      null pointer for X and the punctuation character for CODE.
   33605 
   33606  -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE)
   33607      A C expression which evaluates to true if CODE is a valid
   33608      punctuation character for use in the `PRINT_OPERAND' macro.  If
   33609      `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no
   33610      punctuation characters (except for the standard one, `%') are used
   33611      in this way.
   33612 
   33613  -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X)
   33614      A C compound statement to output to stdio stream STREAM the
   33615      assembler syntax for an instruction operand that is a memory
   33616      reference whose address is X.  X is an RTL expression.
   33617 
   33618      On some machines, the syntax for a symbolic address depends on the
   33619      section that the address refers to.  On these machines, define the
   33620      hook `TARGET_ENCODE_SECTION_INFO' to store the information into the
   33621      `symbol_ref', and then check for it here.  *Note Assembler
   33622      Format::.
   33623 
   33624  -- Macro: DBR_OUTPUT_SEQEND (FILE)
   33625      A C statement, to be executed after all slot-filler instructions
   33626      have been output.  If necessary, call `dbr_sequence_length' to
   33627      determine the number of slots filled in a sequence (zero if not
   33628      currently outputting a sequence), to decide how many no-ops to
   33629      output, or whatever.
   33630 
   33631      Don't define this macro if it has nothing to do, but it is helpful
   33632      in reading assembly output if the extent of the delay sequence is
   33633      made explicit (e.g. with white space).
   33634 
   33635  Note that output routines for instructions with delay slots must be
   33636 prepared to deal with not being output as part of a sequence (i.e. when
   33637 the scheduling pass is not run, or when no slot fillers could be
   33638 found.)  The variable `final_sequence' is null when not processing a
   33639 sequence, otherwise it contains the `sequence' rtx being output.
   33640 
   33641  -- Macro: REGISTER_PREFIX
   33642  -- Macro: LOCAL_LABEL_PREFIX
   33643  -- Macro: USER_LABEL_PREFIX
   33644  -- Macro: IMMEDIATE_PREFIX
   33645      If defined, C string expressions to be used for the `%R', `%L',
   33646      `%U', and `%I' options of `asm_fprintf' (see `final.c').  These
   33647      are useful when a single `md' file must support multiple assembler
   33648      formats.  In that case, the various `tm.h' files can define these
   33649      macros differently.
   33650 
   33651  -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT)
   33652      If defined this macro should expand to a series of `case'
   33653      statements which will be parsed inside the `switch' statement of
   33654      the `asm_fprintf' function.  This allows targets to define extra
   33655      printf formats which may useful when generating their assembler
   33656      statements.  Note that uppercase letters are reserved for future
   33657      generic extensions to asm_fprintf, and so are not available to
   33658      target specific code.  The output file is given by the parameter
   33659      FILE.  The varargs input pointer is ARGPTR and the rest of the
   33660      format string, starting the character after the one that is being
   33661      switched upon, is pointed to by FORMAT.
   33662 
   33663  -- Macro: ASSEMBLER_DIALECT
   33664      If your target supports multiple dialects of assembler language
   33665      (such as different opcodes), define this macro as a C expression
   33666      that gives the numeric index of the assembler language dialect to
   33667      use, with zero as the first variant.
   33668 
   33669      If this macro is defined, you may use constructs of the form
   33670           `{option0|option1|option2...}'
   33671      in the output templates of patterns (*note Output Template::) or
   33672      in the first argument of `asm_fprintf'.  This construct outputs
   33673      `option0', `option1', `option2', etc., if the value of
   33674      `ASSEMBLER_DIALECT' is zero, one, two, etc.  Any special characters
   33675      within these strings retain their usual meaning.  If there are
   33676      fewer alternatives within the braces than the value of
   33677      `ASSEMBLER_DIALECT', the construct outputs nothing.
   33678 
   33679      If you do not define this macro, the characters `{', `|' and `}'
   33680      do not have any special meaning when used in templates or operands
   33681      to `asm_fprintf'.
   33682 
   33683      Define the macros `REGISTER_PREFIX', `LOCAL_LABEL_PREFIX',
   33684      `USER_LABEL_PREFIX' and `IMMEDIATE_PREFIX' if you can express the
   33685      variations in assembler language syntax with that mechanism.
   33686      Define `ASSEMBLER_DIALECT' and use the `{option0|option1}' syntax
   33687      if the syntax variant are larger and involve such things as
   33688      different opcodes or operand order.
   33689 
   33690  -- Macro: ASM_OUTPUT_REG_PUSH (STREAM, REGNO)
   33691      A C expression to output to STREAM some assembler code which will
   33692      push hard register number REGNO onto the stack.  The code need not
   33693      be optimal, since this macro is used only when profiling.
   33694 
   33695  -- Macro: ASM_OUTPUT_REG_POP (STREAM, REGNO)
   33696      A C expression to output to STREAM some assembler code which will
   33697      pop hard register number REGNO off of the stack.  The code need
   33698      not be optimal, since this macro is used only when profiling.
   33699 
   33700 
   33701 File: gccint.info,  Node: Dispatch Tables,  Next: Exception Region Output,  Prev: Instruction Output,  Up: Assembler Format
   33702 
   33703 17.21.8 Output of Dispatch Tables
   33704 ---------------------------------
   33705 
   33706 This concerns dispatch tables.
   33707 
   33708  -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL)
   33709      A C statement to output to the stdio stream STREAM an assembler
   33710      pseudo-instruction to generate a difference between two labels.
   33711      VALUE and REL are the numbers of two internal labels.  The
   33712      definitions of these labels are output using
   33713      `(*targetm.asm_out.internal_label)', and they must be printed in
   33714      the same way here.  For example,
   33715 
   33716           fprintf (STREAM, "\t.word L%d-L%d\n",
   33717                    VALUE, REL)
   33718 
   33719      You must provide this macro on machines where the addresses in a
   33720      dispatch table are relative to the table's own address.  If
   33721      defined, GCC will also use this macro on all machines when
   33722      producing PIC.  BODY is the body of the `ADDR_DIFF_VEC'; it is
   33723      provided so that the mode and flags can be read.
   33724 
   33725  -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)
   33726      This macro should be provided on machines where the addresses in a
   33727      dispatch table are absolute.
   33728 
   33729      The definition should be a C statement to output to the stdio
   33730      stream STREAM an assembler pseudo-instruction to generate a
   33731      reference to a label.  VALUE is the number of an internal label
   33732      whose definition is output using
   33733      `(*targetm.asm_out.internal_label)'.  For example,
   33734 
   33735           fprintf (STREAM, "\t.word L%d\n", VALUE)
   33736 
   33737  -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)
   33738      Define this if the label before a jump-table needs to be output
   33739      specially.  The first three arguments are the same as for
   33740      `(*targetm.asm_out.internal_label)'; the fourth argument is the
   33741      jump-table which follows (a `jump_insn' containing an `addr_vec'
   33742      or `addr_diff_vec').
   33743 
   33744      This feature is used on system V to output a `swbeg' statement for
   33745      the table.
   33746 
   33747      If this macro is not defined, these labels are output with
   33748      `(*targetm.asm_out.internal_label)'.
   33749 
   33750  -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)
   33751      Define this if something special must be output at the end of a
   33752      jump-table.  The definition should be a C statement to be executed
   33753      after the assembler code for the table is written.  It should write
   33754      the appropriate code to stdio stream STREAM.  The argument TABLE
   33755      is the jump-table insn, and NUM is the label-number of the
   33756      preceding label.
   33757 
   33758      If this macro is not defined, nothing special is output at the end
   33759      of the jump-table.
   33760 
   33761  -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *STREAM, tree
   33762           DECL, int FOR_EH, int EMPTY)
   33763      This target hook emits a label at the beginning of each FDE.  It
   33764      should be defined on targets where FDEs need special labels, and it
   33765      should write the appropriate label, for the FDE associated with the
   33766      function declaration DECL, to the stdio stream STREAM.  The third
   33767      argument, FOR_EH, is a boolean: true if this is for an exception
   33768      table.  The fourth argument, EMPTY, is a boolean: true if this is
   33769      a placeholder label for an omitted FDE.
   33770 
   33771      The default is that FDEs are not given nonlocal labels.
   33772 
   33773  -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (FILE *STREAM)
   33774      This target hook emits a label at the beginning of the exception
   33775      table.  It should be defined on targets where it is desirable for
   33776      the table to be broken up according to function.
   33777 
   33778      The default is that no label is emitted.
   33779 
   33780  -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_PERSONALITY (rtx
   33781           PERSONALITY)
   33782      If the target implements `TARGET_ASM_UNWIND_EMIT', this hook may
   33783      be used to emit a directive to install a personality hook into the
   33784      unwind info.  This hook should not be used if dwarf2 unwind info
   33785      is used.
   33786 
   33787  -- Target Hook: void TARGET_ASM_UNWIND_EMIT (FILE *STREAM, rtx INSN)
   33788      This target hook emits assembly directives required to unwind the
   33789      given instruction.  This is only used when
   33790      `TARGET_EXCEPT_UNWIND_INFO' returns `UI_TARGET'.
   33791 
   33792  -- Target Hook: bool TARGET_ASM_UNWIND_EMIT_BEFORE_INSN
   33793      True if the `TARGET_ASM_UNWIND_EMIT' hook should be called before
   33794      the assembly for INSN has been emitted, false if the hook should
   33795      be called afterward.
   33796 
   33797 
   33798 File: gccint.info,  Node: Exception Region Output,  Next: Alignment Output,  Prev: Dispatch Tables,  Up: Assembler Format
   33799 
   33800 17.21.9 Assembler Commands for Exception Regions
   33801 ------------------------------------------------
   33802 
   33803 This describes commands marking the start and the end of an exception
   33804 region.
   33805 
   33806  -- Macro: EH_FRAME_SECTION_NAME
   33807      If defined, a C string constant for the name of the section
   33808      containing exception handling frame unwind information.  If not
   33809      defined, GCC will provide a default definition if the target
   33810      supports named sections.  `crtstuff.c' uses this macro to switch
   33811      to the appropriate section.
   33812 
   33813      You should define this symbol if your target supports DWARF 2 frame
   33814      unwind information and the default definition does not work.
   33815 
   33816  -- Macro: EH_FRAME_IN_DATA_SECTION
   33817      If defined, DWARF 2 frame unwind information will be placed in the
   33818      data section even though the target supports named sections.  This
   33819      might be necessary, for instance, if the system linker does garbage
   33820      collection and sections cannot be marked as not to be collected.
   33821 
   33822      Do not define this macro unless `TARGET_ASM_NAMED_SECTION' is also
   33823      defined.
   33824 
   33825  -- Macro: EH_TABLES_CAN_BE_READ_ONLY
   33826      Define this macro to 1 if your target is such that no frame unwind
   33827      information encoding used with non-PIC code will ever require a
   33828      runtime relocation, but the linker may not support merging
   33829      read-only and read-write sections into a single read-write section.
   33830 
   33831  -- Macro: MASK_RETURN_ADDR
   33832      An rtx used to mask the return address found via
   33833      `RETURN_ADDR_RTX', so that it does not contain any extraneous set
   33834      bits in it.
   33835 
   33836  -- Macro: DWARF2_UNWIND_INFO
   33837      Define this macro to 0 if your target supports DWARF 2 frame unwind
   33838      information, but it does not yet work with exception handling.
   33839      Otherwise, if your target supports this information (if it defines
   33840      `INCOMING_RETURN_ADDR_RTX' and either `UNALIGNED_INT_ASM_OP' or
   33841      `OBJECT_FORMAT_ELF'), GCC will provide a default definition of 1.
   33842 
   33843  -- Target Hook: enum unwind_info_type TARGET_EXCEPT_UNWIND_INFO
   33844           (struct gcc_options *OPTS)
   33845      This hook defines the mechanism that will be used for exception
   33846      handling by the target.  If the target has ABI specified unwind
   33847      tables, the hook should return `UI_TARGET'.  If the target is to
   33848      use the `setjmp'/`longjmp'-based exception handling scheme, the
   33849      hook should return `UI_SJLJ'.  If the target supports DWARF 2
   33850      frame unwind information, the hook should return `UI_DWARF2'.
   33851 
   33852      A target may, if exceptions are disabled, choose to return
   33853      `UI_NONE'.  This may end up simplifying other parts of
   33854      target-specific code.  The default implementation of this hook
   33855      never returns `UI_NONE'.
   33856 
   33857      Note that the value returned by this hook should be constant.  It
   33858      should not depend on anything except the command-line switches
   33859      described by OPTS.  In particular, the setting `UI_SJLJ' must be
   33860      fixed at compiler start-up as C pre-processor macros and builtin
   33861      functions related to exception handling are set up depending on
   33862      this setting.
   33863 
   33864      The default implementation of the hook first honors the
   33865      `--enable-sjlj-exceptions' configure option, then
   33866      `DWARF2_UNWIND_INFO', and finally defaults to `UI_SJLJ'.  If
   33867      `DWARF2_UNWIND_INFO' depends on command-line options, the target
   33868      must define this hook so that OPTS is used correctly.
   33869 
   33870  -- Target Hook: bool TARGET_UNWIND_TABLES_DEFAULT
   33871      This variable should be set to `true' if the target ABI requires
   33872      unwinding tables even when exceptions are not used.  It must not
   33873      be modified by command-line option processing.
   33874 
   33875  -- Macro: DONT_USE_BUILTIN_SETJMP
   33876      Define this macro to 1 if the `setjmp'/`longjmp'-based scheme
   33877      should use the `setjmp'/`longjmp' functions from the C library
   33878      instead of the `__builtin_setjmp'/`__builtin_longjmp' machinery.
   33879 
   33880  -- Macro: DWARF_CIE_DATA_ALIGNMENT
   33881      This macro need only be defined if the target might save registers
   33882      in the function prologue at an offset to the stack pointer that is
   33883      not aligned to `UNITS_PER_WORD'.  The definition should be the
   33884      negative minimum alignment if `STACK_GROWS_DOWNWARD' is defined,
   33885      and the positive minimum alignment otherwise.  *Note SDB and
   33886      DWARF::.  Only applicable if the target supports DWARF 2 frame
   33887      unwind information.
   33888 
   33889  -- Target Hook: bool TARGET_TERMINATE_DW2_EH_FRAME_INFO
   33890      Contains the value true if the target should add a zero word onto
   33891      the end of a Dwarf-2 frame info section when used for exception
   33892      handling.  Default value is false if `EH_FRAME_SECTION_NAME' is
   33893      defined, and true otherwise.
   33894 
   33895  -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG)
   33896      Given a register, this hook should return a parallel of registers
   33897      to represent where to find the register pieces.  Define this hook
   33898      if the register and its mode are represented in Dwarf in
   33899      non-contiguous locations, or if the register should be represented
   33900      in more than one register in Dwarf.  Otherwise, this hook should
   33901      return `NULL_RTX'.  If not defined, the default is to return
   33902      `NULL_RTX'.
   33903 
   33904  -- Target Hook: void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree ADDRESS)
   33905      If some registers are represented in Dwarf-2 unwind information in
   33906      multiple pieces, define this hook to fill in information about the
   33907      sizes of those pieces in the table used by the unwinder at runtime.
   33908      It will be called by `expand_builtin_init_dwarf_reg_sizes' after
   33909      filling in a single size corresponding to each hard register;
   33910      ADDRESS is the address of the table.
   33911 
   33912  -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM)
   33913      This hook is used to output a reference from a frame unwinding
   33914      table to the type_info object identified by SYM.  It should return
   33915      `true' if the reference was output.  Returning `false' will cause
   33916      the reference to be output using the normal Dwarf2 routines.
   33917 
   33918  -- Target Hook: bool TARGET_ARM_EABI_UNWINDER
   33919      This flag should be set to `true' on targets that use an ARM EABI
   33920      based unwinding library, and `false' on other targets.  This
   33921      effects the format of unwinding tables, and how the unwinder in
   33922      entered after running a cleanup.  The default is `false'.
   33923 
   33924 
   33925 File: gccint.info,  Node: Alignment Output,  Prev: Exception Region Output,  Up: Assembler Format
   33926 
   33927 17.21.10 Assembler Commands for Alignment
   33928 -----------------------------------------
   33929 
   33930 This describes commands for alignment.
   33931 
   33932  -- Macro: JUMP_ALIGN (LABEL)
   33933      The alignment (log base 2) to put in front of LABEL, which is a
   33934      common destination of jumps and has no fallthru incoming edge.
   33935 
   33936      This macro need not be defined if you don't want any special
   33937      alignment to be done at such a time.  Most machine descriptions do
   33938      not currently define the macro.
   33939 
   33940      Unless it's necessary to inspect the LABEL parameter, it is better
   33941      to set the variable ALIGN_JUMPS in the target's
   33942      `TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
   33943      user's selection in ALIGN_JUMPS in a `JUMP_ALIGN' implementation.
   33944 
   33945  -- Target Hook: int TARGET_ASM_JUMP_ALIGN_MAX_SKIP (rtx LABEL)
   33946      The maximum number of bytes to skip before LABEL when applying
   33947      `JUMP_ALIGN'.  This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is
   33948      defined.
   33949 
   33950  -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL)
   33951      The alignment (log base 2) to put in front of LABEL, which follows
   33952      a `BARRIER'.
   33953 
   33954      This macro need not be defined if you don't want any special
   33955      alignment to be done at such a time.  Most machine descriptions do
   33956      not currently define the macro.
   33957 
   33958  -- Target Hook: int TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP (rtx
   33959           LABEL)
   33960      The maximum number of bytes to skip before LABEL when applying
   33961      `LABEL_ALIGN_AFTER_BARRIER'.  This works only if
   33962      `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
   33963 
   33964  -- Macro: LOOP_ALIGN (LABEL)
   33965      The alignment (log base 2) to put in front of LABEL, which follows
   33966      a `NOTE_INSN_LOOP_BEG' note.
   33967 
   33968      This macro need not be defined if you don't want any special
   33969      alignment to be done at such a time.  Most machine descriptions do
   33970      not currently define the macro.
   33971 
   33972      Unless it's necessary to inspect the LABEL parameter, it is better
   33973      to set the variable `align_loops' in the target's
   33974      `TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
   33975      user's selection in `align_loops' in a `LOOP_ALIGN' implementation.
   33976 
   33977  -- Target Hook: int TARGET_ASM_LOOP_ALIGN_MAX_SKIP (rtx LABEL)
   33978      The maximum number of bytes to skip when applying `LOOP_ALIGN' to
   33979      LABEL.  This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
   33980 
   33981  -- Macro: LABEL_ALIGN (LABEL)
   33982      The alignment (log base 2) to put in front of LABEL.  If
   33983      `LABEL_ALIGN_AFTER_BARRIER' / `LOOP_ALIGN' specify a different
   33984      alignment, the maximum of the specified values is used.
   33985 
   33986      Unless it's necessary to inspect the LABEL parameter, it is better
   33987      to set the variable `align_labels' in the target's
   33988      `TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
   33989      user's selection in `align_labels' in a `LABEL_ALIGN'
   33990      implementation.
   33991 
   33992  -- Target Hook: int TARGET_ASM_LABEL_ALIGN_MAX_SKIP (rtx LABEL)
   33993      The maximum number of bytes to skip when applying `LABEL_ALIGN' to
   33994      LABEL.  This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
   33995 
   33996  -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES)
   33997      A C statement to output to the stdio stream STREAM an assembler
   33998      instruction to advance the location counter by NBYTES bytes.
   33999      Those bytes should be zero when loaded.  NBYTES will be a C
   34000      expression of type `unsigned HOST_WIDE_INT'.
   34001 
   34002  -- Macro: ASM_NO_SKIP_IN_TEXT
   34003      Define this macro if `ASM_OUTPUT_SKIP' should not be used in the
   34004      text section because it fails to put zeros in the bytes that are
   34005      skipped.  This is true on many Unix systems, where the pseudo-op
   34006      to skip bytes produces no-op instructions rather than zeros when
   34007      used in the text section.
   34008 
   34009  -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER)
   34010      A C statement to output to the stdio stream STREAM an assembler
   34011      command to advance the location counter to a multiple of 2 to the
   34012      POWER bytes.  POWER will be a C expression of type `int'.
   34013 
   34014  -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER)
   34015      Like `ASM_OUTPUT_ALIGN', except that the "nop" instruction is used
   34016      for padding, if necessary.
   34017 
   34018  -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP)
   34019      A C statement to output to the stdio stream STREAM an assembler
   34020      command to advance the location counter to a multiple of 2 to the
   34021      POWER bytes, but only if MAX_SKIP or fewer bytes are needed to
   34022      satisfy the alignment request.  POWER and MAX_SKIP will be a C
   34023      expression of type `int'.
   34024 
   34025 
   34026 File: gccint.info,  Node: Debugging Info,  Next: Floating Point,  Prev: Assembler Format,  Up: Target Macros
   34027 
   34028 17.22 Controlling Debugging Information Format
   34029 ==============================================
   34030 
   34031 This describes how to specify debugging information.
   34032 
   34033 * Menu:
   34034 
   34035 * All Debuggers::      Macros that affect all debugging formats uniformly.
   34036 * DBX Options::        Macros enabling specific options in DBX format.
   34037 * DBX Hooks::          Hook macros for varying DBX format.
   34038 * File Names and DBX:: Macros controlling output of file names in DBX format.
   34039 * SDB and DWARF::      Macros for SDB (COFF) and DWARF formats.
   34040 * VMS Debug::          Macros for VMS debug format.
   34041 
   34042 
   34043 File: gccint.info,  Node: All Debuggers,  Next: DBX Options,  Up: Debugging Info
   34044 
   34045 17.22.1 Macros Affecting All Debugging Formats
   34046 ----------------------------------------------
   34047 
   34048 These macros affect all debugging formats.
   34049 
   34050  -- Macro: DBX_REGISTER_NUMBER (REGNO)
   34051      A C expression that returns the DBX register number for the
   34052      compiler register number REGNO.  In the default macro provided,
   34053      the value of this expression will be REGNO itself.  But sometimes
   34054      there are some registers that the compiler knows about and DBX
   34055      does not, or vice versa.  In such cases, some register may need to
   34056      have one number in the compiler and another for DBX.
   34057 
   34058      If two registers have consecutive numbers inside GCC, and they can
   34059      be used as a pair to hold a multiword value, then they _must_ have
   34060      consecutive numbers after renumbering with `DBX_REGISTER_NUMBER'.
   34061      Otherwise, debuggers will be unable to access such a pair, because
   34062      they expect register pairs to be consecutive in their own
   34063      numbering scheme.
   34064 
   34065      If you find yourself defining `DBX_REGISTER_NUMBER' in way that
   34066      does not preserve register pairs, then what you must do instead is
   34067      redefine the actual register numbering scheme.
   34068 
   34069  -- Macro: DEBUGGER_AUTO_OFFSET (X)
   34070      A C expression that returns the integer offset value for an
   34071      automatic variable having address X (an RTL expression).  The
   34072      default computation assumes that X is based on the frame-pointer
   34073      and gives the offset from the frame-pointer.  This is required for
   34074      targets that produce debugging output for DBX or COFF-style
   34075      debugging output for SDB and allow the frame-pointer to be
   34076      eliminated when the `-g' options is used.
   34077 
   34078  -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X)
   34079      A C expression that returns the integer offset value for an
   34080      argument having address X (an RTL expression).  The nominal offset
   34081      is OFFSET.
   34082 
   34083  -- Macro: PREFERRED_DEBUGGING_TYPE
   34084      A C expression that returns the type of debugging output GCC should
   34085      produce when the user specifies just `-g'.  Define this if you
   34086      have arranged for GCC to support more than one format of debugging
   34087      output.  Currently, the allowable values are `DBX_DEBUG',
   34088      `SDB_DEBUG', `DWARF_DEBUG', `DWARF2_DEBUG', `XCOFF_DEBUG',
   34089      `VMS_DEBUG', and `VMS_AND_DWARF2_DEBUG'.
   34090 
   34091      When the user specifies `-ggdb', GCC normally also uses the value
   34092      of this macro to select the debugging output format, but with two
   34093      exceptions.  If `DWARF2_DEBUGGING_INFO' is defined, GCC uses the
   34094      value `DWARF2_DEBUG'.  Otherwise, if `DBX_DEBUGGING_INFO' is
   34095      defined, GCC uses `DBX_DEBUG'.
   34096 
   34097      The value of this macro only affects the default debugging output;
   34098      the user can always get a specific type of output by using
   34099      `-gstabs', `-gcoff', `-gdwarf-2', `-gxcoff', or `-gvms'.
   34100 
   34101 
   34102 File: gccint.info,  Node: DBX Options,  Next: DBX Hooks,  Prev: All Debuggers,  Up: Debugging Info
   34103 
   34104 17.22.2 Specific Options for DBX Output
   34105 ---------------------------------------
   34106 
   34107 These are specific options for DBX output.
   34108 
   34109  -- Macro: DBX_DEBUGGING_INFO
   34110      Define this macro if GCC should produce debugging output for DBX
   34111      in response to the `-g' option.
   34112 
   34113  -- Macro: XCOFF_DEBUGGING_INFO
   34114      Define this macro if GCC should produce XCOFF format debugging
   34115      output in response to the `-g' option.  This is a variant of DBX
   34116      format.
   34117 
   34118  -- Macro: DEFAULT_GDB_EXTENSIONS
   34119      Define this macro to control whether GCC should by default generate
   34120      GDB's extended version of DBX debugging information (assuming
   34121      DBX-format debugging information is enabled at all).  If you don't
   34122      define the macro, the default is 1: always generate the extended
   34123      information if there is any occasion to.
   34124 
   34125  -- Macro: DEBUG_SYMS_TEXT
   34126      Define this macro if all `.stabs' commands should be output while
   34127      in the text section.
   34128 
   34129  -- Macro: ASM_STABS_OP
   34130      A C string constant, including spacing, naming the assembler
   34131      pseudo op to use instead of `"\t.stabs\t"' to define an ordinary
   34132      debugging symbol.  If you don't define this macro, `"\t.stabs\t"'
   34133      is used.  This macro applies only to DBX debugging information
   34134      format.
   34135 
   34136  -- Macro: ASM_STABD_OP
   34137      A C string constant, including spacing, naming the assembler
   34138      pseudo op to use instead of `"\t.stabd\t"' to define a debugging
   34139      symbol whose value is the current location.  If you don't define
   34140      this macro, `"\t.stabd\t"' is used.  This macro applies only to
   34141      DBX debugging information format.
   34142 
   34143  -- Macro: ASM_STABN_OP
   34144      A C string constant, including spacing, naming the assembler
   34145      pseudo op to use instead of `"\t.stabn\t"' to define a debugging
   34146      symbol with no name.  If you don't define this macro,
   34147      `"\t.stabn\t"' is used.  This macro applies only to DBX debugging
   34148      information format.
   34149 
   34150  -- Macro: DBX_NO_XREFS
   34151      Define this macro if DBX on your system does not support the
   34152      construct `xsTAGNAME'.  On some systems, this construct is used to
   34153      describe a forward reference to a structure named TAGNAME.  On
   34154      other systems, this construct is not supported at all.
   34155 
   34156  -- Macro: DBX_CONTIN_LENGTH
   34157      A symbol name in DBX-format debugging information is normally
   34158      continued (split into two separate `.stabs' directives) when it
   34159      exceeds a certain length (by default, 80 characters).  On some
   34160      operating systems, DBX requires this splitting; on others,
   34161      splitting must not be done.  You can inhibit splitting by defining
   34162      this macro with the value zero.  You can override the default
   34163      splitting-length by defining this macro as an expression for the
   34164      length you desire.
   34165 
   34166  -- Macro: DBX_CONTIN_CHAR
   34167      Normally continuation is indicated by adding a `\' character to
   34168      the end of a `.stabs' string when a continuation follows.  To use
   34169      a different character instead, define this macro as a character
   34170      constant for the character you want to use.  Do not define this
   34171      macro if backslash is correct for your system.
   34172 
   34173  -- Macro: DBX_STATIC_STAB_DATA_SECTION
   34174      Define this macro if it is necessary to go to the data section
   34175      before outputting the `.stabs' pseudo-op for a non-global static
   34176      variable.
   34177 
   34178  -- Macro: DBX_TYPE_DECL_STABS_CODE
   34179      The value to use in the "code" field of the `.stabs' directive for
   34180      a typedef.  The default is `N_LSYM'.
   34181 
   34182  -- Macro: DBX_STATIC_CONST_VAR_CODE
   34183      The value to use in the "code" field of the `.stabs' directive for
   34184      a static variable located in the text section.  DBX format does not
   34185      provide any "right" way to do this.  The default is `N_FUN'.
   34186 
   34187  -- Macro: DBX_REGPARM_STABS_CODE
   34188      The value to use in the "code" field of the `.stabs' directive for
   34189      a parameter passed in registers.  DBX format does not provide any
   34190      "right" way to do this.  The default is `N_RSYM'.
   34191 
   34192  -- Macro: DBX_REGPARM_STABS_LETTER
   34193      The letter to use in DBX symbol data to identify a symbol as a
   34194      parameter passed in registers.  DBX format does not customarily
   34195      provide any way to do this.  The default is `'P''.
   34196 
   34197  -- Macro: DBX_FUNCTION_FIRST
   34198      Define this macro if the DBX information for a function and its
   34199      arguments should precede the assembler code for the function.
   34200      Normally, in DBX format, the debugging information entirely
   34201      follows the assembler code.
   34202 
   34203  -- Macro: DBX_BLOCKS_FUNCTION_RELATIVE
   34204      Define this macro, with value 1, if the value of a symbol
   34205      describing the scope of a block (`N_LBRAC' or `N_RBRAC') should be
   34206      relative to the start of the enclosing function.  Normally, GCC
   34207      uses an absolute address.
   34208 
   34209  -- Macro: DBX_LINES_FUNCTION_RELATIVE
   34210      Define this macro, with value 1, if the value of a symbol
   34211      indicating the current line number (`N_SLINE') should be relative
   34212      to the start of the enclosing function.  Normally, GCC uses an
   34213      absolute address.
   34214 
   34215  -- Macro: DBX_USE_BINCL
   34216      Define this macro if GCC should generate `N_BINCL' and `N_EINCL'
   34217      stabs for included header files, as on Sun systems.  This macro
   34218      also directs GCC to output a type number as a pair of a file
   34219      number and a type number within the file.  Normally, GCC does not
   34220      generate `N_BINCL' or `N_EINCL' stabs, and it outputs a single
   34221      number for a type number.
   34222 
   34223 
   34224 File: gccint.info,  Node: DBX Hooks,  Next: File Names and DBX,  Prev: DBX Options,  Up: Debugging Info
   34225 
   34226 17.22.3 Open-Ended Hooks for DBX Format
   34227 ---------------------------------------
   34228 
   34229 These are hooks for DBX format.
   34230 
   34231  -- Macro: DBX_OUTPUT_LBRAC (STREAM, NAME)
   34232      Define this macro to say how to output to STREAM the debugging
   34233      information for the start of a scope level for variable names.  The
   34234      argument NAME is the name of an assembler symbol (for use with
   34235      `assemble_name') whose value is the address where the scope begins.
   34236 
   34237  -- Macro: DBX_OUTPUT_RBRAC (STREAM, NAME)
   34238      Like `DBX_OUTPUT_LBRAC', but for the end of a scope level.
   34239 
   34240  -- Macro: DBX_OUTPUT_NFUN (STREAM, LSCOPE_LABEL, DECL)
   34241      Define this macro if the target machine requires special handling
   34242      to output an `N_FUN' entry for the function DECL.
   34243 
   34244  -- Macro: DBX_OUTPUT_SOURCE_LINE (STREAM, LINE, COUNTER)
   34245      A C statement to output DBX debugging information before code for
   34246      line number LINE of the current source file to the stdio stream
   34247      STREAM.  COUNTER is the number of time the macro was invoked,
   34248      including the current invocation; it is intended to generate
   34249      unique labels in the assembly output.
   34250 
   34251      This macro should not be defined if the default output is correct,
   34252      or if it can be made correct by defining
   34253      `DBX_LINES_FUNCTION_RELATIVE'.
   34254 
   34255  -- Macro: NO_DBX_FUNCTION_END
   34256      Some stabs encapsulation formats (in particular ECOFF), cannot
   34257      handle the `.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx
   34258      extension construct.  On those machines, define this macro to turn
   34259      this feature off without disturbing the rest of the gdb extensions.
   34260 
   34261  -- Macro: NO_DBX_BNSYM_ENSYM
   34262      Some assemblers cannot handle the `.stabd BNSYM/ENSYM,0,0' gdb dbx
   34263      extension construct.  On those machines, define this macro to turn
   34264      this feature off without disturbing the rest of the gdb extensions.
   34265 
   34266 
   34267 File: gccint.info,  Node: File Names and DBX,  Next: SDB and DWARF,  Prev: DBX Hooks,  Up: Debugging Info
   34268 
   34269 17.22.4 File Names in DBX Format
   34270 --------------------------------
   34271 
   34272 This describes file names in DBX format.
   34273 
   34274  -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME)
   34275      A C statement to output DBX debugging information to the stdio
   34276      stream STREAM, which indicates that file NAME is the main source
   34277      file--the file specified as the input file for compilation.  This
   34278      macro is called only once, at the beginning of compilation.
   34279 
   34280      This macro need not be defined if the standard form of output for
   34281      DBX debugging information is appropriate.
   34282 
   34283      It may be necessary to refer to a label equal to the beginning of
   34284      the text section.  You can use `assemble_name (stream,
   34285      ltext_label_name)' to do so.  If you do this, you must also set
   34286      the variable USED_LTEXT_LABEL_NAME to `true'.
   34287 
   34288  -- Macro: NO_DBX_MAIN_SOURCE_DIRECTORY
   34289      Define this macro, with value 1, if GCC should not emit an
   34290      indication of the current directory for compilation and current
   34291      source language at the beginning of the file.
   34292 
   34293  -- Macro: NO_DBX_GCC_MARKER
   34294      Define this macro, with value 1, if GCC should not emit an
   34295      indication that this object file was compiled by GCC.  The default
   34296      is to emit an `N_OPT' stab at the beginning of every source file,
   34297      with `gcc2_compiled.' for the string and value 0.
   34298 
   34299  -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME)
   34300      A C statement to output DBX debugging information at the end of
   34301      compilation of the main source file NAME.  Output should be
   34302      written to the stdio stream STREAM.
   34303 
   34304      If you don't define this macro, nothing special is output at the
   34305      end of compilation, which is correct for most machines.
   34306 
   34307  -- Macro: DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END
   34308      Define this macro _instead of_ defining
   34309      `DBX_OUTPUT_MAIN_SOURCE_FILE_END', if what needs to be output at
   34310      the end of compilation is an `N_SO' stab with an empty string,
   34311      whose value is the highest absolute text address in the file.
   34312 
   34313 
   34314 File: gccint.info,  Node: SDB and DWARF,  Next: VMS Debug,  Prev: File Names and DBX,  Up: Debugging Info
   34315 
   34316 17.22.5 Macros for SDB and DWARF Output
   34317 ---------------------------------------
   34318 
   34319 Here are macros for SDB and DWARF output.
   34320 
   34321  -- Macro: SDB_DEBUGGING_INFO
   34322      Define this macro if GCC should produce COFF-style debugging output
   34323      for SDB in response to the `-g' option.
   34324 
   34325  -- Macro: DWARF2_DEBUGGING_INFO
   34326      Define this macro if GCC should produce dwarf version 2 format
   34327      debugging output in response to the `-g' option.
   34328 
   34329       -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (const_tree
   34330                FUNCTION)
   34331           Define this to enable the dwarf attribute
   34332           `DW_AT_calling_convention' to be emitted for each function.
   34333           Instead of an integer return the enum value for the `DW_CC_'
   34334           tag.
   34335 
   34336      To support optional call frame debugging information, you must also
   34337      define `INCOMING_RETURN_ADDR_RTX' and either set
   34338      `RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the
   34339      prologue, or call `dwarf2out_def_cfa' and `dwarf2out_reg_save' as
   34340      appropriate from `TARGET_ASM_FUNCTION_PROLOGUE' if you don't.
   34341 
   34342  -- Macro: DWARF2_FRAME_INFO
   34343      Define this macro to a nonzero value if GCC should always output
   34344      Dwarf 2 frame information.  If `TARGET_EXCEPT_UNWIND_INFO' (*note
   34345      Exception Region Output::) returns `UI_DWARF2', and exceptions are
   34346      enabled, GCC will output this information not matter how you
   34347      define `DWARF2_FRAME_INFO'.
   34348 
   34349  -- Target Hook: enum unwind_info_type TARGET_DEBUG_UNWIND_INFO (void)
   34350      This hook defines the mechanism that will be used for describing
   34351      frame unwind information to the debugger.  Normally the hook will
   34352      return `UI_DWARF2' if DWARF 2 debug information is enabled, and
   34353      return `UI_NONE' otherwise.
   34354 
   34355      A target may return `UI_DWARF2' even when DWARF 2 debug information
   34356      is disabled in order to always output DWARF 2 frame information.
   34357 
   34358      A target may return `UI_TARGET' if it has ABI specified unwind
   34359      tables.  This will suppress generation of the normal debug frame
   34360      unwind information.
   34361 
   34362  -- Macro: DWARF2_ASM_LINE_DEBUG_INFO
   34363      Define this macro to be a nonzero value if the assembler can
   34364      generate Dwarf 2 line debug info sections.  This will result in
   34365      much more compact line number tables, and hence is desirable if it
   34366      works.
   34367 
   34368  -- Target Hook: bool TARGET_WANT_DEBUG_PUB_SECTIONS
   34369      True if the `.debug_pubtypes' and `.debug_pubnames' sections
   34370      should be emitted.  These sections are not used on most platforms,
   34371      and in particular GDB does not use them.
   34372 
   34373  -- Target Hook: bool TARGET_DELAY_SCHED2
   34374      True if sched2 is not to be run at its normal place.  This usually
   34375      means it will be run as part of machine-specific reorg.
   34376 
   34377  -- Target Hook: bool TARGET_DELAY_VARTRACK
   34378      True if vartrack is not to be run at its normal place.  This
   34379      usually means it will be run as part of machine-specific reorg.
   34380 
   34381  -- Macro: ASM_OUTPUT_DWARF_DELTA (STREAM, SIZE, LABEL1, LABEL2)
   34382      A C statement to issue assembly directives that create a difference
   34383      LAB1 minus LAB2, using an integer of the given SIZE.
   34384 
   34385  -- Macro: ASM_OUTPUT_DWARF_VMS_DELTA (STREAM, SIZE, LABEL1, LABEL2)
   34386      A C statement to issue assembly directives that create a difference
   34387      between the two given labels in system defined units, e.g.
   34388      instruction slots on IA64 VMS, using an integer of the given size.
   34389 
   34390  -- Macro: ASM_OUTPUT_DWARF_OFFSET (STREAM, SIZE, LABEL, SECTION)
   34391      A C statement to issue assembly directives that create a
   34392      section-relative reference to the given LABEL, using an integer of
   34393      the given SIZE.  The label is known to be defined in the given
   34394      SECTION.
   34395 
   34396  -- Macro: ASM_OUTPUT_DWARF_PCREL (STREAM, SIZE, LABEL)
   34397      A C statement to issue assembly directives that create a
   34398      self-relative reference to the given LABEL, using an integer of
   34399      the given SIZE.
   34400 
   34401  -- Macro: ASM_OUTPUT_DWARF_TABLE_REF (LABEL)
   34402      A C statement to issue assembly directives that create a reference
   34403      to the DWARF table identifier LABEL from the current section.  This
   34404      is used on some systems to avoid garbage collecting a DWARF table
   34405      which is referenced by a function.
   34406 
   34407  -- Target Hook: void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *FILE, int
   34408           SIZE, rtx X)
   34409      If defined, this target hook is a function which outputs a
   34410      DTP-relative reference to the given TLS symbol of the specified
   34411      size.
   34412 
   34413  -- Macro: PUT_SDB_...
   34414      Define these macros to override the assembler syntax for the
   34415      special SDB assembler directives.  See `sdbout.c' for a list of
   34416      these macros and their arguments.  If the standard syntax is used,
   34417      you need not define them yourself.
   34418 
   34419  -- Macro: SDB_DELIM
   34420      Some assemblers do not support a semicolon as a delimiter, even
   34421      between SDB assembler directives.  In that case, define this macro
   34422      to be the delimiter to use (usually `\n').  It is not necessary to
   34423      define a new set of `PUT_SDB_OP' macros if this is the only change
   34424      required.
   34425 
   34426  -- Macro: SDB_ALLOW_UNKNOWN_REFERENCES
   34427      Define this macro to allow references to unknown structure, union,
   34428      or enumeration tags to be emitted.  Standard COFF does not allow
   34429      handling of unknown references, MIPS ECOFF has support for it.
   34430 
   34431  -- Macro: SDB_ALLOW_FORWARD_REFERENCES
   34432      Define this macro to allow references to structure, union, or
   34433      enumeration tags that have not yet been seen to be handled.  Some
   34434      assemblers choke if forward tags are used, while some require it.
   34435 
   34436  -- Macro: SDB_OUTPUT_SOURCE_LINE (STREAM, LINE)
   34437      A C statement to output SDB debugging information before code for
   34438      line number LINE of the current source file to the stdio stream
   34439      STREAM.  The default is to emit an `.ln' directive.
   34440 
   34441 
   34442 File: gccint.info,  Node: VMS Debug,  Prev: SDB and DWARF,  Up: Debugging Info
   34443 
   34444 17.22.6 Macros for VMS Debug Format
   34445 -----------------------------------
   34446 
   34447 Here are macros for VMS debug format.
   34448 
   34449  -- Macro: VMS_DEBUGGING_INFO
   34450      Define this macro if GCC should produce debugging output for VMS
   34451      in response to the `-g' option.  The default behavior for VMS is
   34452      to generate minimal debug info for a traceback in the absence of
   34453      `-g' unless explicitly overridden with `-g0'.  This behavior is
   34454      controlled by `TARGET_OPTION_OPTIMIZATION' and
   34455      `TARGET_OPTION_OVERRIDE'.
   34456 
   34457 
   34458 File: gccint.info,  Node: Floating Point,  Next: Mode Switching,  Prev: Debugging Info,  Up: Target Macros
   34459 
   34460 17.23 Cross Compilation and Floating Point
   34461 ==========================================
   34462 
   34463 While all modern machines use twos-complement representation for
   34464 integers, there are a variety of representations for floating point
   34465 numbers.  This means that in a cross-compiler the representation of
   34466 floating point numbers in the compiled program may be different from
   34467 that used in the machine doing the compilation.
   34468 
   34469  Because different representation systems may offer different amounts of
   34470 range and precision, all floating point constants must be represented in
   34471 the target machine's format.  Therefore, the cross compiler cannot
   34472 safely use the host machine's floating point arithmetic; it must emulate
   34473 the target's arithmetic.  To ensure consistency, GCC always uses
   34474 emulation to work with floating point values, even when the host and
   34475 target floating point formats are identical.
   34476 
   34477  The following macros are provided by `real.h' for the compiler to use.
   34478 All parts of the compiler which generate or optimize floating-point
   34479 calculations must use these macros.  They may evaluate their operands
   34480 more than once, so operands must not have side effects.
   34481 
   34482  -- Macro: REAL_VALUE_TYPE
   34483      The C data type to be used to hold a floating point value in the
   34484      target machine's format.  Typically this is a `struct' containing
   34485      an array of `HOST_WIDE_INT', but all code should treat it as an
   34486      opaque quantity.
   34487 
   34488  -- Macro: int REAL_VALUES_EQUAL (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
   34489      Compares for equality the two values, X and Y.  If the target
   34490      floating point format supports negative zeroes and/or NaNs,
   34491      `REAL_VALUES_EQUAL (-0.0, 0.0)' is true, and `REAL_VALUES_EQUAL
   34492      (NaN, NaN)' is false.
   34493 
   34494  -- Macro: int REAL_VALUES_LESS (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
   34495      Tests whether X is less than Y.
   34496 
   34497  -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X)
   34498      Truncates X to a signed integer, rounding toward zero.
   34499 
   34500  -- Macro: unsigned HOST_WIDE_INT REAL_VALUE_UNSIGNED_FIX
   34501           (REAL_VALUE_TYPE X)
   34502      Truncates X to an unsigned integer, rounding toward zero.  If X is
   34503      negative, returns zero.
   34504 
   34505  -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING, enum
   34506           machine_mode MODE)
   34507      Converts STRING into a floating point number in the target
   34508      machine's representation for mode MODE.  This routine can handle
   34509      both decimal and hexadecimal floating point constants, using the
   34510      syntax defined by the C language for both.
   34511 
   34512  -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X)
   34513      Returns 1 if X is negative (including negative zero), 0 otherwise.
   34514 
   34515  -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X)
   34516      Determines whether X represents infinity (positive or negative).
   34517 
   34518  -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X)
   34519      Determines whether X represents a "NaN" (not-a-number).
   34520 
   34521  -- Macro: void REAL_ARITHMETIC (REAL_VALUE_TYPE OUTPUT, enum tree_code
   34522           CODE, REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
   34523      Calculates an arithmetic operation on the two floating point values
   34524      X and Y, storing the result in OUTPUT (which must be a variable).
   34525 
   34526      The operation to be performed is specified by CODE.  Only the
   34527      following codes are supported: `PLUS_EXPR', `MINUS_EXPR',
   34528      `MULT_EXPR', `RDIV_EXPR', `MAX_EXPR', `MIN_EXPR'.
   34529 
   34530      If `REAL_ARITHMETIC' is asked to evaluate division by zero and the
   34531      target's floating point format cannot represent infinity, it will
   34532      call `abort'.  Callers should check for this situation first, using
   34533      `MODE_HAS_INFINITIES'.  *Note Storage Layout::.
   34534 
   34535  -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X)
   34536      Returns the negative of the floating point value X.
   34537 
   34538  -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X)
   34539      Returns the absolute value of X.
   34540 
   34541  -- Macro: REAL_VALUE_TYPE REAL_VALUE_TRUNCATE (REAL_VALUE_TYPE MODE,
   34542           enum machine_mode X)
   34543      Truncates the floating point value X to fit in MODE.  The return
   34544      value is still a full-size `REAL_VALUE_TYPE', but it has an
   34545      appropriate bit pattern to be output as a floating constant whose
   34546      precision accords with mode MODE.
   34547 
   34548  -- Macro: void REAL_VALUE_TO_INT (HOST_WIDE_INT LOW, HOST_WIDE_INT
   34549           HIGH, REAL_VALUE_TYPE X)
   34550      Converts a floating point value X into a double-precision integer
   34551      which is then stored into LOW and HIGH.  If the value is not
   34552      integral, it is truncated.
   34553 
   34554  -- Macro: void REAL_VALUE_FROM_INT (REAL_VALUE_TYPE X, HOST_WIDE_INT
   34555           LOW, HOST_WIDE_INT HIGH, enum machine_mode MODE)
   34556      Converts a double-precision integer found in LOW and HIGH, into a
   34557      floating point value which is then stored into X.  The value is
   34558      truncated to fit in mode MODE.
   34559 
   34560 
   34561 File: gccint.info,  Node: Mode Switching,  Next: Target Attributes,  Prev: Floating Point,  Up: Target Macros
   34562 
   34563 17.24 Mode Switching Instructions
   34564 =================================
   34565 
   34566 The following macros control mode switching optimizations:
   34567 
   34568  -- Macro: OPTIMIZE_MODE_SWITCHING (ENTITY)
   34569      Define this macro if the port needs extra instructions inserted
   34570      for mode switching in an optimizing compilation.
   34571 
   34572      For an example, the SH4 can perform both single and double
   34573      precision floating point operations, but to perform a single
   34574      precision operation, the FPSCR PR bit has to be cleared, while for
   34575      a double precision operation, this bit has to be set.  Changing
   34576      the PR bit requires a general purpose register as a scratch
   34577      register, hence these FPSCR sets have to be inserted before
   34578      reload, i.e. you can't put this into instruction emitting or
   34579      `TARGET_MACHINE_DEPENDENT_REORG'.
   34580 
   34581      You can have multiple entities that are mode-switched, and select
   34582      at run time which entities actually need it.
   34583      `OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY
   34584      that needs mode-switching.  If you define this macro, you also
   34585      have to define `NUM_MODES_FOR_MODE_SWITCHING', `MODE_NEEDED',
   34586      `MODE_PRIORITY_TO_MODE' and `EMIT_MODE_SET'.  `MODE_AFTER',
   34587      `MODE_ENTRY', and `MODE_EXIT' are optional.
   34588 
   34589  -- Macro: NUM_MODES_FOR_MODE_SWITCHING
   34590      If you define `OPTIMIZE_MODE_SWITCHING', you have to define this as
   34591      initializer for an array of integers.  Each initializer element N
   34592      refers to an entity that needs mode switching, and specifies the
   34593      number of different modes that might need to be set for this
   34594      entity.  The position of the initializer in the
   34595      initializer--starting counting at zero--determines the integer
   34596      that is used to refer to the mode-switched entity in question.  In
   34597      macros that take mode arguments / yield a mode result, modes are
   34598      represented as numbers 0 ... N - 1.  N is used to specify that no
   34599      mode switch is needed / supplied.
   34600 
   34601  -- Macro: MODE_NEEDED (ENTITY, INSN)
   34602      ENTITY is an integer specifying a mode-switched entity.  If
   34603      `OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to
   34604      return an integer value not larger than the corresponding element
   34605      in `NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY
   34606      must be switched into prior to the execution of INSN.
   34607 
   34608  -- Macro: MODE_AFTER (MODE, INSN)
   34609      If this macro is defined, it is evaluated for every INSN during
   34610      mode switching.  It determines the mode that an insn results in (if
   34611      different from the incoming mode).
   34612 
   34613  -- Macro: MODE_ENTRY (ENTITY)
   34614      If this macro is defined, it is evaluated for every ENTITY that
   34615      needs mode switching.  It should evaluate to an integer, which is
   34616      a mode that ENTITY is assumed to be switched to at function entry.
   34617      If `MODE_ENTRY' is defined then `MODE_EXIT' must be defined.
   34618 
   34619  -- Macro: MODE_EXIT (ENTITY)
   34620      If this macro is defined, it is evaluated for every ENTITY that
   34621      needs mode switching.  It should evaluate to an integer, which is
   34622      a mode that ENTITY is assumed to be switched to at function exit.
   34623      If `MODE_EXIT' is defined then `MODE_ENTRY' must be defined.
   34624 
   34625  -- Macro: MODE_PRIORITY_TO_MODE (ENTITY, N)
   34626      This macro specifies the order in which modes for ENTITY are
   34627      processed.  0 is the highest priority,
   34628      `NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest.  The value
   34629      of the macro should be an integer designating a mode for ENTITY.
   34630      For any fixed ENTITY, `mode_priority_to_mode' (ENTITY, N) shall be
   34631      a bijection in 0 ...  `num_modes_for_mode_switching[ENTITY] - 1'.
   34632 
   34633  -- Macro: EMIT_MODE_SET (ENTITY, MODE, HARD_REGS_LIVE)
   34634      Generate one or more insns to set ENTITY to MODE.  HARD_REG_LIVE
   34635      is the set of hard registers live at the point where the insn(s)
   34636      are to be inserted.
   34637 
   34638 
   34639 File: gccint.info,  Node: Target Attributes,  Next: Emulated TLS,  Prev: Mode Switching,  Up: Target Macros
   34640 
   34641 17.25 Defining target-specific uses of `__attribute__'
   34642 ======================================================
   34643 
   34644 Target-specific attributes may be defined for functions, data and types.
   34645 These are described using the following target hooks; they also need to
   34646 be documented in `extend.texi'.
   34647 
   34648  -- Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE
   34649      If defined, this target hook points to an array of `struct
   34650      attribute_spec' (defined in `tree.h') specifying the machine
   34651      specific attributes for this target and some of the restrictions
   34652      on the entities to which these attributes are applied and the
   34653      arguments they take.
   34654 
   34655  -- Target Hook: bool TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P (const_tree
   34656           NAME)
   34657      If defined, this target hook is a function which returns true if
   34658      the machine-specific attribute named NAME expects an identifier
   34659      given as its first argument to be passed on as a plain identifier,
   34660      not subjected to name lookup.  If this is not defined, the default
   34661      is false for all machine-specific attributes.
   34662 
   34663  -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (const_tree TYPE1,
   34664           const_tree TYPE2)
   34665      If defined, this target hook is a function which returns zero if
   34666      the attributes on TYPE1 and TYPE2 are incompatible, one if they
   34667      are compatible, and two if they are nearly compatible (which
   34668      causes a warning to be generated).  If this is not defined,
   34669      machine-specific attributes are supposed always to be compatible.
   34670 
   34671  -- Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE)
   34672      If defined, this target hook is a function which assigns default
   34673      attributes to the newly defined TYPE.
   34674 
   34675  -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree
   34676           TYPE2)
   34677      Define this target hook if the merging of type attributes needs
   34678      special handling.  If defined, the result is a list of the combined
   34679      `TYPE_ATTRIBUTES' of TYPE1 and TYPE2.  It is assumed that
   34680      `comptypes' has already been called and returned 1.  This function
   34681      may call `merge_attributes' to handle machine-independent merging.
   34682 
   34683  -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree
   34684           NEWDECL)
   34685      Define this target hook if the merging of decl attributes needs
   34686      special handling.  If defined, the result is a list of the combined
   34687      `DECL_ATTRIBUTES' of OLDDECL and NEWDECL.  NEWDECL is a duplicate
   34688      declaration of OLDDECL.  Examples of when this is needed are when
   34689      one attribute overrides another, or when an attribute is nullified
   34690      by a subsequent definition.  This function may call
   34691      `merge_attributes' to handle machine-independent merging.
   34692 
   34693      If the only target-specific handling you require is `dllimport'
   34694      for Microsoft Windows targets, you should define the macro
   34695      `TARGET_DLLIMPORT_DECL_ATTRIBUTES' to `1'.  The compiler will then
   34696      define a function called `merge_dllimport_decl_attributes' which
   34697      can then be defined as the expansion of
   34698      `TARGET_MERGE_DECL_ATTRIBUTES'.  You can also add
   34699      `handle_dll_attribute' in the attribute table for your port to
   34700      perform initial processing of the `dllimport' and `dllexport'
   34701      attributes.  This is done in `i386/cygwin.h' and `i386/i386.c',
   34702      for example.
   34703 
   34704  -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (const_tree
   34705           DECL)
   34706      DECL is a variable or function with `__attribute__((dllimport))'
   34707      specified.  Use this hook if the target needs to add extra
   34708      validation checks to `handle_dll_attribute'.
   34709 
   34710  -- Macro: TARGET_DECLSPEC
   34711      Define this macro to a nonzero value if you want to treat
   34712      `__declspec(X)' as equivalent to `__attribute((X))'.  By default,
   34713      this behavior is enabled only for targets that define
   34714      `TARGET_DLLIMPORT_DECL_ATTRIBUTES'.  The current implementation of
   34715      `__declspec' is via a built-in macro, but you should not rely on
   34716      this implementation detail.
   34717 
   34718  -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree
   34719           *ATTR_PTR)
   34720      Define this target hook if you want to be able to add attributes
   34721      to a decl when it is being created.  This is normally useful for
   34722      back ends which wish to implement a pragma by using the attributes
   34723      which correspond to the pragma's effect.  The NODE argument is the
   34724      decl which is being created.  The ATTR_PTR argument is a pointer
   34725      to the attribute list for this decl.  The list itself should not
   34726      be modified, since it may be shared with other decls, but
   34727      attributes may be chained on the head of the list and `*ATTR_PTR'
   34728      modified to point to the new attributes, or a copy of the list may
   34729      be made if further changes are needed.
   34730 
   34731  -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (const_tree
   34732           FNDECL)
   34733      This target hook returns `true' if it is ok to inline FNDECL into
   34734      the current function, despite its having target-specific
   34735      attributes, `false' otherwise.  By default, if a function has a
   34736      target specific attribute attached to it, it will not be inlined.
   34737 
   34738  -- Target Hook: bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree FNDECL,
   34739           tree NAME, tree ARGS, int FLAGS)
   34740      This hook is called to parse the `attribute(option("..."))', and
   34741      it allows the function to set different target machine compile time
   34742      options for the current function that might be different than the
   34743      options specified on the command line.  The hook should return
   34744      `true' if the options are valid.
   34745 
   34746      The hook should set the DECL_FUNCTION_SPECIFIC_TARGET field in the
   34747      function declaration to hold a pointer to a target specific STRUCT
   34748      CL_TARGET_OPTION structure.
   34749 
   34750  -- Target Hook: void TARGET_OPTION_SAVE (struct cl_target_option *PTR)
   34751      This hook is called to save any additional target specific
   34752      information in the STRUCT CL_TARGET_OPTION structure for function
   34753      specific options.  *Note Option file format::.
   34754 
   34755  -- Target Hook: void TARGET_OPTION_RESTORE (struct cl_target_option
   34756           *PTR)
   34757      This hook is called to restore any additional target specific
   34758      information in the STRUCT CL_TARGET_OPTION structure for function
   34759      specific options.
   34760 
   34761  -- Target Hook: void TARGET_OPTION_PRINT (FILE *FILE, int INDENT,
   34762           struct cl_target_option *PTR)
   34763      This hook is called to print any additional target specific
   34764      information in the STRUCT CL_TARGET_OPTION structure for function
   34765      specific options.
   34766 
   34767  -- Target Hook: bool TARGET_OPTION_PRAGMA_PARSE (tree ARGS, tree
   34768           POP_TARGET)
   34769      This target hook parses the options for `#pragma GCC option' to
   34770      set the machine specific options for functions that occur later in
   34771      the input stream.  The options should be the same as handled by the
   34772      `TARGET_OPTION_VALID_ATTRIBUTE_P' hook.
   34773 
   34774  -- Target Hook: void TARGET_OPTION_OVERRIDE (void)
   34775      Sometimes certain combinations of command options do not make
   34776      sense on a particular target machine.  You can override the hook
   34777      `TARGET_OPTION_OVERRIDE' to take account of this.  This hooks is
   34778      called once just after all the command options have been parsed.
   34779 
   34780      Don't use this hook to turn on various extra optimizations for
   34781      `-O'.  That is what `TARGET_OPTION_OPTIMIZATION' is for.
   34782 
   34783      If you need to do something whenever the optimization level is
   34784      changed via the optimize attribute or pragma, see
   34785      `TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'
   34786 
   34787  -- Target Hook: bool TARGET_CAN_INLINE_P (tree CALLER, tree CALLEE)
   34788      This target hook returns `false' if the CALLER function cannot
   34789      inline CALLEE, based on target specific information.  By default,
   34790      inlining is not allowed if the callee function has function
   34791      specific target options and the caller does not use the same
   34792      options.
   34793 
   34794 
   34795 File: gccint.info,  Node: Emulated TLS,  Next: MIPS Coprocessors,  Prev: Target Attributes,  Up: Target Macros
   34796 
   34797 17.26 Emulating TLS
   34798 ===================
   34799 
   34800 For targets whose psABI does not provide Thread Local Storage via
   34801 specific relocations and instruction sequences, an emulation layer is
   34802 used.  A set of target hooks allows this emulation layer to be
   34803 configured for the requirements of a particular target.  For instance
   34804 the psABI may in fact specify TLS support in terms of an emulation
   34805 layer.
   34806 
   34807  The emulation layer works by creating a control object for every TLS
   34808 object.  To access the TLS object, a lookup function is provided which,
   34809 when given the address of the control object, will return the address
   34810 of the current thread's instance of the TLS object.
   34811 
   34812  -- Target Hook: const char * TARGET_EMUTLS_GET_ADDRESS
   34813      Contains the name of the helper function that uses a TLS control
   34814      object to locate a TLS instance.  The default causes libgcc's
   34815      emulated TLS helper function to be used.
   34816 
   34817  -- Target Hook: const char * TARGET_EMUTLS_REGISTER_COMMON
   34818      Contains the name of the helper function that should be used at
   34819      program startup to register TLS objects that are implicitly
   34820      initialized to zero.  If this is `NULL', all TLS objects will have
   34821      explicit initializers.  The default causes libgcc's emulated TLS
   34822      registration function to be used.
   34823 
   34824  -- Target Hook: const char * TARGET_EMUTLS_VAR_SECTION
   34825      Contains the name of the section in which TLS control variables
   34826      should be placed.  The default of `NULL' allows these to be placed
   34827      in any section.
   34828 
   34829  -- Target Hook: const char * TARGET_EMUTLS_TMPL_SECTION
   34830      Contains the name of the section in which TLS initializers should
   34831      be placed.  The default of `NULL' allows these to be placed in any
   34832      section.
   34833 
   34834  -- Target Hook: const char * TARGET_EMUTLS_VAR_PREFIX
   34835      Contains the prefix to be prepended to TLS control variable names.
   34836      The default of `NULL' uses a target-specific prefix.
   34837 
   34838  -- Target Hook: const char * TARGET_EMUTLS_TMPL_PREFIX
   34839      Contains the prefix to be prepended to TLS initializer objects.
   34840      The default of `NULL' uses a target-specific prefix.
   34841 
   34842  -- Target Hook: tree TARGET_EMUTLS_VAR_FIELDS (tree TYPE, tree *NAME)
   34843      Specifies a function that generates the FIELD_DECLs for a TLS
   34844      control object type.  TYPE is the RECORD_TYPE the fields are for
   34845      and NAME should be filled with the structure tag, if the default of
   34846      `__emutls_object' is unsuitable.  The default creates a type
   34847      suitable for libgcc's emulated TLS function.
   34848 
   34849  -- Target Hook: tree TARGET_EMUTLS_VAR_INIT (tree VAR, tree DECL, tree
   34850           TMPL_ADDR)
   34851      Specifies a function that generates the CONSTRUCTOR to initialize a
   34852      TLS control object.  VAR is the TLS control object, DECL is the
   34853      TLS object and TMPL_ADDR is the address of the initializer.  The
   34854      default initializes libgcc's emulated TLS control object.
   34855 
   34856  -- Target Hook: bool TARGET_EMUTLS_VAR_ALIGN_FIXED
   34857      Specifies whether the alignment of TLS control variable objects is
   34858      fixed and should not be increased as some backends may do to
   34859      optimize single objects.  The default is false.
   34860 
   34861  -- Target Hook: bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS
   34862      Specifies whether a DWARF `DW_OP_form_tls_address' location
   34863      descriptor may be used to describe emulated TLS control objects.
   34864 
   34865 
   34866 File: gccint.info,  Node: MIPS Coprocessors,  Next: PCH Target,  Prev: Emulated TLS,  Up: Target Macros
   34867 
   34868 17.27 Defining coprocessor specifics for MIPS targets.
   34869 ======================================================
   34870 
   34871 The MIPS specification allows MIPS implementations to have as many as 4
   34872 coprocessors, each with as many as 32 private registers.  GCC supports
   34873 accessing these registers and transferring values between the registers
   34874 and memory using asm-ized variables.  For example:
   34875 
   34876        register unsigned int cp0count asm ("c0r1");
   34877        unsigned int d;
   34878 
   34879        d = cp0count + 3;
   34880 
   34881  ("c0r1" is the default name of register 1 in coprocessor 0; alternate
   34882 names may be added as described below, or the default names may be
   34883 overridden entirely in `SUBTARGET_CONDITIONAL_REGISTER_USAGE'.)
   34884 
   34885  Coprocessor registers are assumed to be epilogue-used; sets to them
   34886 will be preserved even if it does not appear that the register is used
   34887 again later in the function.
   34888 
   34889  Another note: according to the MIPS spec, coprocessor 1 (if present) is
   34890 the FPU.  One accesses COP1 registers through standard mips
   34891 floating-point support; they are not included in this mechanism.
   34892 
   34893  There is one macro used in defining the MIPS coprocessor interface
   34894 which you may want to override in subtargets; it is described below.
   34895 
   34896  -- Macro: ALL_COP_ADDITIONAL_REGISTER_NAMES
   34897      A comma-separated list (with leading comma) of pairs describing the
   34898      alternate names of coprocessor registers.  The format of each
   34899      entry should be
   34900           { ALTERNATENAME, REGISTER_NUMBER}
   34901      Default: empty.
   34902 
   34903 
   34904 File: gccint.info,  Node: PCH Target,  Next: C++ ABI,  Prev: MIPS Coprocessors,  Up: Target Macros
   34905 
   34906 17.28 Parameters for Precompiled Header Validity Checking
   34907 =========================================================
   34908 
   34909  -- Target Hook: void * TARGET_GET_PCH_VALIDITY (size_t *SZ)
   34910      This hook returns a pointer to the data needed by
   34911      `TARGET_PCH_VALID_P' and sets `*SZ' to the size of the data in
   34912      bytes.
   34913 
   34914  -- Target Hook: const char * TARGET_PCH_VALID_P (const void *DATA,
   34915           size_t SZ)
   34916      This hook checks whether the options used to create a PCH file are
   34917      compatible with the current settings.  It returns `NULL' if so and
   34918      a suitable error message if not.  Error messages will be presented
   34919      to the user and must be localized using `_(MSG)'.
   34920 
   34921      DATA is the data that was returned by `TARGET_GET_PCH_VALIDITY'
   34922      when the PCH file was created and SZ is the size of that data in
   34923      bytes.  It's safe to assume that the data was created by the same
   34924      version of the compiler, so no format checking is needed.
   34925 
   34926      The default definition of `default_pch_valid_p' should be suitable
   34927      for most targets.
   34928 
   34929  -- Target Hook: const char * TARGET_CHECK_PCH_TARGET_FLAGS (int
   34930           PCH_FLAGS)
   34931      If this hook is nonnull, the default implementation of
   34932      `TARGET_PCH_VALID_P' will use it to check for compatible values of
   34933      `target_flags'.  PCH_FLAGS specifies the value that `target_flags'
   34934      had when the PCH file was created.  The return value is the same
   34935      as for `TARGET_PCH_VALID_P'.
   34936 
   34937 
   34938 File: gccint.info,  Node: C++ ABI,  Next: Named Address Spaces,  Prev: PCH Target,  Up: Target Macros
   34939 
   34940 17.29 C++ ABI parameters
   34941 ========================
   34942 
   34943  -- Target Hook: tree TARGET_CXX_GUARD_TYPE (void)
   34944      Define this hook to override the integer type used for guard
   34945      variables.  These are used to implement one-time construction of
   34946      static objects.  The default is long_long_integer_type_node.
   34947 
   34948  -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void)
   34949      This hook determines how guard variables are used.  It should
   34950      return `false' (the default) if the first byte should be used.  A
   34951      return value of `true' indicates that only the least significant
   34952      bit should be used.
   34953 
   34954  -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE)
   34955      This hook returns the size of the cookie to use when allocating an
   34956      array whose elements have the indicated TYPE.  Assumes that it is
   34957      already known that a cookie is needed.  The default is `max(sizeof
   34958      (size_t), alignof(type))', as defined in section 2.7 of the
   34959      IA64/Generic C++ ABI.
   34960 
   34961  -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void)
   34962      This hook should return `true' if the element size should be
   34963      stored in array cookies.  The default is to return `false'.
   34964 
   34965  -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int
   34966           IMPORT_EXPORT)
   34967      If defined by a backend this hook allows the decision made to
   34968      export class TYPE to be overruled.  Upon entry IMPORT_EXPORT will
   34969      contain 1 if the class is going to be exported, -1 if it is going
   34970      to be imported and 0 otherwise.  This function should return the
   34971      modified value and perform any other actions necessary to support
   34972      the backend's targeted operating system.
   34973 
   34974  -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void)
   34975      This hook should return `true' if constructors and destructors
   34976      return the address of the object created/destroyed.  The default
   34977      is to return `false'.
   34978 
   34979  -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void)
   34980      This hook returns true if the key method for a class (i.e., the
   34981      method which, if defined in the current translation unit, causes
   34982      the virtual table to be emitted) may be an inline function.  Under
   34983      the standard Itanium C++ ABI the key method may be an inline
   34984      function so long as the function is not declared inline in the
   34985      class definition.  Under some variants of the ABI, an inline
   34986      function can never be the key method.  The default is to return
   34987      `true'.
   34988 
   34989  -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree
   34990           DECL)
   34991      DECL is a virtual table, virtual table table, typeinfo object, or
   34992      other similar implicit class data object that will be emitted with
   34993      external linkage in this translation unit.  No ELF visibility has
   34994      been explicitly specified.  If the target needs to specify a
   34995      visibility other than that of the containing class, use this hook
   34996      to set `DECL_VISIBILITY' and `DECL_VISIBILITY_SPECIFIED'.
   34997 
   34998  -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void)
   34999      This hook returns true (the default) if virtual tables and other
   35000      similar implicit class data objects are always COMDAT if they have
   35001      external linkage.  If this hook returns false, then class data for
   35002      classes whose virtual table will be emitted in only one translation
   35003      unit will not be COMDAT.
   35004 
   35005  -- Target Hook: bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void)
   35006      This hook returns true (the default) if the RTTI information for
   35007      the basic types which is defined in the C++ runtime should always
   35008      be COMDAT, false if it should not be COMDAT.
   35009 
   35010  -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void)
   35011      This hook returns true if `__aeabi_atexit' (as defined by the ARM
   35012      EABI) should be used to register static destructors when
   35013      `-fuse-cxa-atexit' is in effect.  The default is to return false
   35014      to use `__cxa_atexit'.
   35015 
   35016  -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void)
   35017      This hook returns true if the target `atexit' function can be used
   35018      in the same manner as `__cxa_atexit' to register C++ static
   35019      destructors. This requires that `atexit'-registered functions in
   35020      shared libraries are run in the correct order when the libraries
   35021      are unloaded. The default is to return false.
   35022 
   35023  -- Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree TYPE)
   35024      TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has
   35025      just been defined.  Use this hook to make adjustments to the class
   35026      (eg, tweak visibility or perform any other required target
   35027      modifications).
   35028 
   35029 
   35030 File: gccint.info,  Node: Named Address Spaces,  Next: Misc,  Prev: C++ ABI,  Up: Target Macros
   35031 
   35032 17.30 Adding support for named address spaces
   35033 =============================================
   35034 
   35035 The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275 standards
   35036 committee, `Programming Languages - C - Extensions to support embedded
   35037 processors', specifies a syntax for embedded processors to specify
   35038 alternate address spaces.  You can configure a GCC port to support
   35039 section 5.1 of the draft report to add support for address spaces other
   35040 than the default address space.  These address spaces are new keywords
   35041 that are similar to the `volatile' and `const' type attributes.
   35042 
   35043  Pointers to named address spaces can have a different size than
   35044 pointers to the generic address space.
   35045 
   35046  For example, the SPU port uses the `__ea' address space to refer to
   35047 memory in the host processor, rather than memory local to the SPU
   35048 processor.  Access to memory in the `__ea' address space involves
   35049 issuing DMA operations to move data between the host processor and the
   35050 local processor memory address space.  Pointers in the `__ea' address
   35051 space are either 32 bits or 64 bits based on the `-mea32' or `-mea64'
   35052 switches (native SPU pointers are always 32 bits).
   35053 
   35054  Internally, address spaces are represented as a small integer in the
   35055 range 0 to 15 with address space 0 being reserved for the generic
   35056 address space.
   35057 
   35058  To register a named address space qualifier keyword with the C front
   35059 end, the target may call the `c_register_addr_space' routine.  For
   35060 example, the SPU port uses the following to declare `__ea' as the
   35061 keyword for named address space #1:
   35062      #define ADDR_SPACE_EA 1
   35063      c_register_addr_space ("__ea", ADDR_SPACE_EA);
   35064 
   35065  -- Target Hook: enum machine_mode TARGET_ADDR_SPACE_POINTER_MODE
   35066           (addr_space_t ADDRESS_SPACE)
   35067      Define this to return the machine mode to use for pointers to
   35068      ADDRESS_SPACE if the target supports named address spaces.  The
   35069      default version of this hook returns `ptr_mode' for the generic
   35070      address space only.
   35071 
   35072  -- Target Hook: enum machine_mode TARGET_ADDR_SPACE_ADDRESS_MODE
   35073           (addr_space_t ADDRESS_SPACE)
   35074      Define this to return the machine mode to use for addresses in
   35075      ADDRESS_SPACE if the target supports named address spaces.  The
   35076      default version of this hook returns `Pmode' for the generic
   35077      address space only.
   35078 
   35079  -- Target Hook: bool TARGET_ADDR_SPACE_VALID_POINTER_MODE (enum
   35080           machine_mode MODE, addr_space_t AS)
   35081      Define this to return nonzero if the port can handle pointers with
   35082      machine mode MODE to address space AS.  This target hook is the
   35083      same as the `TARGET_VALID_POINTER_MODE' target hook, except that
   35084      it includes explicit named address space support.  The default
   35085      version of this hook returns true for the modes returned by either
   35086      the `TARGET_ADDR_SPACE_POINTER_MODE' or
   35087      `TARGET_ADDR_SPACE_ADDRESS_MODE' target hooks for the given
   35088      address space.
   35089 
   35090  -- Target Hook: bool TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P (enum
   35091           machine_mode MODE, rtx EXP, bool STRICT, addr_space_t AS)
   35092      Define this to return true if EXP is a valid address for mode MODE
   35093      in the named address space AS.  The STRICT parameter says whether
   35094      strict addressing is in effect after reload has finished.  This
   35095      target hook is the same as the `TARGET_LEGITIMATE_ADDRESS_P'
   35096      target hook, except that it includes explicit named address space
   35097      support.
   35098 
   35099  -- Target Hook: rtx TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS (rtx X, rtx
   35100           OLDX, enum machine_mode MODE, addr_space_t AS)
   35101      Define this to modify an invalid address X to be a valid address
   35102      with mode MODE in the named address space AS.  This target hook is
   35103      the same as the `TARGET_LEGITIMIZE_ADDRESS' target hook, except
   35104      that it includes explicit named address space support.
   35105 
   35106  -- Target Hook: bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t
   35107           SUPERSET, addr_space_t SUBSET)
   35108      Define this to return whether the SUBSET named address space is
   35109      contained within the SUPERSET named address space.  Pointers to a
   35110      named address space that is a subset of another named address space
   35111      will be converted automatically without a cast if used together in
   35112      arithmetic operations.  Pointers to a superset address space can be
   35113      converted to pointers to a subset address space via explicit casts.
   35114 
   35115  -- Target Hook: rtx TARGET_ADDR_SPACE_CONVERT (rtx OP, tree FROM_TYPE,
   35116           tree TO_TYPE)
   35117      Define this to convert the pointer expression represented by the
   35118      RTL OP with type FROM_TYPE that points to a named address space to
   35119      a new pointer expression with type TO_TYPE that points to a
   35120      different named address space.  When this hook it called, it is
   35121      guaranteed that one of the two address spaces is a subset of the
   35122      other, as determined by the `TARGET_ADDR_SPACE_SUBSET_P' target
   35123      hook.
   35124 
   35125 
   35126 File: gccint.info,  Node: Misc,  Prev: Named Address Spaces,  Up: Target Macros
   35127 
   35128 17.31 Miscellaneous Parameters
   35129 ==============================
   35130 
   35131 Here are several miscellaneous parameters.
   35132 
   35133  -- Macro: HAS_LONG_COND_BRANCH
   35134      Define this boolean macro to indicate whether or not your
   35135      architecture has conditional branches that can span all of memory.
   35136      It is used in conjunction with an optimization that partitions hot
   35137      and cold basic blocks into separate sections of the executable.
   35138      If this macro is set to false, gcc will convert any conditional
   35139      branches that attempt to cross between sections into unconditional
   35140      branches or indirect jumps.
   35141 
   35142  -- Macro: HAS_LONG_UNCOND_BRANCH
   35143      Define this boolean macro to indicate whether or not your
   35144      architecture has unconditional branches that can span all of
   35145      memory.  It is used in conjunction with an optimization that
   35146      partitions hot and cold basic blocks into separate sections of the
   35147      executable.  If this macro is set to false, gcc will convert any
   35148      unconditional branches that attempt to cross between sections into
   35149      indirect jumps.
   35150 
   35151  -- Macro: CASE_VECTOR_MODE
   35152      An alias for a machine mode name.  This is the machine mode that
   35153      elements of a jump-table should have.
   35154 
   35155  -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY)
   35156      Optional: return the preferred mode for an `addr_diff_vec' when
   35157      the minimum and maximum offset are known.  If you define this, it
   35158      enables extra code in branch shortening to deal with
   35159      `addr_diff_vec'.  To make this work, you also have to define
   35160      `INSN_ALIGN' and make the alignment for `addr_diff_vec' explicit.
   35161      The BODY argument is provided so that the offset_unsigned and scale
   35162      flags can be updated.
   35163 
   35164  -- Macro: CASE_VECTOR_PC_RELATIVE
   35165      Define this macro to be a C expression to indicate when jump-tables
   35166      should contain relative addresses.  You need not define this macro
   35167      if jump-tables never contain relative addresses, or jump-tables
   35168      should contain relative addresses only when `-fPIC' or `-fPIC' is
   35169      in effect.
   35170 
   35171  -- Target Hook: unsigned int TARGET_CASE_VALUES_THRESHOLD (void)
   35172      This function return the smallest number of different values for
   35173      which it is best to use a jump-table instead of a tree of
   35174      conditional branches.  The default is four for machines with a
   35175      `casesi' instruction and five otherwise.  This is best for most
   35176      machines.
   35177 
   35178  -- Macro: CASE_USE_BIT_TESTS
   35179      Define this macro to be a C expression to indicate whether C switch
   35180      statements may be implemented by a sequence of bit tests.  This is
   35181      advantageous on processors that can efficiently implement left
   35182      shift of 1 by the number of bits held in a register, but
   35183      inappropriate on targets that would require a loop.  By default,
   35184      this macro returns `true' if the target defines an `ashlsi3'
   35185      pattern, and `false' otherwise.
   35186 
   35187  -- Macro: WORD_REGISTER_OPERATIONS
   35188      Define this macro if operations between registers with integral
   35189      mode smaller than a word are always performed on the entire
   35190      register.  Most RISC machines have this property and most CISC
   35191      machines do not.
   35192 
   35193  -- Macro: LOAD_EXTEND_OP (MEM_MODE)
   35194      Define this macro to be a C expression indicating when insns that
   35195      read memory in MEM_MODE, an integral mode narrower than a word,
   35196      set the bits outside of MEM_MODE to be either the sign-extension
   35197      or the zero-extension of the data read.  Return `SIGN_EXTEND' for
   35198      values of MEM_MODE for which the insn sign-extends, `ZERO_EXTEND'
   35199      for which it zero-extends, and `UNKNOWN' for other modes.
   35200 
   35201      This macro is not called with MEM_MODE non-integral or with a width
   35202      greater than or equal to `BITS_PER_WORD', so you may return any
   35203      value in this case.  Do not define this macro if it would always
   35204      return `UNKNOWN'.  On machines where this macro is defined, you
   35205      will normally define it as the constant `SIGN_EXTEND' or
   35206      `ZERO_EXTEND'.
   35207 
   35208      You may return a non-`UNKNOWN' value even if for some hard
   35209      registers the sign extension is not performed, if for the
   35210      `REGNO_REG_CLASS' of these hard registers
   35211      `CANNOT_CHANGE_MODE_CLASS' returns nonzero when the FROM mode is
   35212      MEM_MODE and the TO mode is any integral mode larger than this but
   35213      not larger than `word_mode'.
   35214 
   35215      You must return `UNKNOWN' if for some hard registers that allow
   35216      this mode, `CANNOT_CHANGE_MODE_CLASS' says that they cannot change
   35217      to `word_mode', but that they can change to another integral mode
   35218      that is larger then MEM_MODE but still smaller than `word_mode'.
   35219 
   35220  -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND
   35221      Define this macro if loading short immediate values into registers
   35222      sign extends.
   35223 
   35224  -- Macro: FIXUNS_TRUNC_LIKE_FIX_TRUNC
   35225      Define this macro if the same instructions that convert a floating
   35226      point number to a signed fixed point number also convert validly
   35227      to an unsigned one.
   35228 
   35229  -- Target Hook: unsigned int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL (enum
   35230           machine_mode MODE)
   35231      When `-ffast-math' is in effect, GCC tries to optimize divisions
   35232      by the same divisor, by turning them into multiplications by the
   35233      reciprocal.  This target hook specifies the minimum number of
   35234      divisions that should be there for GCC to perform the optimization
   35235      for a variable of mode MODE.  The default implementation returns 3
   35236      if the machine has an instruction for the division, and 2 if it
   35237      does not.
   35238 
   35239  -- Macro: MOVE_MAX
   35240      The maximum number of bytes that a single instruction can move
   35241      quickly between memory and registers or between two memory
   35242      locations.
   35243 
   35244  -- Macro: MAX_MOVE_MAX
   35245      The maximum number of bytes that a single instruction can move
   35246      quickly between memory and registers or between two memory
   35247      locations.  If this is undefined, the default is `MOVE_MAX'.
   35248      Otherwise, it is the constant value that is the largest value that
   35249      `MOVE_MAX' can have at run-time.
   35250 
   35251  -- Macro: SHIFT_COUNT_TRUNCATED
   35252      A C expression that is nonzero if on this machine the number of
   35253      bits actually used for the count of a shift operation is equal to
   35254      the number of bits needed to represent the size of the object
   35255      being shifted.  When this macro is nonzero, the compiler will
   35256      assume that it is safe to omit a sign-extend, zero-extend, and
   35257      certain bitwise `and' instructions that truncates the count of a
   35258      shift operation.  On machines that have instructions that act on
   35259      bit-fields at variable positions, which may include `bit test'
   35260      instructions, a nonzero `SHIFT_COUNT_TRUNCATED' also enables
   35261      deletion of truncations of the values that serve as arguments to
   35262      bit-field instructions.
   35263 
   35264      If both types of instructions truncate the count (for shifts) and
   35265      position (for bit-field operations), or if no variable-position
   35266      bit-field instructions exist, you should define this macro.
   35267 
   35268      However, on some machines, such as the 80386 and the 680x0,
   35269      truncation only applies to shift operations and not the (real or
   35270      pretended) bit-field operations.  Define `SHIFT_COUNT_TRUNCATED'
   35271      to be zero on such machines.  Instead, add patterns to the `md'
   35272      file that include the implied truncation of the shift instructions.
   35273 
   35274      You need not define this macro if it would always have the value
   35275      of zero.
   35276 
   35277  -- Target Hook: unsigned HOST_WIDE_INT TARGET_SHIFT_TRUNCATION_MASK
   35278           (enum machine_mode MODE)
   35279      This function describes how the standard shift patterns for MODE
   35280      deal with shifts by negative amounts or by more than the width of
   35281      the mode.  *Note shift patterns::.
   35282 
   35283      On many machines, the shift patterns will apply a mask M to the
   35284      shift count, meaning that a fixed-width shift of X by Y is
   35285      equivalent to an arbitrary-width shift of X by Y & M.  If this is
   35286      true for mode MODE, the function should return M, otherwise it
   35287      should return 0.  A return value of 0 indicates that no particular
   35288      behavior is guaranteed.
   35289 
   35290      Note that, unlike `SHIFT_COUNT_TRUNCATED', this function does
   35291      _not_ apply to general shift rtxes; it applies only to instructions
   35292      that are generated by the named shift patterns.
   35293 
   35294      The default implementation of this function returns
   35295      `GET_MODE_BITSIZE (MODE) - 1' if `SHIFT_COUNT_TRUNCATED' and 0
   35296      otherwise.  This definition is always safe, but if
   35297      `SHIFT_COUNT_TRUNCATED' is false, and some shift patterns
   35298      nevertheless truncate the shift count, you may get better code by
   35299      overriding it.
   35300 
   35301  -- Macro: TRULY_NOOP_TRUNCATION (OUTPREC, INPREC)
   35302      A C expression which is nonzero if on this machine it is safe to
   35303      "convert" an integer of INPREC bits to one of OUTPREC bits (where
   35304      OUTPREC is smaller than INPREC) by merely operating on it as if it
   35305      had only OUTPREC bits.
   35306 
   35307      On many machines, this expression can be 1.
   35308 
   35309      When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for
   35310      modes for which `MODES_TIEABLE_P' is 0, suboptimal code can result.
   35311      If this is the case, making `TRULY_NOOP_TRUNCATION' return 0 in
   35312      such cases may improve things.
   35313 
   35314  -- Target Hook: int TARGET_MODE_REP_EXTENDED (enum machine_mode MODE,
   35315           enum machine_mode REP_MODE)
   35316      The representation of an integral mode can be such that the values
   35317      are always extended to a wider integral mode.  Return
   35318      `SIGN_EXTEND' if values of MODE are represented in sign-extended
   35319      form to REP_MODE.  Return `UNKNOWN' otherwise.  (Currently, none
   35320      of the targets use zero-extended representation this way so unlike
   35321      `LOAD_EXTEND_OP', `TARGET_MODE_REP_EXTENDED' is expected to return
   35322      either `SIGN_EXTEND' or `UNKNOWN'.  Also no target extends MODE to
   35323      REP_MODE so that REP_MODE is not the next widest integral mode and
   35324      currently we take advantage of this fact.)
   35325 
   35326      Similarly to `LOAD_EXTEND_OP' you may return a non-`UNKNOWN' value
   35327      even if the extension is not performed on certain hard registers
   35328      as long as for the `REGNO_REG_CLASS' of these hard registers
   35329      `CANNOT_CHANGE_MODE_CLASS' returns nonzero.
   35330 
   35331      Note that `TARGET_MODE_REP_EXTENDED' and `LOAD_EXTEND_OP' describe
   35332      two related properties.  If you define `TARGET_MODE_REP_EXTENDED
   35333      (mode, word_mode)' you probably also want to define
   35334      `LOAD_EXTEND_OP (mode)' to return the same type of extension.
   35335 
   35336      In order to enforce the representation of `mode',
   35337      `TRULY_NOOP_TRUNCATION' should return false when truncating to
   35338      `mode'.
   35339 
   35340  -- Macro: STORE_FLAG_VALUE
   35341      A C expression describing the value returned by a comparison
   35342      operator with an integral mode and stored by a store-flag
   35343      instruction (`cstoreMODE4') when the condition is true.  This
   35344      description must apply to _all_ the `cstoreMODE4' patterns and all
   35345      the comparison operators whose results have a `MODE_INT' mode.
   35346 
   35347      A value of 1 or -1 means that the instruction implementing the
   35348      comparison operator returns exactly 1 or -1 when the comparison is
   35349      true and 0 when the comparison is false.  Otherwise, the value
   35350      indicates which bits of the result are guaranteed to be 1 when the
   35351      comparison is true.  This value is interpreted in the mode of the
   35352      comparison operation, which is given by the mode of the first
   35353      operand in the `cstoreMODE4' pattern.  Either the low bit or the
   35354      sign bit of `STORE_FLAG_VALUE' be on.  Presently, only those bits
   35355      are used by the compiler.
   35356 
   35357      If `STORE_FLAG_VALUE' is neither 1 or -1, the compiler will
   35358      generate code that depends only on the specified bits.  It can also
   35359      replace comparison operators with equivalent operations if they
   35360      cause the required bits to be set, even if the remaining bits are
   35361      undefined.  For example, on a machine whose comparison operators
   35362      return an `SImode' value and where `STORE_FLAG_VALUE' is defined as
   35363      `0x80000000', saying that just the sign bit is relevant, the
   35364      expression
   35365 
   35366           (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0))
   35367 
   35368      can be converted to
   35369 
   35370           (ashift:SI X (const_int N))
   35371 
   35372      where N is the appropriate shift count to move the bit being
   35373      tested into the sign bit.
   35374 
   35375      There is no way to describe a machine that always sets the
   35376      low-order bit for a true value, but does not guarantee the value
   35377      of any other bits, but we do not know of any machine that has such
   35378      an instruction.  If you are trying to port GCC to such a machine,
   35379      include an instruction to perform a logical-and of the result with
   35380      1 in the pattern for the comparison operators and let us know at
   35381      <gcc (a] gcc.gnu.org>.
   35382 
   35383      Often, a machine will have multiple instructions that obtain a
   35384      value from a comparison (or the condition codes).  Here are rules
   35385      to guide the choice of value for `STORE_FLAG_VALUE', and hence the
   35386      instructions to be used:
   35387 
   35388         * Use the shortest sequence that yields a valid definition for
   35389           `STORE_FLAG_VALUE'.  It is more efficient for the compiler to
   35390           "normalize" the value (convert it to, e.g., 1 or 0) than for
   35391           the comparison operators to do so because there may be
   35392           opportunities to combine the normalization with other
   35393           operations.
   35394 
   35395         * For equal-length sequences, use a value of 1 or -1, with -1
   35396           being slightly preferred on machines with expensive jumps and
   35397           1 preferred on other machines.
   35398 
   35399         * As a second choice, choose a value of `0x80000001' if
   35400           instructions exist that set both the sign and low-order bits
   35401           but do not define the others.
   35402 
   35403         * Otherwise, use a value of `0x80000000'.
   35404 
   35405      Many machines can produce both the value chosen for
   35406      `STORE_FLAG_VALUE' and its negation in the same number of
   35407      instructions.  On those machines, you should also define a pattern
   35408      for those cases, e.g., one matching
   35409 
   35410           (set A (neg:M (ne:M B C)))
   35411 
   35412      Some machines can also perform `and' or `plus' operations on
   35413      condition code values with less instructions than the corresponding
   35414      `cstoreMODE4' insn followed by `and' or `plus'.  On those
   35415      machines, define the appropriate patterns.  Use the names `incscc'
   35416      and `decscc', respectively, for the patterns which perform `plus'
   35417      or `minus' operations on condition code values.  See `rs6000.md'
   35418      for some examples.  The GNU Superoptimizer can be used to find
   35419      such instruction sequences on other machines.
   35420 
   35421      If this macro is not defined, the default value, 1, is used.  You
   35422      need not define `STORE_FLAG_VALUE' if the machine has no store-flag
   35423      instructions, or if the value generated by these instructions is 1.
   35424 
   35425  -- Macro: FLOAT_STORE_FLAG_VALUE (MODE)
   35426      A C expression that gives a nonzero `REAL_VALUE_TYPE' value that is
   35427      returned when comparison operators with floating-point results are
   35428      true.  Define this macro on machines that have comparison
   35429      operations that return floating-point values.  If there are no
   35430      such operations, do not define this macro.
   35431 
   35432  -- Macro: VECTOR_STORE_FLAG_VALUE (MODE)
   35433      A C expression that gives a rtx representing the nonzero true
   35434      element for vector comparisons.  The returned rtx should be valid
   35435      for the inner mode of MODE which is guaranteed to be a vector
   35436      mode.  Define this macro on machines that have vector comparison
   35437      operations that return a vector result.  If there are no such
   35438      operations, do not define this macro.  Typically, this macro is
   35439      defined as `const1_rtx' or `constm1_rtx'.  This macro may return
   35440      `NULL_RTX' to prevent the compiler optimizing such vector
   35441      comparison operations for the given mode.
   35442 
   35443  -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
   35444  -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
   35445      A C expression that indicates whether the architecture defines a
   35446      value for `clz' or `ctz' with a zero operand.  A result of `0'
   35447      indicates the value is undefined.  If the value is defined for
   35448      only the RTL expression, the macro should evaluate to `1'; if the
   35449      value applies also to the corresponding optab entry (which is
   35450      normally the case if it expands directly into the corresponding
   35451      RTL), then the macro should evaluate to `2'.  In the cases where
   35452      the value is defined, VALUE should be set to this value.
   35453 
   35454      If this macro is not defined, the value of `clz' or `ctz' at zero
   35455      is assumed to be undefined.
   35456 
   35457      This macro must be defined if the target's expansion for `ffs'
   35458      relies on a particular value to get correct results.  Otherwise it
   35459      is not necessary, though it may be used to optimize some corner
   35460      cases, and to provide a default expansion for the `ffs' optab.
   35461 
   35462      Note that regardless of this macro the "definedness" of `clz' and
   35463      `ctz' at zero do _not_ extend to the builtin functions visible to
   35464      the user.  Thus one may be free to adjust the value at will to
   35465      match the target expansion of these operations without fear of
   35466      breaking the API.
   35467 
   35468  -- Macro: Pmode
   35469      An alias for the machine mode for pointers.  On most machines,
   35470      define this to be the integer mode corresponding to the width of a
   35471      hardware pointer; `SImode' on 32-bit machine or `DImode' on 64-bit
   35472      machines.  On some machines you must define this to be one of the
   35473      partial integer modes, such as `PSImode'.
   35474 
   35475      The width of `Pmode' must be at least as large as the value of
   35476      `POINTER_SIZE'.  If it is not equal, you must define the macro
   35477      `POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to
   35478      `Pmode'.
   35479 
   35480  -- Macro: FUNCTION_MODE
   35481      An alias for the machine mode used for memory references to
   35482      functions being called, in `call' RTL expressions.  On most CISC
   35483      machines, where an instruction can begin at any byte address, this
   35484      should be `QImode'.  On most RISC machines, where all instructions
   35485      have fixed size and alignment, this should be a mode with the same
   35486      size and alignment as the machine instruction words - typically
   35487      `SImode' or `HImode'.
   35488 
   35489  -- Macro: STDC_0_IN_SYSTEM_HEADERS
   35490      In normal operation, the preprocessor expands `__STDC__' to the
   35491      constant 1, to signify that GCC conforms to ISO Standard C.  On
   35492      some hosts, like Solaris, the system compiler uses a different
   35493      convention, where `__STDC__' is normally 0, but is 1 if the user
   35494      specifies strict conformance to the C Standard.
   35495 
   35496      Defining `STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host
   35497      convention when processing system header files, but when
   35498      processing user files `__STDC__' will always expand to 1.
   35499 
   35500  -- Macro: NO_IMPLICIT_EXTERN_C
   35501      Define this macro if the system header files support C++ as well
   35502      as C.  This macro inhibits the usual method of using system header
   35503      files in C++, which is to pretend that the file's contents are
   35504      enclosed in `extern "C" {...}'.
   35505 
   35506  -- Macro: REGISTER_TARGET_PRAGMAS ()
   35507      Define this macro if you want to implement any target-specific
   35508      pragmas.  If defined, it is a C expression which makes a series of
   35509      calls to `c_register_pragma' or `c_register_pragma_with_expansion'
   35510      for each pragma.  The macro may also do any setup required for the
   35511      pragmas.
   35512 
   35513      The primary reason to define this macro is to provide
   35514      compatibility with other compilers for the same target.  In
   35515      general, we discourage definition of target-specific pragmas for
   35516      GCC.
   35517 
   35518      If the pragma can be implemented by attributes then you should
   35519      consider defining the target hook `TARGET_INSERT_ATTRIBUTES' as
   35520      well.
   35521 
   35522      Preprocessor macros that appear on pragma lines are not expanded.
   35523      All `#pragma' directives that do not match any registered pragma
   35524      are silently ignored, unless the user specifies
   35525      `-Wunknown-pragmas'.
   35526 
   35527  -- Function: void c_register_pragma (const char *SPACE, const char
   35528           *NAME, void (*CALLBACK) (struct cpp_reader *))
   35529  -- Function: void c_register_pragma_with_expansion (const char *SPACE,
   35530           const char *NAME, void (*CALLBACK) (struct cpp_reader *))
   35531      Each call to `c_register_pragma' or
   35532      `c_register_pragma_with_expansion' establishes one pragma.  The
   35533      CALLBACK routine will be called when the preprocessor encounters a
   35534      pragma of the form
   35535 
   35536           #pragma [SPACE] NAME ...
   35537 
   35538      SPACE is the case-sensitive namespace of the pragma, or `NULL' to
   35539      put the pragma in the global namespace.  The callback routine
   35540      receives PFILE as its first argument, which can be passed on to
   35541      cpplib's functions if necessary.  You can lex tokens after the
   35542      NAME by calling `pragma_lex'.  Tokens that are not read by the
   35543      callback will be silently ignored.  The end of the line is
   35544      indicated by a token of type `CPP_EOF'.  Macro expansion occurs on
   35545      the arguments of pragmas registered with
   35546      `c_register_pragma_with_expansion' but not on the arguments of
   35547      pragmas registered with `c_register_pragma'.
   35548 
   35549      Note that the use of `pragma_lex' is specific to the C and C++
   35550      compilers.  It will not work in the Java or Fortran compilers, or
   35551      any other language compilers for that matter.  Thus if
   35552      `pragma_lex' is going to be called from target-specific code, it
   35553      must only be done so when building the C and C++ compilers.  This
   35554      can be done by defining the variables `c_target_objs' and
   35555      `cxx_target_objs' in the target entry in the `config.gcc' file.
   35556      These variables should name the target-specific, language-specific
   35557      object file which contains the code that uses `pragma_lex'.  Note
   35558      it will also be necessary to add a rule to the makefile fragment
   35559      pointed to by `tmake_file' that shows how to build this object
   35560      file.
   35561 
   35562  -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION
   35563      Define this macro if macros should be expanded in the arguments of
   35564      `#pragma pack'.
   35565 
   35566  -- Target Hook: bool TARGET_HANDLE_PRAGMA_EXTERN_PREFIX
   35567      True if `#pragma extern_prefix' is to be supported.
   35568 
   35569  -- Macro: TARGET_DEFAULT_PACK_STRUCT
   35570      If your target requires a structure packing default other than 0
   35571      (meaning the machine default), define this macro to the necessary
   35572      value (in bytes).  This must be a value that would also be valid
   35573      to use with `#pragma pack()' (that is, a small power of two).
   35574 
   35575  -- Macro: DOLLARS_IN_IDENTIFIERS
   35576      Define this macro to control use of the character `$' in
   35577      identifier names for the C family of languages.  0 means `$' is
   35578      not allowed by default; 1 means it is allowed.  1 is the default;
   35579      there is no need to define this macro in that case.
   35580 
   35581  -- Macro: NO_DOLLAR_IN_LABEL
   35582      Define this macro if the assembler does not accept the character
   35583      `$' in label names.  By default constructors and destructors in
   35584      G++ have `$' in the identifiers.  If this macro is defined, `.' is
   35585      used instead.
   35586 
   35587  -- Macro: NO_DOT_IN_LABEL
   35588      Define this macro if the assembler does not accept the character
   35589      `.' in label names.  By default constructors and destructors in G++
   35590      have names that use `.'.  If this macro is defined, these names
   35591      are rewritten to avoid `.'.
   35592 
   35593  -- Macro: INSN_SETS_ARE_DELAYED (INSN)
   35594      Define this macro as a C expression that is nonzero if it is safe
   35595      for the delay slot scheduler to place instructions in the delay
   35596      slot of INSN, even if they appear to use a resource set or
   35597      clobbered in INSN.  INSN is always a `jump_insn' or an `insn'; GCC
   35598      knows that every `call_insn' has this behavior.  On machines where
   35599      some `insn' or `jump_insn' is really a function call and hence has
   35600      this behavior, you should define this macro.
   35601 
   35602      You need not define this macro if it would always return zero.
   35603 
   35604  -- Macro: INSN_REFERENCES_ARE_DELAYED (INSN)
   35605      Define this macro as a C expression that is nonzero if it is safe
   35606      for the delay slot scheduler to place instructions in the delay
   35607      slot of INSN, even if they appear to set or clobber a resource
   35608      referenced in INSN.  INSN is always a `jump_insn' or an `insn'.
   35609      On machines where some `insn' or `jump_insn' is really a function
   35610      call and its operands are registers whose use is actually in the
   35611      subroutine it calls, you should define this macro.  Doing so
   35612      allows the delay slot scheduler to move instructions which copy
   35613      arguments into the argument registers into the delay slot of INSN.
   35614 
   35615      You need not define this macro if it would always return zero.
   35616 
   35617  -- Macro: MULTIPLE_SYMBOL_SPACES
   35618      Define this macro as a C expression that is nonzero if, in some
   35619      cases, global symbols from one translation unit may not be bound
   35620      to undefined symbols in another translation unit without user
   35621      intervention.  For instance, under Microsoft Windows symbols must
   35622      be explicitly imported from shared libraries (DLLs).
   35623 
   35624      You need not define this macro if it would always evaluate to zero.
   35625 
   35626  -- Target Hook: tree TARGET_MD_ASM_CLOBBERS (tree OUTPUTS, tree
   35627           INPUTS, tree CLOBBERS)
   35628      This target hook should add to CLOBBERS `STRING_CST' trees for any
   35629      hard regs the port wishes to automatically clobber for an asm.  It
   35630      should return the result of the last `tree_cons' used to add a
   35631      clobber.  The OUTPUTS, INPUTS and CLOBBER lists are the
   35632      corresponding parameters to the asm and may be inspected to avoid
   35633      clobbering a register that is an input or output of the asm.  You
   35634      can use `tree_overlaps_hard_reg_set', declared in `tree.h', to test
   35635      for overlap with regards to asm-declared registers.
   35636 
   35637  -- Macro: MATH_LIBRARY
   35638      Define this macro as a C string constant for the linker argument
   35639      to link in the system math library, minus the initial `"-l"', or
   35640      `""' if the target does not have a separate math library.
   35641 
   35642      You need only define this macro if the default of `"m"' is wrong.
   35643 
   35644  -- Macro: LIBRARY_PATH_ENV
   35645      Define this macro as a C string constant for the environment
   35646      variable that specifies where the linker should look for libraries.
   35647 
   35648      You need only define this macro if the default of `"LIBRARY_PATH"'
   35649      is wrong.
   35650 
   35651  -- Macro: TARGET_POSIX_IO
   35652      Define this macro if the target supports the following POSIX file
   35653      functions, access, mkdir and  file locking with fcntl / F_SETLKW.
   35654      Defining `TARGET_POSIX_IO' will enable the test coverage code to
   35655      use file locking when exiting a program, which avoids race
   35656      conditions if the program has forked. It will also create
   35657      directories at run-time for cross-profiling.
   35658 
   35659  -- Macro: MAX_CONDITIONAL_EXECUTE
   35660      A C expression for the maximum number of instructions to execute
   35661      via conditional execution instructions instead of a branch.  A
   35662      value of `BRANCH_COST'+1 is the default if the machine does not
   35663      use cc0, and 1 if it does use cc0.
   35664 
   35665  -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR)
   35666      Used if the target needs to perform machine-dependent
   35667      modifications on the conditionals used for turning basic blocks
   35668      into conditionally executed code.  CE_INFO points to a data
   35669      structure, `struct ce_if_block', which contains information about
   35670      the currently processed blocks.  TRUE_EXPR and FALSE_EXPR are the
   35671      tests that are used for converting the then-block and the
   35672      else-block, respectively.  Set either TRUE_EXPR or FALSE_EXPR to a
   35673      null pointer if the tests cannot be converted.
   35674 
   35675  -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR,
   35676           FALSE_EXPR)
   35677      Like `IFCVT_MODIFY_TESTS', but used when converting more
   35678      complicated if-statements into conditions combined by `and' and
   35679      `or' operations.  BB contains the basic block that contains the
   35680      test that is currently being processed and about to be turned into
   35681      a condition.
   35682 
   35683  -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN)
   35684      A C expression to modify the PATTERN of an INSN that is to be
   35685      converted to conditional execution format.  CE_INFO points to a
   35686      data structure, `struct ce_if_block', which contains information
   35687      about the currently processed blocks.
   35688 
   35689  -- Macro: IFCVT_MODIFY_FINAL (CE_INFO)
   35690      A C expression to perform any final machine dependent
   35691      modifications in converting code to conditional execution.  The
   35692      involved basic blocks can be found in the `struct ce_if_block'
   35693      structure that is pointed to by CE_INFO.
   35694 
   35695  -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO)
   35696      A C expression to cancel any machine dependent modifications in
   35697      converting code to conditional execution.  The involved basic
   35698      blocks can be found in the `struct ce_if_block' structure that is
   35699      pointed to by CE_INFO.
   35700 
   35701  -- Macro: IFCVT_INIT_EXTRA_FIELDS (CE_INFO)
   35702      A C expression to initialize any extra fields in a `struct
   35703      ce_if_block' structure, which are defined by the
   35704      `IFCVT_EXTRA_FIELDS' macro.
   35705 
   35706  -- Macro: IFCVT_EXTRA_FIELDS
   35707      If defined, it should expand to a set of field declarations that
   35708      will be added to the `struct ce_if_block' structure.  These should
   35709      be initialized by the `IFCVT_INIT_EXTRA_FIELDS' macro.
   35710 
   35711  -- Target Hook: void TARGET_MACHINE_DEPENDENT_REORG (void)
   35712      If non-null, this hook performs a target-specific pass over the
   35713      instruction stream.  The compiler will run it at all optimization
   35714      levels, just before the point at which it normally does
   35715      delayed-branch scheduling.
   35716 
   35717      The exact purpose of the hook varies from target to target.  Some
   35718      use it to do transformations that are necessary for correctness,
   35719      such as laying out in-function constant pools or avoiding hardware
   35720      hazards.  Others use it as an opportunity to do some
   35721      machine-dependent optimizations.
   35722 
   35723      You need not implement the hook if it has nothing to do.  The
   35724      default definition is null.
   35725 
   35726  -- Target Hook: void TARGET_INIT_BUILTINS (void)
   35727      Define this hook if you have any machine-specific built-in
   35728      functions that need to be defined.  It should be a function that
   35729      performs the necessary setup.
   35730 
   35731      Machine specific built-in functions can be useful to expand
   35732      special machine instructions that would otherwise not normally be
   35733      generated because they have no equivalent in the source language
   35734      (for example, SIMD vector instructions or prefetch instructions).
   35735 
   35736      To create a built-in function, call the function
   35737      `lang_hooks.builtin_function' which is defined by the language
   35738      front end.  You can use any type nodes set up by
   35739      `build_common_tree_nodes' and `build_common_tree_nodes_2'; only
   35740      language front ends that use those two functions will call
   35741      `TARGET_INIT_BUILTINS'.
   35742 
   35743  -- Target Hook: tree TARGET_BUILTIN_DECL (unsigned CODE, bool
   35744           INITIALIZE_P)
   35745      Define this hook if you have any machine-specific built-in
   35746      functions that need to be defined.  It should be a function that
   35747      returns the builtin function declaration for the builtin function
   35748      code CODE.  If there is no such builtin and it cannot be
   35749      initialized at this time if INITIALIZE_P is true the function
   35750      should return `NULL_TREE'.  If CODE is out of range the function
   35751      should return `error_mark_node'.
   35752 
   35753  -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx
   35754           SUBTARGET, enum machine_mode MODE, int IGNORE)
   35755      Expand a call to a machine specific built-in function that was set
   35756      up by `TARGET_INIT_BUILTINS'.  EXP is the expression for the
   35757      function call; the result should go to TARGET if that is
   35758      convenient, and have mode MODE if that is convenient.  SUBTARGET
   35759      may be used as the target for computing one of EXP's operands.
   35760      IGNORE is nonzero if the value is to be ignored.  This function
   35761      should return the result of the call to the built-in function.
   35762 
   35763  -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (unsigned int
   35764           LOC, tree FNDECL, void *ARGLIST)
   35765      Select a replacement for a machine specific built-in function that
   35766      was set up by `TARGET_INIT_BUILTINS'.  This is done _before_
   35767      regular type checking, and so allows the target to implement a
   35768      crude form of function overloading.  FNDECL is the declaration of
   35769      the built-in function.  ARGLIST is the list of arguments passed to
   35770      the built-in function.  The result is a complete expression that
   35771      implements the operation, usually another `CALL_EXPR'.  ARGLIST
   35772      really has type `VEC(tree,gc)*'
   35773 
   35774  -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, int N_ARGS,
   35775           tree *ARGP, bool IGNORE)
   35776      Fold a call to a machine specific built-in function that was set
   35777      up by `TARGET_INIT_BUILTINS'.  FNDECL is the declaration of the
   35778      built-in function.  N_ARGS is the number of arguments passed to
   35779      the function; the arguments themselves are pointed to by ARGP.
   35780      The result is another tree containing a simplified expression for
   35781      the call's result.  If IGNORE is true the value will be ignored.
   35782 
   35783  -- Target Hook: int TARGET_MVERSION_FUNCTION (tree FNDECL, tree
   35784           *OPTIMIZATION_NODE_CHAIN, tree *COND_FUNC_DECL)
   35785      Check if a function needs to be multi-versioned to support
   35786      variants of this architecture.  FNDECL is the declaration of the
   35787      function.
   35788 
   35789  -- Target Hook: bool TARGET_SLOW_UNALIGNED_VECTOR_MEMOP (void)
   35790      Return true if unaligned vector memory load/store is a slow
   35791      operation on this target.
   35792 
   35793  -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (const_rtx
   35794           INSN)
   35795      Take an instruction in INSN and return NULL if it is valid within a
   35796      low-overhead loop, otherwise return a string explaining why doloop
   35797      could not be applied.
   35798 
   35799      Many targets use special registers for low-overhead looping. For
   35800      any instruction that clobbers these this function should return a
   35801      string indicating the reason why the doloop could not be applied.
   35802      By default, the RTL loop optimizer does not use a present doloop
   35803      pattern for loops containing function calls or branch on table
   35804      instructions.
   35805 
   35806  -- Macro: MD_CAN_REDIRECT_BRANCH (BRANCH1, BRANCH2)
   35807      Take a branch insn in BRANCH1 and another in BRANCH2.  Return true
   35808      if redirecting BRANCH1 to the destination of BRANCH2 is possible.
   35809 
   35810      On some targets, branches may have a limited range.  Optimizing the
   35811      filling of delay slots can result in branches being redirected,
   35812      and this may in turn cause a branch offset to overflow.
   35813 
   35814  -- Target Hook: bool TARGET_COMMUTATIVE_P (const_rtx X, int OUTER_CODE)
   35815      This target hook returns `true' if X is considered to be
   35816      commutative.  Usually, this is just COMMUTATIVE_P (X), but the HP
   35817      PA doesn't consider PLUS to be commutative inside a MEM.
   35818      OUTER_CODE is the rtx code of the enclosing rtl, if known,
   35819      otherwise it is UNKNOWN.
   35820 
   35821  -- Target Hook: rtx TARGET_ALLOCATE_INITIAL_VALUE (rtx HARD_REG)
   35822      When the initial value of a hard register has been copied in a
   35823      pseudo register, it is often not necessary to actually allocate
   35824      another register to this pseudo register, because the original
   35825      hard register or a stack slot it has been saved into can be used.
   35826      `TARGET_ALLOCATE_INITIAL_VALUE' is called at the start of register
   35827      allocation once for each hard register that had its initial value
   35828      copied by using `get_func_hard_reg_initial_val' or
   35829      `get_hard_reg_initial_val'.  Possible values are `NULL_RTX', if
   35830      you don't want to do any special allocation, a `REG' rtx--that
   35831      would typically be the hard register itself, if it is known not to
   35832      be clobbered--or a `MEM'.  If you are returning a `MEM', this is
   35833      only a hint for the allocator; it might decide to use another
   35834      register anyways.  You may use `current_function_leaf_function' in
   35835      the hook, functions that use `REG_N_SETS', to determine if the hard
   35836      register in question will not be clobbered.  The default value of
   35837      this hook is `NULL', which disables any special allocation.
   35838 
   35839  -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned
   35840           FLAGS)
   35841      This target hook returns nonzero if X, an `unspec' or
   35842      `unspec_volatile' operation, might cause a trap.  Targets can use
   35843      this hook to enhance precision of analysis for `unspec' and
   35844      `unspec_volatile' operations.  You may call `may_trap_p_1' to
   35845      analyze inner elements of X in which case FLAGS should be passed
   35846      along.
   35847 
   35848  -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL)
   35849      The compiler invokes this hook whenever it changes its current
   35850      function context (`cfun').  You can define this function if the
   35851      back end needs to perform any initialization or reset actions on a
   35852      per-function basis.  For example, it may be used to implement
   35853      function attributes that affect register usage or code generation
   35854      patterns.  The argument DECL is the declaration for the new
   35855      function context, and may be null to indicate that the compiler
   35856      has left a function context and is returning to processing at the
   35857      top level.  The default hook function does nothing.
   35858 
   35859      GCC sets `cfun' to a dummy function context during initialization
   35860      of some parts of the back end.  The hook function is not invoked
   35861      in this situation; you need not worry about the hook being invoked
   35862      recursively, or when the back end is in a partially-initialized
   35863      state.  `cfun' might be `NULL' to indicate processing at top level,
   35864      outside of any function scope.
   35865 
   35866  -- Macro: TARGET_OBJECT_SUFFIX
   35867      Define this macro to be a C string representing the suffix for
   35868      object files on your target machine.  If you do not define this
   35869      macro, GCC will use `.o' as the suffix for object files.
   35870 
   35871  -- Macro: TARGET_EXECUTABLE_SUFFIX
   35872      Define this macro to be a C string representing the suffix to be
   35873      automatically added to executable files on your target machine.
   35874      If you do not define this macro, GCC will use the null string as
   35875      the suffix for executable files.
   35876 
   35877  -- Macro: COLLECT_EXPORT_LIST
   35878      If defined, `collect2' will scan the individual object files
   35879      specified on its command line and create an export list for the
   35880      linker.  Define this macro for systems like AIX, where the linker
   35881      discards object files that are not referenced from `main' and uses
   35882      export lists.
   35883 
   35884  -- Macro: MODIFY_JNI_METHOD_CALL (MDECL)
   35885      Define this macro to a C expression representing a variant of the
   35886      method call MDECL, if Java Native Interface (JNI) methods must be
   35887      invoked differently from other methods on your target.  For
   35888      example, on 32-bit Microsoft Windows, JNI methods must be invoked
   35889      using the `stdcall' calling convention and this macro is then
   35890      defined as this expression:
   35891 
   35892           build_type_attribute_variant (MDECL,
   35893                                         build_tree_list
   35894                                         (get_identifier ("stdcall"),
   35895                                          NULL))
   35896 
   35897  -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void)
   35898      This target hook returns `true' past the point in which new jump
   35899      instructions could be created.  On machines that require a
   35900      register for every jump such as the SHmedia ISA of SH5, this point
   35901      would typically be reload, so this target hook should be defined
   35902      to a function such as:
   35903 
   35904           static bool
   35905           cannot_modify_jumps_past_reload_p ()
   35906           {
   35907             return (reload_completed || reload_in_progress);
   35908           }
   35909 
   35910  -- Target Hook: reg_class_t TARGET_BRANCH_TARGET_REGISTER_CLASS (void)
   35911      This target hook returns a register class for which branch target
   35912      register optimizations should be applied.  All registers in this
   35913      class should be usable interchangeably.  After reload, registers
   35914      in this class will be re-allocated and loads will be hoisted out
   35915      of loops and be subjected to inter-block scheduling.
   35916 
   35917  -- Target Hook: bool TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED (bool
   35918           AFTER_PROLOGUE_EPILOGUE_GEN)
   35919      Branch target register optimization will by default exclude
   35920      callee-saved registers that are not already live during the
   35921      current function; if this target hook returns true, they will be
   35922      included.  The target code must than make sure that all target
   35923      registers in the class returned by
   35924      `TARGET_BRANCH_TARGET_REGISTER_CLASS' that might need saving are
   35925      saved.  AFTER_PROLOGUE_EPILOGUE_GEN indicates if prologues and
   35926      epilogues have already been generated.  Note, even if you only
   35927      return true when AFTER_PROLOGUE_EPILOGUE_GEN is false, you still
   35928      are likely to have to make special provisions in
   35929      `INITIAL_ELIMINATION_OFFSET' to reserve space for caller-saved
   35930      target registers.
   35931 
   35932  -- Target Hook: bool TARGET_HAVE_CONDITIONAL_EXECUTION (void)
   35933      This target hook returns true if the target supports conditional
   35934      execution.  This target hook is required only when the target has
   35935      several different modes and they have different conditional
   35936      execution capability, such as ARM.
   35937 
   35938  -- Target Hook: unsigned TARGET_LOOP_UNROLL_ADJUST (unsigned NUNROLL,
   35939           struct loop *LOOP)
   35940      This target hook returns a new value for the number of times LOOP
   35941      should be unrolled. The parameter NUNROLL is the number of times
   35942      the loop is to be unrolled. The parameter LOOP is a pointer to the
   35943      loop, which is going to be checked for unrolling. This target hook
   35944      is required only when the target has special constraints like
   35945      maximum number of memory accesses.
   35946 
   35947  -- Macro: POWI_MAX_MULTS
   35948      If defined, this macro is interpreted as a signed integer C
   35949      expression that specifies the maximum number of floating point
   35950      multiplications that should be emitted when expanding
   35951      exponentiation by an integer constant inline.  When this value is
   35952      defined, exponentiation requiring more than this number of
   35953      multiplications is implemented by calling the system library's
   35954      `pow', `powf' or `powl' routines.  The default value places no
   35955      upper bound on the multiplication count.
   35956 
   35957  -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char
   35958           *IPREFIX, int STDINC)
   35959      This target hook should register any extra include files for the
   35960      target.  The parameter STDINC indicates if normal include files
   35961      are present.  The parameter SYSROOT is the system root directory.
   35962      The parameter IPREFIX is the prefix for the gcc directory.
   35963 
   35964  -- Macro: void TARGET_EXTRA_PRE_INCLUDES (const char *SYSROOT, const
   35965           char *IPREFIX, int STDINC)
   35966      This target hook should register any extra include files for the
   35967      target before any standard headers.  The parameter STDINC
   35968      indicates if normal include files are present.  The parameter
   35969      SYSROOT is the system root directory.  The parameter IPREFIX is
   35970      the prefix for the gcc directory.
   35971 
   35972  -- Macro: void TARGET_OPTF (char *PATH)
   35973      This target hook should register special include paths for the
   35974      target.  The parameter PATH is the include to register.  On Darwin
   35975      systems, this is used for Framework includes, which have semantics
   35976      that are different from `-I'.
   35977 
   35978  -- Macro: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL)
   35979      This target macro returns `true' if it is safe to use a local alias
   35980      for a virtual function FNDECL when constructing thunks, `false'
   35981      otherwise.  By default, the macro returns `true' for all
   35982      functions, if a target supports aliases (i.e. defines
   35983      `ASM_OUTPUT_DEF'), `false' otherwise,
   35984 
   35985  -- Macro: TARGET_FORMAT_TYPES
   35986      If defined, this macro is the name of a global variable containing
   35987      target-specific format checking information for the `-Wformat'
   35988      option.  The default is to have no target-specific format checks.
   35989 
   35990  -- Macro: TARGET_N_FORMAT_TYPES
   35991      If defined, this macro is the number of entries in
   35992      `TARGET_FORMAT_TYPES'.
   35993 
   35994  -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES
   35995      If defined, this macro is the name of a global variable containing
   35996      target-specific format overrides for the `-Wformat' option. The
   35997      default is to have no target-specific format overrides. If defined,
   35998      `TARGET_FORMAT_TYPES' must be defined, too.
   35999 
   36000  -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT
   36001      If defined, this macro specifies the number of entries in
   36002      `TARGET_OVERRIDES_FORMAT_ATTRIBUTES'.
   36003 
   36004  -- Macro: TARGET_OVERRIDES_FORMAT_INIT
   36005      If defined, this macro specifies the optional initialization
   36006      routine for target specific customizations of the system printf
   36007      and scanf formatter settings.
   36008 
   36009  -- Target Hook: bool TARGET_RELAXED_ORDERING
   36010      If set to `true', means that the target's memory model does not
   36011      guarantee that loads which do not depend on one another will access
   36012      main memory in the order of the instruction stream; if ordering is
   36013      important, an explicit memory barrier must be used.  This is true
   36014      of many recent processors which implement a policy of "relaxed,"
   36015      "weak," or "release" memory consistency, such as Alpha, PowerPC,
   36016      and ia64.  The default is `false'.
   36017 
   36018  -- Target Hook: const char * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN
   36019           (const_tree TYPELIST, const_tree FUNCDECL, const_tree VAL)
   36020      If defined, this macro returns the diagnostic message when it is
   36021      illegal to pass argument VAL to function FUNCDECL with prototype
   36022      TYPELIST.
   36023 
   36024  -- Target Hook: const char * TARGET_INVALID_CONVERSION (const_tree
   36025           FROMTYPE, const_tree TOTYPE)
   36026      If defined, this macro returns the diagnostic message when it is
   36027      invalid to convert from FROMTYPE to TOTYPE, or `NULL' if validity
   36028      should be determined by the front end.
   36029 
   36030  -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP,
   36031           const_tree TYPE)
   36032      If defined, this macro returns the diagnostic message when it is
   36033      invalid to apply operation OP (where unary plus is denoted by
   36034      `CONVERT_EXPR') to an operand of type TYPE, or `NULL' if validity
   36035      should be determined by the front end.
   36036 
   36037  -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP,
   36038           const_tree TYPE1, const_tree TYPE2)
   36039      If defined, this macro returns the diagnostic message when it is
   36040      invalid to apply operation OP to operands of types TYPE1 and
   36041      TYPE2, or `NULL' if validity should be determined by the front end.
   36042 
   36043  -- Target Hook: const char * TARGET_INVALID_PARAMETER_TYPE (const_tree
   36044           TYPE)
   36045      If defined, this macro returns the diagnostic message when it is
   36046      invalid for functions to include parameters of type TYPE, or
   36047      `NULL' if validity should be determined by the front end.  This is
   36048      currently used only by the C and C++ front ends.
   36049 
   36050  -- Target Hook: const char * TARGET_INVALID_RETURN_TYPE (const_tree
   36051           TYPE)
   36052      If defined, this macro returns the diagnostic message when it is
   36053      invalid for functions to have return type TYPE, or `NULL' if
   36054      validity should be determined by the front end.  This is currently
   36055      used only by the C and C++ front ends.
   36056 
   36057  -- Target Hook: tree TARGET_PROMOTED_TYPE (const_tree TYPE)
   36058      If defined, this target hook returns the type to which values of
   36059      TYPE should be promoted when they appear in expressions, analogous
   36060      to the integer promotions, or `NULL_TREE' to use the front end's
   36061      normal promotion rules.  This hook is useful when there are
   36062      target-specific types with special promotion rules.  This is
   36063      currently used only by the C and C++ front ends.
   36064 
   36065  -- Target Hook: tree TARGET_CONVERT_TO_TYPE (tree TYPE, tree EXPR)
   36066      If defined, this hook returns the result of converting EXPR to
   36067      TYPE.  It should return the converted expression, or `NULL_TREE'
   36068      to apply the front end's normal conversion rules.  This hook is
   36069      useful when there are target-specific types with special
   36070      conversion rules.  This is currently used only by the C and C++
   36071      front ends.
   36072 
   36073  -- Macro: TARGET_USE_JCR_SECTION
   36074      This macro determines whether to use the JCR section to register
   36075      Java classes. By default, TARGET_USE_JCR_SECTION is defined to 1
   36076      if both SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true,
   36077      else 0.
   36078 
   36079  -- Macro: OBJC_JBLEN
   36080      This macro determines the size of the objective C jump buffer for
   36081      the NeXT runtime. By default, OBJC_JBLEN is defined to an
   36082      innocuous value.
   36083 
   36084  -- Macro: LIBGCC2_UNWIND_ATTRIBUTE
   36085      Define this macro if any target-specific attributes need to be
   36086      attached to the functions in `libgcc' that provide low-level
   36087      support for call stack unwinding.  It is used in declarations in
   36088      `unwind-generic.h' and the associated definitions of those
   36089      functions.
   36090 
   36091  -- Target Hook: void TARGET_UPDATE_STACK_BOUNDARY (void)
   36092      Define this macro to update the current function stack boundary if
   36093      necessary.
   36094 
   36095  -- Target Hook: rtx TARGET_GET_DRAP_RTX (void)
   36096      This hook should return an rtx for Dynamic Realign Argument
   36097      Pointer (DRAP) if a different argument pointer register is needed
   36098      to access the function's argument list due to stack realignment.
   36099      Return `NULL' if no DRAP is needed.
   36100 
   36101  -- Target Hook: bool TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS (void)
   36102      When optimization is disabled, this hook indicates whether or not
   36103      arguments should be allocated to stack slots.  Normally, GCC
   36104      allocates stacks slots for arguments when not optimizing in order
   36105      to make debugging easier.  However, when a function is declared
   36106      with `__attribute__((naked))', there is no stack frame, and the
   36107      compiler cannot safely move arguments from the registers in which
   36108      they are passed to the stack.  Therefore, this hook should return
   36109      true in general, but false for naked functions.  The default
   36110      implementation always returns true.
   36111 
   36112  -- Target Hook: unsigned HOST_WIDE_INT TARGET_CONST_ANCHOR
   36113      On some architectures it can take multiple instructions to
   36114      synthesize a constant.  If there is another constant already in a
   36115      register that is close enough in value then it is preferable that
   36116      the new constant is computed from this register using immediate
   36117      addition or subtraction.  We accomplish this through CSE.  Besides
   36118      the value of the constant we also add a lower and an upper
   36119      constant anchor to the available expressions.  These are then
   36120      queried when encountering new constants.  The anchors are computed
   36121      by rounding the constant up and down to a multiple of the value of
   36122      `TARGET_CONST_ANCHOR'.  `TARGET_CONST_ANCHOR' should be the
   36123      maximum positive value accepted by immediate-add plus one.  We
   36124      currently assume that the value of `TARGET_CONST_ANCHOR' is a
   36125      power of 2.  For example, on MIPS, where add-immediate takes a
   36126      16-bit signed value, `TARGET_CONST_ANCHOR' is set to `0x8000'.
   36127      The default value is zero, which disables this optimization.
   36128 
   36129 
   36130 File: gccint.info,  Node: Host Config,  Next: Fragments,  Prev: Target Macros,  Up: Top
   36131 
   36132 18 Host Configuration
   36133 *********************
   36134 
   36135 Most details about the machine and system on which the compiler is
   36136 actually running are detected by the `configure' script.  Some things
   36137 are impossible for `configure' to detect; these are described in two
   36138 ways, either by macros defined in a file named `xm-MACHINE.h' or by
   36139 hook functions in the file specified by the OUT_HOST_HOOK_OBJ variable
   36140 in `config.gcc'.  (The intention is that very few hosts will need a
   36141 header file but nearly every fully supported host will need to override
   36142 some hooks.)
   36143 
   36144  If you need to define only a few macros, and they have simple
   36145 definitions, consider using the `xm_defines' variable in your
   36146 `config.gcc' entry instead of creating a host configuration header.
   36147 *Note System Config::.
   36148 
   36149 * Menu:
   36150 
   36151 * Host Common::         Things every host probably needs implemented.
   36152 * Filesystem::          Your host can't have the letter `a' in filenames?
   36153 * Host Misc::           Rare configuration options for hosts.
   36154 
   36155 
   36156 File: gccint.info,  Node: Host Common,  Next: Filesystem,  Up: Host Config
   36157 
   36158 18.1 Host Common
   36159 ================
   36160 
   36161 Some things are just not portable, even between similar operating
   36162 systems, and are too difficult for autoconf to detect.  They get
   36163 implemented using hook functions in the file specified by the
   36164 HOST_HOOK_OBJ variable in `config.gcc'.
   36165 
   36166  -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void)
   36167      This host hook is used to set up handling for extra signals.  The
   36168      most common thing to do in this hook is to detect stack overflow.
   36169 
   36170  -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int
   36171           FD)
   36172      This host hook returns the address of some space that is likely to
   36173      be free in some subsequent invocation of the compiler.  We intend
   36174      to load the PCH data at this address such that the data need not
   36175      be relocated.  The area should be able to hold SIZE bytes.  If the
   36176      host uses `mmap', FD is an open file descriptor that can be used
   36177      for probing.
   36178 
   36179  -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS,
   36180           size_t SIZE, int FD, size_t OFFSET)
   36181      This host hook is called when a PCH file is about to be loaded.
   36182      We want to load SIZE bytes from FD at OFFSET into memory at
   36183      ADDRESS.  The given address will be the result of a previous
   36184      invocation of `HOST_HOOKS_GT_PCH_GET_ADDRESS'.  Return -1 if we
   36185      couldn't allocate SIZE bytes at ADDRESS.  Return 0 if the memory
   36186      is allocated but the data is not loaded.  Return 1 if the hook has
   36187      performed everything.
   36188 
   36189      If the implementation uses reserved address space, free any
   36190      reserved space beyond SIZE, regardless of the return value.  If no
   36191      PCH will be loaded, this hook may be called with SIZE zero, in
   36192      which case all reserved address space should be freed.
   36193 
   36194      Do not try to handle values of ADDRESS that could not have been
   36195      returned by this executable; just return -1.  Such values usually
   36196      indicate an out-of-date PCH file (built by some other GCC
   36197      executable), and such a PCH file won't work.
   36198 
   36199  -- Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void);
   36200      This host hook returns the alignment required for allocating
   36201      virtual memory.  Usually this is the same as getpagesize, but on
   36202      some hosts the alignment for reserving memory differs from the
   36203      pagesize for committing memory.
   36204 
   36205 
   36206 File: gccint.info,  Node: Filesystem,  Next: Host Misc,  Prev: Host Common,  Up: Host Config
   36207 
   36208 18.2 Host Filesystem
   36209 ====================
   36210 
   36211 GCC needs to know a number of things about the semantics of the host
   36212 machine's filesystem.  Filesystems with Unix and MS-DOS semantics are
   36213 automatically detected.  For other systems, you can define the
   36214 following macros in `xm-MACHINE.h'.
   36215 
   36216 `HAVE_DOS_BASED_FILE_SYSTEM'
   36217      This macro is automatically defined by `system.h' if the host file
   36218      system obeys the semantics defined by MS-DOS instead of Unix.  DOS
   36219      file systems are case insensitive, file specifications may begin
   36220      with a drive letter, and both forward slash and backslash (`/' and
   36221      `\') are directory separators.
   36222 
   36223 `DIR_SEPARATOR'
   36224 `DIR_SEPARATOR_2'
   36225      If defined, these macros expand to character constants specifying
   36226      separators for directory names within a file specification.
   36227      `system.h' will automatically give them appropriate values on Unix
   36228      and MS-DOS file systems.  If your file system is neither of these,
   36229      define one or both appropriately in `xm-MACHINE.h'.
   36230 
   36231      However, operating systems like VMS, where constructing a pathname
   36232      is more complicated than just stringing together directory names
   36233      separated by a special character, should not define either of these
   36234      macros.
   36235 
   36236 `PATH_SEPARATOR'
   36237      If defined, this macro should expand to a character constant
   36238      specifying the separator for elements of search paths.  The default
   36239      value is a colon (`:').  DOS-based systems usually, but not
   36240      always, use semicolon (`;').
   36241 
   36242 `VMS'
   36243      Define this macro if the host system is VMS.
   36244 
   36245 `HOST_OBJECT_SUFFIX'
   36246      Define this macro to be a C string representing the suffix for
   36247      object files on your host machine.  If you do not define this
   36248      macro, GCC will use `.o' as the suffix for object files.
   36249 
   36250 `HOST_EXECUTABLE_SUFFIX'
   36251      Define this macro to be a C string representing the suffix for
   36252      executable files on your host machine.  If you do not define this
   36253      macro, GCC will use the null string as the suffix for executable
   36254      files.
   36255 
   36256 `HOST_BIT_BUCKET'
   36257      A pathname defined by the host operating system, which can be
   36258      opened as a file and written to, but all the information written
   36259      is discarded.  This is commonly known as a "bit bucket" or "null
   36260      device".  If you do not define this macro, GCC will use
   36261      `/dev/null' as the bit bucket.  If the host does not support a bit
   36262      bucket, define this macro to an invalid filename.
   36263 
   36264 `UPDATE_PATH_HOST_CANONICALIZE (PATH)'
   36265      If defined, a C statement (sans semicolon) that performs
   36266      host-dependent canonicalization when a path used in a compilation
   36267      driver or preprocessor is canonicalized.  PATH is a malloc-ed path
   36268      to be canonicalized.  If the C statement does canonicalize PATH
   36269      into a different buffer, the old path should be freed and the new
   36270      buffer should have been allocated with malloc.
   36271 
   36272 `DUMPFILE_FORMAT'
   36273      Define this macro to be a C string representing the format to use
   36274      for constructing the index part of debugging dump file names.  The
   36275      resultant string must fit in fifteen bytes.  The full filename
   36276      will be the concatenation of: the prefix of the assembler file
   36277      name, the string resulting from applying this format to an index
   36278      number, and a string unique to each dump file kind, e.g. `rtl'.
   36279 
   36280      If you do not define this macro, GCC will use `.%02d.'.  You should
   36281      define this macro if using the default will create an invalid file
   36282      name.
   36283 
   36284 `DELETE_IF_ORDINARY'
   36285      Define this macro to be a C statement (sans semicolon) that
   36286      performs host-dependent removal of ordinary temp files in the
   36287      compilation driver.
   36288 
   36289      If you do not define this macro, GCC will use the default version.
   36290      You should define this macro if the default version does not
   36291      reliably remove the temp file as, for example, on VMS which allows
   36292      multiple versions of a file.
   36293 
   36294 `HOST_LACKS_INODE_NUMBERS'
   36295      Define this macro if the host filesystem does not report
   36296      meaningful inode numbers in struct stat.
   36297 
   36298 
   36299 File: gccint.info,  Node: Host Misc,  Prev: Filesystem,  Up: Host Config
   36300 
   36301 18.3 Host Misc
   36302 ==============
   36303 
   36304 `FATAL_EXIT_CODE'
   36305      A C expression for the status code to be returned when the compiler
   36306      exits after serious errors.  The default is the system-provided
   36307      macro `EXIT_FAILURE', or `1' if the system doesn't define that
   36308      macro.  Define this macro only if these defaults are incorrect.
   36309 
   36310 `SUCCESS_EXIT_CODE'
   36311      A C expression for the status code to be returned when the compiler
   36312      exits without serious errors.  (Warnings are not serious errors.)
   36313      The default is the system-provided macro `EXIT_SUCCESS', or `0' if
   36314      the system doesn't define that macro.  Define this macro only if
   36315      these defaults are incorrect.
   36316 
   36317 `USE_C_ALLOCA'
   36318      Define this macro if GCC should use the C implementation of
   36319      `alloca' provided by `libiberty.a'.  This only affects how some
   36320      parts of the compiler itself allocate memory.  It does not change
   36321      code generation.
   36322 
   36323      When GCC is built with a compiler other than itself, the C `alloca'
   36324      is always used.  This is because most other implementations have
   36325      serious bugs.  You should define this macro only on a system where
   36326      no stack-based `alloca' can possibly work.  For instance, if a
   36327      system has a small limit on the size of the stack, GCC's builtin
   36328      `alloca' will not work reliably.
   36329 
   36330 `COLLECT2_HOST_INITIALIZATION'
   36331      If defined, a C statement (sans semicolon) that performs
   36332      host-dependent initialization when `collect2' is being initialized.
   36333 
   36334 `GCC_DRIVER_HOST_INITIALIZATION'
   36335      If defined, a C statement (sans semicolon) that performs
   36336      host-dependent initialization when a compilation driver is being
   36337      initialized.
   36338 
   36339 `HOST_LONG_LONG_FORMAT'
   36340      If defined, the string used to indicate an argument of type `long
   36341      long' to functions like `printf'.  The default value is `"ll"'.
   36342 
   36343 `HOST_LONG_FORMAT'
   36344      If defined, the string used to indicate an argument of type `long'
   36345      to functions like `printf'.  The default value is `"l"'.
   36346 
   36347 `HOST_PTR_PRINTF'
   36348      If defined, the string used to indicate an argument of type `void
   36349      *' to functions like `printf'.  The default value is `"%p"'.
   36350 
   36351  In addition, if `configure' generates an incorrect definition of any
   36352 of the macros in `auto-host.h', you can override that definition in a
   36353 host configuration header.  If you need to do this, first see if it is
   36354 possible to fix `configure'.
   36355 
   36356 
   36357 File: gccint.info,  Node: Fragments,  Next: Collect2,  Prev: Host Config,  Up: Top
   36358 
   36359 19 Makefile Fragments
   36360 *********************
   36361 
   36362 When you configure GCC using the `configure' script, it will construct
   36363 the file `Makefile' from the template file `Makefile.in'.  When it does
   36364 this, it can incorporate makefile fragments from the `config'
   36365 directory.  These are used to set Makefile parameters that are not
   36366 amenable to being calculated by autoconf.  The list of fragments to
   36367 incorporate is set by `config.gcc' (and occasionally `config.build' and
   36368 `config.host'); *Note System Config::.
   36369 
   36370  Fragments are named either `t-TARGET' or `x-HOST', depending on
   36371 whether they are relevant to configuring GCC to produce code for a
   36372 particular target, or to configuring GCC to run on a particular host.
   36373 Here TARGET and HOST are mnemonics which usually have some relationship
   36374 to the canonical system name, but no formal connection.
   36375 
   36376  If these files do not exist, it means nothing needs to be added for a
   36377 given target or host.  Most targets need a few `t-TARGET' fragments,
   36378 but needing `x-HOST' fragments is rare.
   36379 
   36380 * Menu:
   36381 
   36382 * Target Fragment:: Writing `t-TARGET' files.
   36383 * Host Fragment::   Writing `x-HOST' files.
   36384 
   36385 
   36386 File: gccint.info,  Node: Target Fragment,  Next: Host Fragment,  Up: Fragments
   36387 
   36388 19.1 Target Makefile Fragments
   36389 ==============================
   36390 
   36391 Target makefile fragments can set these Makefile variables.
   36392 
   36393 `LIBGCC2_CFLAGS'
   36394      Compiler flags to use when compiling `libgcc2.c'.
   36395 
   36396 `LIB2FUNCS_EXTRA'
   36397      A list of source file names to be compiled or assembled and
   36398      inserted into `libgcc.a'.
   36399 
   36400 `Floating Point Emulation'
   36401      To have GCC include software floating point libraries in `libgcc.a'
   36402      define `FPBIT' and `DPBIT' along with a few rules as follows:
   36403           # We want fine grained libraries, so use the new code
   36404           # to build the floating point emulation libraries.
   36405           FPBIT = fp-bit.c
   36406           DPBIT = dp-bit.c
   36407 
   36408 
   36409           fp-bit.c: $(srcdir)/config/fp-bit.c
   36410                   echo '#define FLOAT' > fp-bit.c
   36411                   cat $(srcdir)/config/fp-bit.c >> fp-bit.c
   36412 
   36413           dp-bit.c: $(srcdir)/config/fp-bit.c
   36414                   cat $(srcdir)/config/fp-bit.c > dp-bit.c
   36415 
   36416      You may need to provide additional #defines at the beginning of
   36417      `fp-bit.c' and `dp-bit.c' to control target endianness and other
   36418      options.
   36419 
   36420 `CRTSTUFF_T_CFLAGS'
   36421      Special flags used when compiling `crtstuff.c'.  *Note
   36422      Initialization::.
   36423 
   36424 `CRTSTUFF_T_CFLAGS_S'
   36425      Special flags used when compiling `crtstuff.c' for shared linking.
   36426      Used if you use `crtbeginS.o' and `crtendS.o' in `EXTRA-PARTS'.
   36427      *Note Initialization::.
   36428 
   36429 `MULTILIB_OPTIONS'
   36430      For some targets, invoking GCC in different ways produces objects
   36431      that can not be linked together.  For example, for some targets GCC
   36432      produces both big and little endian code.  For these targets, you
   36433      must arrange for multiple versions of `libgcc.a' to be compiled,
   36434      one for each set of incompatible options.  When GCC invokes the
   36435      linker, it arranges to link in the right version of `libgcc.a',
   36436      based on the command line options used.
   36437 
   36438      The `MULTILIB_OPTIONS' macro lists the set of options for which
   36439      special versions of `libgcc.a' must be built.  Write options that
   36440      are mutually incompatible side by side, separated by a slash.
   36441      Write options that may be used together separated by a space.  The
   36442      build procedure will build all combinations of compatible options.
   36443 
   36444      For example, if you set `MULTILIB_OPTIONS' to `m68000/m68020
   36445      msoft-float', `Makefile' will build special versions of `libgcc.a'
   36446      using the following sets of options:  `-m68000', `-m68020',
   36447      `-msoft-float', `-m68000 -msoft-float', and `-m68020 -msoft-float'.
   36448 
   36449 `MULTILIB_DIRNAMES'
   36450      If `MULTILIB_OPTIONS' is used, this variable specifies the
   36451      directory names that should be used to hold the various libraries.
   36452      Write one element in `MULTILIB_DIRNAMES' for each element in
   36453      `MULTILIB_OPTIONS'.  If `MULTILIB_DIRNAMES' is not used, the
   36454      default value will be `MULTILIB_OPTIONS', with all slashes treated
   36455      as spaces.
   36456 
   36457      For example, if `MULTILIB_OPTIONS' is set to `m68000/m68020
   36458      msoft-float', then the default value of `MULTILIB_DIRNAMES' is
   36459      `m68000 m68020 msoft-float'.  You may specify a different value if
   36460      you desire a different set of directory names.
   36461 
   36462 `MULTILIB_MATCHES'
   36463      Sometimes the same option may be written in two different ways.
   36464      If an option is listed in `MULTILIB_OPTIONS', GCC needs to know
   36465      about any synonyms.  In that case, set `MULTILIB_MATCHES' to a
   36466      list of items of the form `option=option' to describe all relevant
   36467      synonyms.  For example, `m68000=mc68000 m68020=mc68020'.
   36468 
   36469 `MULTILIB_EXCEPTIONS'
   36470      Sometimes when there are multiple sets of `MULTILIB_OPTIONS' being
   36471      specified, there are combinations that should not be built.  In
   36472      that case, set `MULTILIB_EXCEPTIONS' to be all of the switch
   36473      exceptions in shell case syntax that should not be built.
   36474 
   36475      For example the ARM processor cannot execute both hardware floating
   36476      point instructions and the reduced size THUMB instructions at the
   36477      same time, so there is no need to build libraries with both of
   36478      these options enabled.  Therefore `MULTILIB_EXCEPTIONS' is set to:
   36479           *mthumb/*mhard-float*
   36480 
   36481 `MULTILIB_EXTRA_OPTS'
   36482      Sometimes it is desirable that when building multiple versions of
   36483      `libgcc.a' certain options should always be passed on to the
   36484      compiler.  In that case, set `MULTILIB_EXTRA_OPTS' to be the list
   36485      of options to be used for all builds.  If you set this, you should
   36486      probably set `CRTSTUFF_T_CFLAGS' to a dash followed by it.
   36487 
   36488 `NATIVE_SYSTEM_HEADER_DIR'
   36489      If the default location for system headers is not `/usr/include',
   36490      you must set this to the directory containing the headers.  This
   36491      value should match the value of the `SYSTEM_INCLUDE_DIR' macro.
   36492 
   36493 `SPECS'
   36494      Unfortunately, setting `MULTILIB_EXTRA_OPTS' is not enough, since
   36495      it does not affect the build of target libraries, at least not the
   36496      build of the default multilib.  One possible work-around is to use
   36497      `DRIVER_SELF_SPECS' to bring options from the `specs' file as if
   36498      they had been passed in the compiler driver command line.
   36499      However, you don't want to be adding these options after the
   36500      toolchain is installed, so you can instead tweak the `specs' file
   36501      that will be used during the toolchain build, while you still
   36502      install the original, built-in `specs'.  The trick is to set
   36503      `SPECS' to some other filename (say `specs.install'), that will
   36504      then be created out of the built-in specs, and introduce a
   36505      `Makefile' rule to generate the `specs' file that's going to be
   36506      used at build time out of your `specs.install'.
   36507 
   36508 `T_CFLAGS'
   36509      These are extra flags to pass to the C compiler.  They are used
   36510      both when building GCC, and when compiling things with the
   36511      just-built GCC.  This variable is deprecated and should not be
   36512      used.
   36513 
   36514 
   36515 File: gccint.info,  Node: Host Fragment,  Prev: Target Fragment,  Up: Fragments
   36516 
   36517 19.2 Host Makefile Fragments
   36518 ============================
   36519 
   36520 The use of `x-HOST' fragments is discouraged.  You should only use it
   36521 for makefile dependencies.
   36522 
   36523 
   36524 File: gccint.info,  Node: Collect2,  Next: Header Dirs,  Prev: Fragments,  Up: Top
   36525 
   36526 20 `collect2'
   36527 *************
   36528 
   36529 GCC uses a utility called `collect2' on nearly all systems to arrange
   36530 to call various initialization functions at start time.
   36531 
   36532  The program `collect2' works by linking the program once and looking
   36533 through the linker output file for symbols with particular names
   36534 indicating they are constructor functions.  If it finds any, it creates
   36535 a new temporary `.c' file containing a table of them, compiles it, and
   36536 links the program a second time including that file.
   36537 
   36538  The actual calls to the constructors are carried out by a subroutine
   36539 called `__main', which is called (automatically) at the beginning of
   36540 the body of `main' (provided `main' was compiled with GNU CC).  Calling
   36541 `__main' is necessary, even when compiling C code, to allow linking C
   36542 and C++ object code together.  (If you use `-nostdlib', you get an
   36543 unresolved reference to `__main', since it's defined in the standard
   36544 GCC library.  Include `-lgcc' at the end of your compiler command line
   36545 to resolve this reference.)
   36546 
   36547  The program `collect2' is installed as `ld' in the directory where the
   36548 passes of the compiler are installed.  When `collect2' needs to find
   36549 the _real_ `ld', it tries the following file names:
   36550 
   36551    * a hard coded linker file name, if GCC was configured with the
   36552      `--with-ld' option.
   36553 
   36554    * `real-ld' in the directories listed in the compiler's search
   36555      directories.
   36556 
   36557    * `real-ld' in the directories listed in the environment variable
   36558      `PATH'.
   36559 
   36560    * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
   36561      if specified.
   36562 
   36563    * `ld' in the compiler's search directories, except that `collect2'
   36564      will not execute itself recursively.
   36565 
   36566    * `ld' in `PATH'.
   36567 
   36568  "The compiler's search directories" means all the directories where
   36569 `gcc' searches for passes of the compiler.  This includes directories
   36570 that you specify with `-B'.
   36571 
   36572  Cross-compilers search a little differently:
   36573 
   36574    * `real-ld' in the compiler's search directories.
   36575 
   36576    * `TARGET-real-ld' in `PATH'.
   36577 
   36578    * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
   36579      if specified.
   36580 
   36581    * `ld' in the compiler's search directories.
   36582 
   36583    * `TARGET-ld' in `PATH'.
   36584 
   36585  `collect2' explicitly avoids running `ld' using the file name under
   36586 which `collect2' itself was invoked.  In fact, it remembers up a list
   36587 of such names--in case one copy of `collect2' finds another copy (or
   36588 version) of `collect2' installed as `ld' in a second place in the
   36589 search path.
   36590 
   36591  `collect2' searches for the utilities `nm' and `strip' using the same
   36592 algorithm as above for `ld'.
   36593 
   36594 
   36595 File: gccint.info,  Node: Header Dirs,  Next: Type Information,  Prev: Collect2,  Up: Top
   36596 
   36597 21 Standard Header File Directories
   36598 ***********************************
   36599 
   36600 `GCC_INCLUDE_DIR' means the same thing for native and cross.  It is
   36601 where GCC stores its private include files, and also where GCC stores
   36602 the fixed include files.  A cross compiled GCC runs `fixincludes' on
   36603 the header files in `$(tooldir)/include'.  (If the cross compilation
   36604 header files need to be fixed, they must be installed before GCC is
   36605 built.  If the cross compilation header files are already suitable for
   36606 GCC, nothing special need be done).
   36607 
   36608  `GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross.  It
   36609 is where `g++' looks first for header files.  The C++ library installs
   36610 only target independent header files in that directory.
   36611 
   36612  `LOCAL_INCLUDE_DIR' is used only by native compilers.  GCC doesn't
   36613 install anything there.  It is normally `/usr/local/include'.  This is
   36614 where local additions to a packaged system should place header files.
   36615 
   36616  `CROSS_INCLUDE_DIR' is used only by cross compilers.  GCC doesn't
   36617 install anything there.
   36618 
   36619  `TOOL_INCLUDE_DIR' is used for both native and cross compilers.  It is
   36620 the place for other packages to install header files that GCC will use.
   36621 For a cross-compiler, this is the equivalent of `/usr/include'.  When
   36622 you build a cross-compiler, `fixincludes' processes any header files in
   36623 this directory.
   36624 
   36625 
   36626 File: gccint.info,  Node: Type Information,  Next: Plugins,  Prev: Header Dirs,  Up: Top
   36627 
   36628 22 Memory Management and Type Information
   36629 *****************************************
   36630 
   36631 GCC uses some fairly sophisticated memory management techniques, which
   36632 involve determining information about GCC's data structures from GCC's
   36633 source code and using this information to perform garbage collection and
   36634 implement precompiled headers.
   36635 
   36636  A full C parser would be too complicated for this task, so a limited
   36637 subset of C is interpreted and special markers are used to determine
   36638 what parts of the source to look at.  All `struct' and `union'
   36639 declarations that define data structures that are allocated under
   36640 control of the garbage collector must be marked.  All global variables
   36641 that hold pointers to garbage-collected memory must also be marked.
   36642 Finally, all global variables that need to be saved and restored by a
   36643 precompiled header must be marked.  (The precompiled header mechanism
   36644 can only save static variables if they're scalar.  Complex data
   36645 structures must be allocated in garbage-collected memory to be saved in
   36646 a precompiled header.)
   36647 
   36648  The full format of a marker is
   36649      GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...))
   36650  but in most cases no options are needed.  The outer double parentheses
   36651 are still necessary, though: `GTY(())'.  Markers can appear:
   36652 
   36653    * In a structure definition, before the open brace;
   36654 
   36655    * In a global variable declaration, after the keyword `static' or
   36656      `extern'; and
   36657 
   36658    * In a structure field definition, before the name of the field.
   36659 
   36660  Here are some examples of marking simple data structures and globals.
   36661 
   36662      struct GTY(()) TAG
   36663      {
   36664        FIELDS...
   36665      };
   36666 
   36667      typedef struct GTY(()) TAG
   36668      {
   36669        FIELDS...
   36670      } *TYPENAME;
   36671 
   36672      static GTY(()) struct TAG *LIST;   /* points to GC memory */
   36673      static GTY(()) int COUNTER;        /* save counter in a PCH */
   36674 
   36675  The parser understands simple typedefs such as `typedef struct TAG
   36676 *NAME;' and `typedef int NAME;'.  These don't need to be marked.
   36677 
   36678 * Menu:
   36679 
   36680 * GTY Options::         What goes inside a `GTY(())'.
   36681 * GGC Roots::           Making global variables GGC roots.
   36682 * Files::               How the generated files work.
   36683 * Invoking the garbage collector::   How to invoke the garbage collector.
   36684 * Troubleshooting::     When something does not work as expected.
   36685 
   36686 
   36687 File: gccint.info,  Node: GTY Options,  Next: GGC Roots,  Up: Type Information
   36688 
   36689 22.1 The Inside of a `GTY(())'
   36690 ==============================
   36691 
   36692 Sometimes the C code is not enough to fully describe the type
   36693 structure.  Extra information can be provided with `GTY' options and
   36694 additional markers.  Some options take a parameter, which may be either
   36695 a string or a type name, depending on the parameter.  If an option
   36696 takes no parameter, it is acceptable either to omit the parameter
   36697 entirely, or to provide an empty string as a parameter.  For example,
   36698 `GTY ((skip))' and `GTY ((skip ("")))' are equivalent.
   36699 
   36700  When the parameter is a string, often it is a fragment of C code.  Four
   36701 special escapes may be used in these strings, to refer to pieces of the
   36702 data structure being marked:
   36703 
   36704 `%h'
   36705      The current structure.
   36706 
   36707 `%1'
   36708      The structure that immediately contains the current structure.
   36709 
   36710 `%0'
   36711      The outermost structure that contains the current structure.
   36712 
   36713 `%a'
   36714      A partial expression of the form `[i1][i2]...' that indexes the
   36715      array item currently being marked.
   36716 
   36717  For instance, suppose that you have a structure of the form
   36718      struct A {
   36719        ...
   36720      };
   36721      struct B {
   36722        struct A foo[12];
   36723      };
   36724  and `b' is a variable of type `struct B'.  When marking `b.foo[11]',
   36725 `%h' would expand to `b.foo[11]', `%0' and `%1' would both expand to
   36726 `b', and `%a' would expand to `[11]'.
   36727 
   36728  As in ordinary C, adjacent strings will be concatenated; this is
   36729 helpful when you have a complicated expression.
   36730      GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE"
   36731                        " ? TYPE_NEXT_VARIANT (&%h.generic)"
   36732                        " : TREE_CHAIN (&%h.generic)")))
   36733 
   36734  The available options are:
   36735 
   36736 `length ("EXPRESSION")'
   36737      There are two places the type machinery will need to be explicitly
   36738      told the length of an array.  The first case is when a structure
   36739      ends in a variable-length array, like this:
   36740           struct GTY(()) rtvec_def {
   36741             int num_elem;         /* number of elements */
   36742             rtx GTY ((length ("%h.num_elem"))) elem[1];
   36743           };
   36744 
   36745      In this case, the `length' option is used to override the specified
   36746      array length (which should usually be `1').  The parameter of the
   36747      option is a fragment of C code that calculates the length.
   36748 
   36749      The second case is when a structure or a global variable contains a
   36750      pointer to an array, like this:
   36751           struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter;
   36752      In this case, `iter' has been allocated by writing something like
   36753             x->iter = ggc_alloc_cleared_vec_gimple_omp_for_iter (collapse);
   36754      and the `collapse' provides the length of the field.
   36755 
   36756      This second use of `length' also works on global variables, like: static GTY((length("reg_known_value_size"))) rtx *reg_known_value;
   36757 
   36758 `skip'
   36759      If `skip' is applied to a field, the type machinery will ignore it.
   36760      This is somewhat dangerous; the only safe use is in a union when
   36761      one field really isn't ever used.
   36762 
   36763 `desc ("EXPRESSION")'
   36764 `tag ("CONSTANT")'
   36765 `default'
   36766      The type machinery needs to be told which field of a `union' is
   36767      currently active.  This is done by giving each field a constant
   36768      `tag' value, and then specifying a discriminator using `desc'.
   36769      The value of the expression given by `desc' is compared against
   36770      each `tag' value, each of which should be different.  If no `tag'
   36771      is matched, the field marked with `default' is used if there is
   36772      one, otherwise no field in the union will be marked.
   36773 
   36774      In the `desc' option, the "current structure" is the union that it
   36775      discriminates.  Use `%1' to mean the structure containing it.
   36776      There are no escapes available to the `tag' option, since it is a
   36777      constant.
   36778 
   36779      For example,
   36780           struct GTY(()) tree_binding
   36781           {
   36782             struct tree_common common;
   36783             union tree_binding_u {
   36784               tree GTY ((tag ("0"))) scope;
   36785               struct cp_binding_level * GTY ((tag ("1"))) level;
   36786             } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope;
   36787             tree value;
   36788           };
   36789 
   36790      In this example, the value of BINDING_HAS_LEVEL_P when applied to a
   36791      `struct tree_binding *' is presumed to be 0 or 1.  If 1, the type
   36792      mechanism will treat the field `level' as being present and if 0,
   36793      will treat the field `scope' as being present.
   36794 
   36795 `param_is (TYPE)'
   36796 `use_param'
   36797      Sometimes it's convenient to define some data structure to work on
   36798      generic pointers (that is, `PTR') and then use it with a specific
   36799      type.  `param_is' specifies the real type pointed to, and
   36800      `use_param' says where in the generic data structure that type
   36801      should be put.
   36802 
   36803      For instance, to have a `htab_t' that points to trees, one would
   36804      write the definition of `htab_t' like this:
   36805           typedef struct GTY(()) {
   36806             ...
   36807             void ** GTY ((use_param, ...)) entries;
   36808             ...
   36809           } htab_t;
   36810      and then declare variables like this:
   36811             static htab_t GTY ((param_is (union tree_node))) ict;
   36812 
   36813 `paramN_is (TYPE)'
   36814 `use_paramN'
   36815      In more complicated cases, the data structure might need to work on
   36816      several different types, which might not necessarily all be
   36817      pointers.  For this, `param1_is' through `param9_is' may be used to
   36818      specify the real type of a field identified by `use_param1' through
   36819      `use_param9'.
   36820 
   36821 `use_params'
   36822      When a structure contains another structure that is parameterized,
   36823      there's no need to do anything special, the inner structure
   36824      inherits the parameters of the outer one.  When a structure
   36825      contains a pointer to a parameterized structure, the type
   36826      machinery won't automatically detect this (it could, it just
   36827      doesn't yet), so it's necessary to tell it that the pointed-to
   36828      structure should use the same parameters as the outer structure.
   36829      This is done by marking the pointer with the `use_params' option.
   36830 
   36831 `deletable'
   36832      `deletable', when applied to a global variable, indicates that when
   36833      garbage collection runs, there's no need to mark anything pointed
   36834      to by this variable, it can just be set to `NULL' instead.  This
   36835      is used to keep a list of free structures around for re-use.
   36836 
   36837 `if_marked ("EXPRESSION")'
   36838      Suppose you want some kinds of object to be unique, and so you put
   36839      them in a hash table.  If garbage collection marks the hash table,
   36840      these objects will never be freed, even if the last other
   36841      reference to them goes away.  GGC has special handling to deal
   36842      with this: if you use the `if_marked' option on a global hash
   36843      table, GGC will call the routine whose name is the parameter to
   36844      the option on each hash table entry.  If the routine returns
   36845      nonzero, the hash table entry will be marked as usual.  If the
   36846      routine returns zero, the hash table entry will be deleted.
   36847 
   36848      The routine `ggc_marked_p' can be used to determine if an element
   36849      has been marked already; in fact, the usual case is to use
   36850      `if_marked ("ggc_marked_p")'.
   36851 
   36852 `mark_hook ("HOOK-ROUTINE-NAME")'
   36853      If provided for a structure or union type, the given
   36854      HOOK-ROUTINE-NAME (between double-quotes) is the name of a routine
   36855      called when the garbage collector has just marked the data as
   36856      reachable. This routine should not change the data, or call any ggc
   36857      routine. Its only argument is a pointer to the just marked (const)
   36858      structure or union.
   36859 
   36860 `maybe_undef'
   36861      When applied to a field, `maybe_undef' indicates that it's OK if
   36862      the structure that this fields points to is never defined, so long
   36863      as this field is always `NULL'.  This is used to avoid requiring
   36864      backends to define certain optional structures.  It doesn't work
   36865      with language frontends.
   36866 
   36867 `nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")'
   36868      The type machinery expects all pointers to point to the start of an
   36869      object.  Sometimes for abstraction purposes it's convenient to have
   36870      a pointer which points inside an object.  So long as it's possible
   36871      to convert the original object to and from the pointer, such
   36872      pointers can still be used.  TYPE is the type of the original
   36873      object, the TO EXPRESSION returns the pointer given the original
   36874      object, and the FROM EXPRESSION returns the original object given
   36875      the pointer.  The pointer will be available using the `%h' escape.
   36876 
   36877 `chain_next ("EXPRESSION")'
   36878 `chain_prev ("EXPRESSION")'
   36879 `chain_circular ("EXPRESSION")'
   36880      It's helpful for the type machinery to know if objects are often
   36881      chained together in long lists; this lets it generate code that
   36882      uses less stack space by iterating along the list instead of
   36883      recursing down it.  `chain_next' is an expression for the next
   36884      item in the list, `chain_prev' is an expression for the previous
   36885      item.  For singly linked lists, use only `chain_next'; for doubly
   36886      linked lists, use both.  The machinery requires that taking the
   36887      next item of the previous item gives the original item.
   36888      `chain_circular' is similar to `chain_next', but can be used for
   36889      circular single linked lists.
   36890 
   36891 `reorder ("FUNCTION NAME")'
   36892      Some data structures depend on the relative ordering of pointers.
   36893      If the precompiled header machinery needs to change that ordering,
   36894      it will call the function referenced by the `reorder' option,
   36895      before changing the pointers in the object that's pointed to by
   36896      the field the option applies to.  The function must take four
   36897      arguments, with the signature
   36898      `void *, void *, gt_pointer_operator, void *'.  The first
   36899      parameter is a pointer to the structure that contains the object
   36900      being updated, or the object itself if there is no containing
   36901      structure.  The second parameter is a cookie that should be
   36902      ignored.  The third parameter is a routine that, given a pointer,
   36903      will update it to its correct new value.  The fourth parameter is
   36904      a cookie that must be passed to the second parameter.
   36905 
   36906      PCH cannot handle data structures that depend on the absolute
   36907      values of pointers.  `reorder' functions can be expensive.  When
   36908      possible, it is better to depend on properties of the data, like
   36909      an ID number or the hash of a string instead.
   36910 
   36911 `variable_size'
   36912      The type machinery expects the types to be of constant size.  When
   36913      this is not true, for example, with structs that have array fields
   36914      or unions, the type machinery cannot tell how many bytes need to
   36915      be allocated at each allocation.  The `variable_size' is used to
   36916      mark such types.  The type machinery then provides allocators that
   36917      take a parameter indicating an exact size of object being
   36918      allocated.  Note that the size must be provided in bytes whereas
   36919      the `length' option works with array lengths in number of elements.
   36920 
   36921      For example,
   36922           struct GTY((variable_size)) sorted_fields_type {
   36923             int len;
   36924             tree GTY((length ("%h.len"))) elts[1];
   36925           };
   36926 
   36927      Then the objects of `struct sorted_fields_type' are allocated in GC
   36928      memory as follows:
   36929             field_vec = ggc_alloc_sorted_fields_type (size);
   36930 
   36931      If FIELD_VEC->ELTS stores N elements, then SIZE could be
   36932      calculated as follows:
   36933             size_t size = sizeof (struct sorted_fields_type) + n * sizeof (tree);
   36934 
   36935 `special ("NAME")'
   36936      The `special' option is used to mark types that have to be dealt
   36937      with by special case machinery.  The parameter is the name of the
   36938      special case.  See `gengtype.c' for further details.  Avoid adding
   36939      new special cases unless there is no other alternative.
   36940 
   36941 
   36942 File: gccint.info,  Node: GGC Roots,  Next: Files,  Prev: GTY Options,  Up: Type Information
   36943 
   36944 22.2 Marking Roots for the Garbage Collector
   36945 ============================================
   36946 
   36947 In addition to keeping track of types, the type machinery also locates
   36948 the global variables ("roots") that the garbage collector starts at.
   36949 Roots must be declared using one of the following syntaxes:
   36950 
   36951    * `extern GTY(([OPTIONS])) TYPE NAME;'
   36952 
   36953    * `static GTY(([OPTIONS])) TYPE NAME;'
   36954  The syntax
   36955    * `GTY(([OPTIONS])) TYPE NAME;'
   36956  is _not_ accepted.  There should be an `extern' declaration of such a
   36957 variable in a header somewhere--mark that, not the definition.  Or, if
   36958 the variable is only used in one file, make it `static'.
   36959 
   36960 
   36961 File: gccint.info,  Node: Files,  Next: Invoking the garbage collector,  Prev: GGC Roots,  Up: Type Information
   36962 
   36963 22.3 Source Files Containing Type Information
   36964 =============================================
   36965 
   36966 Whenever you add `GTY' markers to a source file that previously had
   36967 none, or create a new source file containing `GTY' markers, there are
   36968 three things you need to do:
   36969 
   36970   1. You need to add the file to the list of source files the type
   36971      machinery scans.  There are four cases:
   36972 
   36973        a. For a back-end file, this is usually done automatically; if
   36974           not, you should add it to `target_gtfiles' in the appropriate
   36975           port's entries in `config.gcc'.
   36976 
   36977        b. For files shared by all front ends, add the filename to the
   36978           `GTFILES' variable in `Makefile.in'.
   36979 
   36980        c. For files that are part of one front end, add the filename to
   36981           the `gtfiles' variable defined in the appropriate
   36982           `config-lang.in'.  For C, the file is `c-config-lang.in'.
   36983           Headers should appear before non-headers in this list.
   36984 
   36985        d. For files that are part of some but not all front ends, add
   36986           the filename to the `gtfiles' variable of _all_ the front ends
   36987           that use it.
   36988 
   36989   2. If the file was a header file, you'll need to check that it's
   36990      included in the right place to be visible to the generated files.
   36991      For a back-end header file, this should be done automatically.
   36992      For a front-end header file, it needs to be included by the same
   36993      file that includes `gtype-LANG.h'.  For other header files, it
   36994      needs to be included in `gtype-desc.c', which is a generated file,
   36995      so add it to `ifiles' in `open_base_file' in `gengtype.c'.
   36996 
   36997      For source files that aren't header files, the machinery will
   36998      generate a header file that should be included in the source file
   36999      you just changed.  The file will be called `gt-PATH.h' where PATH
   37000      is the pathname relative to the `gcc' directory with slashes
   37001      replaced by -, so for example the header file to be included in
   37002      `cp/parser.c' is called `gt-cp-parser.c'.  The generated header
   37003      file should be included after everything else in the source file.
   37004      Don't forget to mention this file as a dependency in the
   37005      `Makefile'!
   37006 
   37007 
   37008  For language frontends, there is another file that needs to be included
   37009 somewhere.  It will be called `gtype-LANG.h', where LANG is the name of
   37010 the subdirectory the language is contained in.
   37011 
   37012  Plugins can add additional root tables.  Run the `gengtype' utility in
   37013 plugin mode as `gengtype -P pluginout.h SOURCE-DIR FILE-LIST PLUGIN*.C'
   37014 with your plugin files PLUGIN*.C using `GTY' to generate the
   37015 PLUGINOUT.H file.  The GCC build tree is needed to be present in that
   37016 mode.
   37017 
   37018 
   37019 File: gccint.info,  Node: Invoking the garbage collector,  Next: Troubleshooting,  Prev: Files,  Up: Type Information
   37020 
   37021 22.4 How to invoke the garbage collector
   37022 ========================================
   37023 
   37024 The GCC garbage collector GGC is only invoked explicitly. In contrast
   37025 with many other garbage collectors, it is not implicitly invoked by
   37026 allocation routines when a lot of memory has been consumed. So the only
   37027 way to have GGC reclaim storage it to call the `ggc_collect' function
   37028 explicitly.  This call is an expensive operation, as it may have to
   37029 scan the entire heap.  Beware that local variables (on the GCC call
   37030 stack) are not followed by such an invocation (as many other garbage
   37031 collectors do): you should reference all your data from static or
   37032 external `GTY'-ed variables, and it is advised to call `ggc_collect'
   37033 with a shallow call stack.  The GGC is an exact mark and sweep garbage
   37034 collector (so it does not scan the call stack for pointers).  In
   37035 practice GCC passes don't often call `ggc_collect' themselves, because
   37036 it is called by the pass manager between passes.
   37037 
   37038  At the time of the `ggc_collect' call all pointers in the GC-marked
   37039 structures must be valid or `NULL'.  In practice this means that there
   37040 should not be uninitialized pointer fields in the structures even if
   37041 your code never reads or writes those fields at a particular instance.
   37042 One way to ensure this is to use cleared versions of allocators unless
   37043 all the fields are initialized manually immediately after allocation.
   37044 
   37045 
   37046 File: gccint.info,  Node: Troubleshooting,  Prev: Invoking the garbage collector,  Up: Type Information
   37047 
   37048 22.5 Troubleshooting the garbage collector
   37049 ==========================================
   37050 
   37051 With the current garbage collector implementation, most issues should
   37052 show up as GCC compilation errors.  Some of the most commonly
   37053 encountered issues are described below.
   37054 
   37055    * Gengtype does not produce allocators for a `GTY'-marked type.
   37056      Gengtype checks if there is at least one possible path from GC
   37057      roots to at least one instance of each type before outputting
   37058      allocators.  If there is no such path, the `GTY' markers will be
   37059      ignored and no allocators will be output.  Solve this by making
   37060      sure that there exists at least one such path.  If creating it is
   37061      unfeasible or raises a "code smell", consider if you really must
   37062      use GC for allocating such type.
   37063 
   37064    * Link-time errors about undefined `gt_ggc_r_foo_bar' and
   37065      similarly-named symbols.  Check if your `foo_bar' source file has
   37066      `#include "gt-foo_bar.h"' as its very last line.
   37067 
   37068 
   37069 
   37070 File: gccint.info,  Node: Plugins,  Next: LTO,  Prev: Type Information,  Up: Top
   37071 
   37072 23 Plugins
   37073 **********
   37074 
   37075 23.1 Loading Plugins
   37076 ====================
   37077 
   37078 Plugins are supported on platforms that support `-ldl -rdynamic'.  They
   37079 are loaded by the compiler using `dlopen' and invoked at pre-determined
   37080 locations in the compilation process.
   37081 
   37082  Plugins are loaded with
   37083 
   37084  `-fplugin=/path/to/NAME.so' `-fplugin-arg-NAME-KEY1[=VALUE1]'
   37085 
   37086  The plugin arguments are parsed by GCC and passed to respective
   37087 plugins as key-value pairs. Multiple plugins can be invoked by
   37088 specifying multiple `-fplugin' arguments.
   37089 
   37090  A plugin can be simply given by its short name (no dots or slashes).
   37091 When simply passing `-fplugin=NAME', the plugin is loaded from the
   37092 `plugin' directory, so `-fplugin=NAME' is the same as `-fplugin=`gcc
   37093 -print-file-name=plugin`/NAME.so', using backquote shell syntax to
   37094 query the `plugin' directory.
   37095 
   37096 23.2 Plugin API
   37097 ===============
   37098 
   37099 Plugins are activated by the compiler at specific events as defined in
   37100 `gcc-plugin.h'.  For each event of interest, the plugin should call
   37101 `register_callback' specifying the name of the event and address of the
   37102 callback function that will handle that event.
   37103 
   37104  The header `gcc-plugin.h' must be the first gcc header to be included.
   37105 
   37106 23.2.1 Plugin license check
   37107 ---------------------------
   37108 
   37109 Every plugin should define the global symbol `plugin_is_GPL_compatible'
   37110 to assert that it has been licensed under a GPL-compatible license.  If
   37111 this symbol does not exist, the compiler will emit a fatal error and
   37112 exit with the error message:
   37113 
   37114      fatal error: plugin NAME is not licensed under a GPL-compatible license
   37115      NAME: undefined symbol: plugin_is_GPL_compatible
   37116      compilation terminated
   37117 
   37118  The declared type of the symbol should be int, to match a forward
   37119 declaration in `gcc-plugin.h' that suppresses C++ mangling.  It does
   37120 not need to be in any allocated section, though.  The compiler merely
   37121 asserts that the symbol exists in the global scope.  Something like
   37122 this is enough:
   37123 
   37124      int plugin_is_GPL_compatible;
   37125 
   37126 23.2.2 Plugin initialization
   37127 ----------------------------
   37128 
   37129 Every plugin should export a function called `plugin_init' that is
   37130 called right after the plugin is loaded. This function is responsible
   37131 for registering all the callbacks required by the plugin and do any
   37132 other required initialization.
   37133 
   37134  This function is called from `compile_file' right before invoking the
   37135 parser.  The arguments to `plugin_init' are:
   37136 
   37137    * `plugin_info': Plugin invocation information.
   37138 
   37139    * `version': GCC version.
   37140 
   37141  The `plugin_info' struct is defined as follows:
   37142 
   37143      struct plugin_name_args
   37144      {
   37145        char *base_name;              /* Short name of the plugin
   37146                                         (filename without .so suffix). */
   37147        const char *full_name;        /* Path to the plugin as specified with
   37148                                         -fplugin=. */
   37149        int argc;                     /* Number of arguments specified with
   37150                                         -fplugin-arg-.... */
   37151        struct plugin_argument *argv; /* Array of ARGC key-value pairs. */
   37152        const char *version;          /* Version string provided by plugin. */
   37153        const char *help;             /* Help string provided by plugin. */
   37154      }
   37155 
   37156  If initialization fails, `plugin_init' must return a non-zero value.
   37157 Otherwise, it should return 0.
   37158 
   37159  The version of the GCC compiler loading the plugin is described by the
   37160 following structure:
   37161 
   37162      struct plugin_gcc_version
   37163      {
   37164        const char *basever;
   37165        const char *datestamp;
   37166        const char *devphase;
   37167        const char *revision;
   37168        const char *configuration_arguments;
   37169      };
   37170 
   37171  The function `plugin_default_version_check' takes two pointers to such
   37172 structure and compare them field by field. It can be used by the
   37173 plugin's `plugin_init' function.
   37174 
   37175  The version of GCC used to compile the plugin can be found in the
   37176 symbol `gcc_version' defined in the header `plugin-version.h'. The
   37177 recommended version check to perform looks like
   37178 
   37179      #include "plugin-version.h"
   37180      ...
   37181 
   37182      int
   37183      plugin_init (struct plugin_name_args *plugin_info,
   37184                   struct plugin_gcc_version *version)
   37185      {
   37186        if (!plugin_default_version_check (version, &gcc_version))
   37187          return 1;
   37188 
   37189      }
   37190 
   37191  but you can also check the individual fields if you want a less strict
   37192 check.
   37193 
   37194 23.2.3 Plugin callbacks
   37195 -----------------------
   37196 
   37197 Callback functions have the following prototype:
   37198 
   37199      /* The prototype for a plugin callback function.
   37200           gcc_data  - event-specific data provided by GCC
   37201           user_data - plugin-specific data provided by the plug-in.  */
   37202      typedef void (*plugin_callback_func)(void *gcc_data, void *user_data);
   37203 
   37204  Callbacks can be invoked at the following pre-determined events:
   37205 
   37206      enum plugin_event
   37207      {
   37208        PLUGIN_PASS_MANAGER_SETUP,    /* To hook into pass manager.  */
   37209        PLUGIN_FINISH_TYPE,           /* After finishing parsing a type.  */
   37210        PLUGIN_FINISH_UNIT,           /* Useful for summary processing.  */
   37211        PLUGIN_PRE_GENERICIZE,        /* Allows to see low level AST in C and C++ frontends.  */
   37212        PLUGIN_FINISH,                /* Called before GCC exits.  */
   37213        PLUGIN_INFO,                  /* Information about the plugin. */
   37214        PLUGIN_GGC_START,             /* Called at start of GCC Garbage Collection. */
   37215        PLUGIN_GGC_MARKING,           /* Extend the GGC marking. */
   37216        PLUGIN_GGC_END,               /* Called at end of GGC. */
   37217        PLUGIN_REGISTER_GGC_ROOTS,    /* Register an extra GGC root table. */
   37218        PLUGIN_REGISTER_GGC_CACHES,   /* Register an extra GGC cache table. */
   37219        PLUGIN_ATTRIBUTES,            /* Called during attribute registration */
   37220        PLUGIN_START_UNIT,            /* Called before processing a translation unit.  */
   37221        PLUGIN_PRAGMAS,               /* Called during pragma registration. */
   37222        /* Called before first pass from all_passes.  */
   37223        PLUGIN_ALL_PASSES_START,
   37224        /* Called after last pass from all_passes.  */
   37225        PLUGIN_ALL_PASSES_END,
   37226        /* Called before first ipa pass.  */
   37227        PLUGIN_ALL_IPA_PASSES_START,
   37228        /* Called after last ipa pass.  */
   37229        PLUGIN_ALL_IPA_PASSES_END,
   37230        /* Allows to override pass gate decision for current_pass.  */
   37231        PLUGIN_OVERRIDE_GATE,
   37232        /* Called before executing a pass.  */
   37233        PLUGIN_PASS_EXECUTION,
   37234        /* Called before executing subpasses of a GIMPLE_PASS in
   37235           execute_ipa_pass_list.  */
   37236        PLUGIN_EARLY_GIMPLE_PASSES_START,
   37237        /* Called after executing subpasses of a GIMPLE_PASS in
   37238           execute_ipa_pass_list.  */
   37239        PLUGIN_EARLY_GIMPLE_PASSES_END,
   37240        /* Called when a pass is first instantiated.  */
   37241        PLUGIN_NEW_PASS,
   37242 
   37243        PLUGIN_EVENT_FIRST_DYNAMIC    /* Dummy event used for indexing callback
   37244                                         array.  */
   37245      };
   37246 
   37247  In addition, plugins can also look up the enumerator of a named event,
   37248 and / or generate new events dynamically, by calling the function
   37249 `get_named_event_id'.
   37250 
   37251  To register a callback, the plugin calls `register_callback' with the
   37252 arguments:
   37253 
   37254    * `char *name': Plugin name.
   37255 
   37256    * `int event': The event code.
   37257 
   37258    * `plugin_callback_func callback': The function that handles `event'.
   37259 
   37260    * `void *user_data': Pointer to plugin-specific data.
   37261 
   37262  For the PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO,
   37263 PLUGIN_REGISTER_GGC_ROOTS and PLUGIN_REGISTER_GGC_CACHES pseudo-events
   37264 the `callback' should be null, and the `user_data' is specific.
   37265 
   37266  When the PLUGIN_PRAGMAS event is triggered (with a null pointer as
   37267 data from GCC), plugins may register their own pragmas using functions
   37268 like `c_register_pragma' or `c_register_pragma_with_expansion'.
   37269 
   37270 23.3 Interacting with the pass manager
   37271 ======================================
   37272 
   37273 There needs to be a way to add/reorder/remove passes dynamically. This
   37274 is useful for both analysis plugins (plugging in after a certain pass
   37275 such as CFG or an IPA pass) and optimization plugins.
   37276 
   37277  Basic support for inserting new passes or replacing existing passes is
   37278 provided. A plugin registers a new pass with GCC by calling
   37279 `register_callback' with the `PLUGIN_PASS_MANAGER_SETUP' event and a
   37280 pointer to a `struct register_pass_info' object defined as follows
   37281 
   37282      enum pass_positioning_ops
   37283      {
   37284        PASS_POS_INSERT_AFTER,  // Insert after the reference pass.
   37285        PASS_POS_INSERT_BEFORE, // Insert before the reference pass.
   37286        PASS_POS_REPLACE        // Replace the reference pass.
   37287      };
   37288 
   37289      struct register_pass_info
   37290      {
   37291        struct opt_pass *pass;            /* New pass provided by the plugin.  */
   37292        const char *reference_pass_name;  /* Name of the reference pass for hooking
   37293                                             up the new pass.  */
   37294        int ref_pass_instance_number;     /* Insert the pass at the specified
   37295                                             instance number of the reference pass.  */
   37296                                          /* Do it for every instance if it is 0.  */
   37297        enum pass_positioning_ops pos_op; /* how to insert the new pass.  */
   37298      };
   37299 
   37300 
   37301      /* Sample plugin code that registers a new pass.  */
   37302      int
   37303      plugin_init (struct plugin_name_args *plugin_info,
   37304                   struct plugin_gcc_version *version)
   37305      {
   37306        struct register_pass_info pass_info;
   37307 
   37308        ...
   37309 
   37310        /* Code to fill in the pass_info object with new pass information.  */
   37311 
   37312        ...
   37313 
   37314        /* Register the new pass.  */
   37315        register_callback (plugin_info->base_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info);
   37316 
   37317        ...
   37318      }
   37319 
   37320 23.4 Interacting with the GCC Garbage Collector
   37321 ===============================================
   37322 
   37323 Some plugins may want to be informed when GGC (the GCC Garbage
   37324 Collector) is running. They can register callbacks for the
   37325 `PLUGIN_GGC_START' and `PLUGIN_GGC_END' events (for which the callback
   37326 is called with a null `gcc_data') to be notified of the start or end of
   37327 the GCC garbage collection.
   37328 
   37329  Some plugins may need to have GGC mark additional data. This can be
   37330 done by registering a callback (called with a null `gcc_data') for the
   37331 `PLUGIN_GGC_MARKING' event. Such callbacks can call the `ggc_set_mark'
   37332 routine, preferably thru the `ggc_mark' macro (and conversely, these
   37333 routines should usually not be used in plugins outside of the
   37334 `PLUGIN_GGC_MARKING' event).
   37335 
   37336  Some plugins may need to add extra GGC root tables, e.g. to handle
   37337 their own `GTY'-ed data. This can be done with the
   37338 `PLUGIN_REGISTER_GGC_ROOTS' pseudo-event with a null callback and the
   37339 extra root table (of type `struct ggc_root_tab*') as `user_data'.
   37340 Plugins that want to use the `if_marked' hash table option can add the
   37341 extra GGC cache tables generated by `gengtype' using the
   37342 `PLUGIN_REGISTER_GGC_CACHES' pseudo-event with a null callback and the
   37343 extra cache table (of type `struct ggc_cache_tab*') as `user_data'.
   37344 Running the `gengtype -p SOURCE-DIR FILE-LIST PLUGIN*.C ...' utility
   37345 generates these extra root tables.
   37346 
   37347  You should understand the details of memory management inside GCC
   37348 before using `PLUGIN_GGC_MARKING', `PLUGIN_REGISTER_GGC_ROOTS' or
   37349 `PLUGIN_REGISTER_GGC_CACHES'.
   37350 
   37351 23.5 Giving information about a plugin
   37352 ======================================
   37353 
   37354 A plugin should give some information to the user about itself. This
   37355 uses the following structure:
   37356 
   37357      struct plugin_info
   37358      {
   37359        const char *version;
   37360        const char *help;
   37361      };
   37362 
   37363  Such a structure is passed as the `user_data' by the plugin's init
   37364 routine using `register_callback' with the `PLUGIN_INFO' pseudo-event
   37365 and a null callback.
   37366 
   37367 23.6 Registering custom attributes or pragmas
   37368 =============================================
   37369 
   37370 For analysis (or other) purposes it is useful to be able to add custom
   37371 attributes or pragmas.
   37372 
   37373  The `PLUGIN_ATTRIBUTES' callback is called during attribute
   37374 registration. Use the `register_attribute' function to register custom
   37375 attributes.
   37376 
   37377      /* Attribute handler callback */
   37378      static tree
   37379      handle_user_attribute (tree *node, tree name, tree args,
   37380                             int flags, bool *no_add_attrs)
   37381      {
   37382        return NULL_TREE;
   37383      }
   37384 
   37385      /* Attribute definition */
   37386      static struct attribute_spec user_attr =
   37387        { "user", 1, 1, false,  false, false, handle_user_attribute };
   37388 
   37389      /* Plugin callback called during attribute registration.
   37390      Registered with register_callback (plugin_name, PLUGIN_ATTRIBUTES, register_attributes, NULL)
   37391      */
   37392      static void
   37393      register_attributes (void *event_data, void *data)
   37394      {
   37395        warning (0, G_("Callback to register attributes"));
   37396        register_attribute (&user_attr);
   37397      }
   37398 
   37399  The `PLUGIN_PRAGMAS' callback is called during pragmas registration.
   37400 Use the `c_register_pragma' or `c_register_pragma_with_expansion'
   37401 functions to register custom pragmas.
   37402 
   37403      /* Plugin callback called during pragmas registration. Registered with
   37404           register_callback (plugin_name, PLUGIN_PRAGMAS,
   37405                              register_my_pragma, NULL);
   37406      */
   37407      static void
   37408      register_my_pragma (void *event_data, void *data)
   37409      {
   37410        warning (0, G_("Callback to register pragmas"));
   37411        c_register_pragma ("GCCPLUGIN", "sayhello", handle_pragma_sayhello);
   37412      }
   37413 
   37414  It is suggested to pass `"GCCPLUGIN"' (or a short name identifying
   37415 your plugin) as the "space" argument of your pragma.
   37416 
   37417 23.7 Recording information about pass execution
   37418 ===============================================
   37419 
   37420 The event PLUGIN_PASS_EXECUTION passes the pointer to the executed pass
   37421 (the same as current_pass) as `gcc_data' to the callback.  You can also
   37422 inspect cfun to find out about which function this pass is executed for.
   37423 Note that this event will only be invoked if the gate check (if
   37424 applicable, modified by PLUGIN_OVERRIDE_GATE) succeeds.  You can use
   37425 other hooks, like `PLUGIN_ALL_PASSES_START', `PLUGIN_ALL_PASSES_END',
   37426 `PLUGIN_ALL_IPA_PASSES_START', `PLUGIN_ALL_IPA_PASSES_END',
   37427 `PLUGIN_EARLY_GIMPLE_PASSES_START', and/or
   37428 `PLUGIN_EARLY_GIMPLE_PASSES_END' to manipulate global state in your
   37429 plugin(s) in order to get context for the pass execution.
   37430 
   37431 23.8 Controlling which passes are being run
   37432 ===========================================
   37433 
   37434 After the original gate function for a pass is called, its result - the
   37435 gate status - is stored as an integer.  Then the event
   37436 `PLUGIN_OVERRIDE_GATE' is invoked, with a pointer to the gate status in
   37437 the `gcc_data' parameter to the callback function.  A nonzero value of
   37438 the gate status means that the pass is to be executed.  You can both
   37439 read and write the gate status via the passed pointer.
   37440 
   37441 23.9 Keeping track of available passes
   37442 ======================================
   37443 
   37444 When your plugin is loaded, you can inspect the various pass lists to
   37445 determine what passes are available.  However, other plugins might add
   37446 new passes.  Also, future changes to GCC might cause generic passes to
   37447 be added after plugin loading.  When a pass is first added to one of
   37448 the pass lists, the event `PLUGIN_NEW_PASS' is invoked, with the
   37449 callback parameter `gcc_data' pointing to the new pass.
   37450 
   37451 23.10 Building GCC plugins
   37452 ==========================
   37453 
   37454 If plugins are enabled, GCC installs the headers needed to build a
   37455 plugin (somewhere in the installation tree, e.g. under `/usr/local').
   37456 In particular a `plugin/include' directory is installed, containing all
   37457 the header files needed to build plugins.
   37458 
   37459  On most systems, you can query this `plugin' directory by invoking
   37460 `gcc -print-file-name=plugin' (replace if needed `gcc' with the
   37461 appropriate program path).
   37462 
   37463  Inside plugins, this `plugin' directory name can be queried by calling
   37464 `default_plugin_dir_name ()'.
   37465 
   37466  The following GNU Makefile excerpt shows how to build a simple plugin:
   37467 
   37468      GCC=gcc
   37469      PLUGIN_SOURCE_FILES= plugin1.c plugin2.c
   37470      PLUGIN_OBJECT_FILES= $(patsubst %.c,%.o,$(PLUGIN_SOURCE_FILES))
   37471      GCCPLUGINS_DIR:= $(shell $(GCC) -print-file-name=plugin)
   37472      CFLAGS+= -I$(GCCPLUGINS_DIR)/include -fPIC -O2
   37473 
   37474      plugin.so: $(PLUGIN_OBJECT_FILES)
   37475         $(GCC) -shared $^ -o $@
   37476 
   37477  A single source file plugin may be built with `gcc -I`gcc
   37478 -print-file-name=plugin`/include -fPIC -shared -O2 plugin.c -o
   37479 plugin.so', using backquote shell syntax to query the `plugin'
   37480 directory.
   37481 
   37482  Plugins needing to use `gengtype' require a GCC build directory for
   37483 the same version of GCC that they will be linked against.
   37484 
   37485 
   37486 File: gccint.info,  Node: LTO,  Next: Funding,  Prev: Plugins,  Up: Top
   37487 
   37488 24 Link Time Optimization
   37489 *************************
   37490 
   37491 24.1 Design Overview
   37492 ====================
   37493 
   37494 Link time optimization is implemented as a GCC front end for a bytecode
   37495 representation of GIMPLE that is emitted in special sections of `.o'
   37496 files.  Currently, LTO support is enabled in most ELF-based systems, as
   37497 well as darwin, cygwin and mingw systems.
   37498 
   37499  Since GIMPLE bytecode is saved alongside final object code, object
   37500 files generated with LTO support are larger than regular object files.
   37501 This "fat" object format makes it easy to integrate LTO into existing
   37502 build systems, as one can, for instance, produce archives of the files.
   37503 Additionally, one might be able to ship one set of fat objects which
   37504 could be used both for development and the production of optimized
   37505 builds.  A, perhaps surprising, side effect of this feature is that any
   37506 mistake in the toolchain that leads to LTO information not being used
   37507 (e.g. an older `libtool' calling `ld' directly).  This is both an
   37508 advantage, as the system is more robust, and a disadvantage, as the
   37509 user is not informed that the optimization has been disabled.
   37510 
   37511  The current implementation only produces "fat" objects, effectively
   37512 doubling compilation time and increasing file sizes up to 5x the
   37513 original size.  This hides the problem that some tools, such as `ar'
   37514 and `nm', need to understand symbol tables of LTO sections.  These
   37515 tools were extended to use the plugin infrastructure, and with these
   37516 problems solved, GCC will also support "slim" objects consisting of the
   37517 intermediate code alone.
   37518 
   37519  At the highest level, LTO splits the compiler in two.  The first half
   37520 (the "writer") produces a streaming representation of all the internal
   37521 data structures needed to optimize and generate code.  This includes
   37522 declarations, types, the callgraph and the GIMPLE representation of
   37523 function bodies.
   37524 
   37525  When `-flto' is given during compilation of a source file, the pass
   37526 manager executes all the passes in `all_lto_gen_passes'.  Currently,
   37527 this phase is composed of two IPA passes:
   37528 
   37529    * `pass_ipa_lto_gimple_out' This pass executes the function
   37530      `lto_output' in `lto-streamer-out.c', which traverses the call
   37531      graph encoding every reachable declaration, type and function.
   37532      This generates a memory representation of all the file sections
   37533      described below.
   37534 
   37535    * `pass_ipa_lto_finish_out' This pass executes the function
   37536      `produce_asm_for_decls' in `lto-streamer-out.c', which takes the
   37537      memory image built in the previous pass and encodes it in the
   37538      corresponding ELF file sections.
   37539 
   37540  The second half of LTO support is the "reader".  This is implemented
   37541 as the GCC front end `lto1' in `lto/lto.c'.  When `collect2' detects a
   37542 link set of `.o'/`.a' files with LTO information and the `-flto' is
   37543 enabled, it invokes `lto1' which reads the set of files and aggregates
   37544 them into a single translation unit for optimization.  The main entry
   37545 point for the reader is `lto/lto.c':`lto_main'.
   37546 
   37547 24.1.1 LTO modes of operation
   37548 -----------------------------
   37549 
   37550 One of the main goals of the GCC link-time infrastructure was to allow
   37551 effective compilation of large programs.  For this reason GCC
   37552 implements two link-time compilation modes.
   37553 
   37554   1. _LTO mode_, in which the whole program is read into the compiler
   37555      at link-time and optimized in a similar way as if it were a single
   37556      source-level compilation unit.
   37557 
   37558   2. _WHOPR or partitioned mode_, designed to utilize multiple CPUs
   37559      and/or a distributed compilation environment to quickly link large
   37560      applications.  WHOPR stands for WHOle Program optimizeR (not to be
   37561      confused with the semantics of `-fwhole-program').  It partitions
   37562      the aggregated callgraph from many different `.o' files and
   37563      distributes the compilation of the sub-graphs to different CPUs.
   37564 
   37565      Note that distributed compilation is not implemented yet, but since
   37566      the parallelism is facilitated via generating a `Makefile', it
   37567      would be easy to implement.
   37568 
   37569  WHOPR splits LTO into three main stages:
   37570   1. Local generation (LGEN) This stage executes in parallel.  Every
   37571      file in the program is compiled into the intermediate language and
   37572      packaged together with the local call-graph and summary
   37573      information.  This stage is the same for both the LTO and WHOPR
   37574      compilation mode.
   37575 
   37576   2. Whole Program Analysis (WPA) WPA is performed sequentially.  The
   37577      global call-graph is generated, and a global analysis procedure
   37578      makes transformation decisions.  The global call-graph is
   37579      partitioned to facilitate parallel optimization during phase 3.
   37580      The results of the WPA stage are stored into new object files
   37581      which contain the partitions of program expressed in the
   37582      intermediate language and the optimization decisions.
   37583 
   37584   3. Local transformations (LTRANS) This stage executes in parallel.
   37585      All the decisions made during phase 2 are implemented locally in
   37586      each partitioned object file, and the final object code is
   37587      generated.  Optimizations which cannot be decided efficiently
   37588      during the phase 2 may be performed on the local call-graph
   37589      partitions.
   37590 
   37591  WHOPR can be seen as an extension of the usual LTO mode of
   37592 compilation.  In LTO, WPA and LTRANS are executed within a single
   37593 execution of the compiler, after the whole program has been read into
   37594 memory.
   37595 
   37596  When compiling in WHOPR mode, the callgraph is partitioned during the
   37597 WPA stage.  The whole program is split into a given number of
   37598 partitions of roughly the same size.  The compiler tries to minimize
   37599 the number of references which cross partition boundaries.  The main
   37600 advantage of WHOPR is to allow the parallel execution of LTRANS stages,
   37601 which are the most time-consuming part of the compilation process.
   37602 Additionally, it avoids the need to load the whole program into memory.
   37603 
   37604 24.2 LTO file sections
   37605 ======================
   37606 
   37607 LTO information is stored in several ELF sections inside object files.
   37608 Data structures and enum codes for sections are defined in
   37609 `lto-streamer.h'.
   37610 
   37611  These sections are emitted from `lto-streamer-out.c' and mapped in all
   37612 at once from `lto/lto.c':`lto_file_read'.  The individual functions
   37613 dealing with the reading/writing of each section are described below.
   37614 
   37615    * Command line options (`.gnu.lto_.opts')
   37616 
   37617      This section contains the command line options used to generate the
   37618      object files.  This is used at link time to determine the
   37619      optimization level and other settings when they are not explicitly
   37620      specified at the linker command line.
   37621 
   37622      Currently, GCC does not support combining LTO object files compiled
   37623      with different set of the command line options into a single
   37624      binary.  At link time, the options given on the command line and
   37625      the options saved on all the files in a link-time set are applied
   37626      globally.  No attempt is made at validating the combination of
   37627      flags (other than the usual validation done by option processing).
   37628      This is implemented in `lto/lto.c':`lto_read_all_file_options'.
   37629 
   37630    * Symbol table (`.gnu.lto_.symtab')
   37631 
   37632      This table replaces the ELF symbol table for functions and
   37633      variables represented in the LTO IL.  Symbols used and exported by
   37634      the optimized assembly code of "fat" objects might not match the
   37635      ones used and exported by the intermediate code.  This table is
   37636      necessary because the intermediate code is less optimized and thus
   37637      requires a separate symbol table.
   37638 
   37639      Additionally, the binary code in the "fat" object will lack a call
   37640      to a function, since the call was optimized out at compilation time
   37641      after the intermediate language was streamed out.  In some special
   37642      cases, the same optimization may not happen during link-time
   37643      optimization.  This would lead to an undefined symbol if only one
   37644      symbol table was used.
   37645 
   37646      The symbol table is emitted in
   37647      `lto-streamer-out.c':`produce_symtab'.
   37648 
   37649    * Global declarations and types (`.gnu.lto_.decls')
   37650 
   37651      This section contains an intermediate language dump of all
   37652      declarations and types required to represent the callgraph, static
   37653      variables and top-level debug info.
   37654 
   37655      The contents of this section are emitted in
   37656      `lto-streamer-out.c':`produce_asm_for_decls'.  Types and symbols
   37657      are emitted in a topological order that preserves the sharing of
   37658      pointers when the file is read back in
   37659      (`lto.c':`read_cgraph_and_symbols').
   37660 
   37661    * The callgraph (`.gnu.lto_.cgraph')
   37662 
   37663      This section contains the basic data structure used by the GCC
   37664      inter-procedural optimization infrastructure.  This section stores
   37665      an annotated multi-graph which represents the functions and call
   37666      sites as well as the variables, aliases and top-level `asm'
   37667      statements.
   37668 
   37669      This section is emitted in `lto-streamer-out.c':`output_cgraph'
   37670      and read in `lto-cgraph.c':`input_cgraph'.
   37671 
   37672    * IPA references (`.gnu.lto_.refs')
   37673 
   37674      This section contains references between function and static
   37675      variables.  It is emitted by `lto-cgraph.c':`output_refs' and read
   37676      by `lto-cgraph.c':`input_refs'.
   37677 
   37678    * Function bodies (`.gnu.lto_.function_body.<name>')
   37679 
   37680      This section contains function bodies in the intermediate language
   37681      representation.  Every function body is in a separate section to
   37682      allow copying of the section independently to different object
   37683      files or reading the function on demand.
   37684 
   37685      Functions are emitted in `lto-streamer-out.c':`output_function'
   37686      and read in `lto-streamer-in.c':`input_function'.
   37687 
   37688    * Static variable initializers (`.gnu.lto_.vars')
   37689 
   37690      This section contains all the symbols in the global variable pool.
   37691      It is emitted by `lto-cgraph.c':`output_varpool' and read in
   37692      `lto-cgraph.c':`input_cgraph'.
   37693 
   37694    * Summaries and optimization summaries used by IPA passes
   37695      (`.gnu.lto_.<xxx>', where `<xxx>' is one of `jmpfuncs',
   37696      `pureconst' or `reference')
   37697 
   37698      These sections are used by IPA passes that need to emit summary
   37699      information during LTO generation to be read and aggregated at
   37700      link time.  Each pass is responsible for implementing two pass
   37701      manager hooks: one for writing the summary and another for reading
   37702      it in.  The format of these sections is entirely up to each
   37703      individual pass.  The only requirement is that the writer and
   37704      reader hooks agree on the format.
   37705 
   37706 24.3 Using summary information in IPA passes
   37707 ============================================
   37708 
   37709 Programs are represented internally as a _callgraph_ (a multi-graph
   37710 where nodes are functions and edges are call sites) and a _varpool_ (a
   37711 list of static and external variables in the program).
   37712 
   37713  The inter-procedural optimization is organized as a sequence of
   37714 individual passes, which operate on the callgraph and the varpool.  To
   37715 make the implementation of WHOPR possible, every inter-procedural
   37716 optimization pass is split into several stages that are executed at
   37717 different times during WHOPR compilation:
   37718 
   37719    * LGEN time
   37720        1. _Generate summary_ (`generate_summary' in `struct
   37721           ipa_opt_pass_d').  This stage analyzes every function body
   37722           and variable initializer is examined and stores relevant
   37723           information into a pass-specific data structure.
   37724 
   37725        2. _Write summary_ (`write_summary' in `struct ipa_opt_pass_d').
   37726           This stage writes all the pass-specific information generated
   37727           by `generate_summary'.  Summaries go into their own
   37728           `LTO_section_*' sections that have to be declared in
   37729           `lto-streamer.h':`enum lto_section_type'.  A new section is
   37730           created by calling `create_output_block' and data can be
   37731           written using the `lto_output_*' routines.
   37732 
   37733    * WPA time
   37734        1. _Read summary_ (`read_summary' in `struct ipa_opt_pass_d').
   37735           This stage reads all the pass-specific information in exactly
   37736           the same order that it was written by `write_summary'.
   37737 
   37738        2. _Execute_ (`execute' in `struct opt_pass').  This performs
   37739           inter-procedural propagation.  This must be done without
   37740           actual access to the individual function bodies or variable
   37741           initializers.  Typically, this results in a transitive
   37742           closure operation over the summary information of all the
   37743           nodes in the callgraph.
   37744 
   37745        3. _Write optimization summary_ (`write_optimization_summary' in
   37746           `struct ipa_opt_pass_d').  This writes the result of the
   37747           inter-procedural propagation into the object file.  This can
   37748           use the same data structures and helper routines used in
   37749           `write_summary'.
   37750 
   37751    * LTRANS time
   37752        1. _Read optimization summary_ (`read_optimization_summary' in
   37753           `struct ipa_opt_pass_d').  The counterpart to
   37754           `write_optimization_summary'.  This reads the interprocedural
   37755           optimization decisions in exactly the same format emitted by
   37756           `write_optimization_summary'.
   37757 
   37758        2. _Transform_ (`function_transform' and `variable_transform' in
   37759           `struct ipa_opt_pass_d').  The actual function bodies and
   37760           variable initializers are updated based on the information
   37761           passed down from the _Execute_ stage.
   37762 
   37763  The implementation of the inter-procedural passes are shared between
   37764 LTO, WHOPR and classic non-LTO compilation.
   37765 
   37766    * During the traditional file-by-file mode every pass executes its
   37767      own _Generate summary_, _Execute_, and _Transform_ stages within
   37768      the single execution context of the compiler.
   37769 
   37770    * In LTO compilation mode, every pass uses _Generate summary_ and
   37771      _Write summary_ stages at compilation time, while the _Read
   37772      summary_, _Execute_, and _Transform_ stages are executed at link
   37773      time.
   37774 
   37775    * In WHOPR mode all stages are used.
   37776 
   37777  To simplify development, the GCC pass manager differentiates between
   37778 normal inter-procedural passes and small inter-procedural passes.  A
   37779 _small inter-procedural pass_ (`SIMPLE_IPA_PASS') is a pass that does
   37780 everything at once and thus it can not be executed during WPA in WHOPR
   37781 mode.  It defines only the _Execute_ stage and during this stage it
   37782 accesses and modifies the function bodies.  Such passes are useful for
   37783 optimization at LGEN or LTRANS time and are used, for example, to
   37784 implement early optimization before writing object files.  The simple
   37785 inter-procedural passes can also be used for easier prototyping and
   37786 development of a new inter-procedural pass.
   37787 
   37788 24.3.1 Virtual clones
   37789 ---------------------
   37790 
   37791 One of the main challenges of introducing the WHOPR compilation mode
   37792 was addressing the interactions between optimization passes.  In LTO
   37793 compilation mode, the passes are executed in a sequence, each of which
   37794 consists of analysis (or _Generate summary_), propagation (or
   37795 _Execute_) and _Transform_ stages.  Once the work of one pass is
   37796 finished, the next pass sees the updated program representation and can
   37797 execute.  This makes the individual passes dependent on each other.
   37798 
   37799  In WHOPR mode all passes first execute their _Generate summary_ stage.
   37800 Then summary writing marks the end of the LGEN stage.  At WPA time, the
   37801 summaries are read back into memory and all passes run the _Execute_
   37802 stage.  Optimization summaries are streamed and sent to LTRANS, where
   37803 all the passes execute the _Transform_ stage.
   37804 
   37805  Most optimization passes split naturally into analysis, propagation
   37806 and transformation stages.  But some do not.  The main problem arises
   37807 when one pass performs changes and the following pass gets confused by
   37808 seeing different callgraphs between the _Transform_ stage and the
   37809 _Generate summary_ or _Execute_ stage.  This means that the passes are
   37810 required to communicate their decisions with each other.
   37811 
   37812  To facilitate this communication, the GCC callgraph infrastructure
   37813 implements _virtual clones_, a method of representing the changes
   37814 performed by the optimization passes in the callgraph without needing
   37815 to update function bodies.
   37816 
   37817  A _virtual clone_ in the callgraph is a function that has no
   37818 associated body, just a description of how to create its body based on
   37819 a different function (which itself may be a virtual clone).
   37820 
   37821  The description of function modifications includes adjustments to the
   37822 function's signature (which allows, for example, removing or adding
   37823 function arguments), substitutions to perform on the function body,
   37824 and, for inlined functions, a pointer to the function that it will be
   37825 inlined into.
   37826 
   37827  It is also possible to redirect any edge of the callgraph from a
   37828 function to its virtual clone.  This implies updating of the call site
   37829 to adjust for the new function signature.
   37830 
   37831  Most of the transformations performed by inter-procedural
   37832 optimizations can be represented via virtual clones.  For instance, a
   37833 constant propagation pass can produce a virtual clone of the function
   37834 which replaces one of its arguments by a constant.  The inliner can
   37835 represent its decisions by producing a clone of a function whose body
   37836 will be later integrated into a given function.
   37837 
   37838  Using _virtual clones_, the program can be easily updated during the
   37839 _Execute_ stage, solving most of pass interactions problems that would
   37840 otherwise occur during _Transform_.
   37841 
   37842  Virtual clones are later materialized in the LTRANS stage and turned
   37843 into real functions.  Passes executed after the virtual clone were
   37844 introduced also perform their _Transform_ stage on new functions, so
   37845 for a pass there is no significant difference between operating on a
   37846 real function or a virtual clone introduced before its _Execute_ stage.
   37847 
   37848  Optimization passes then work on virtual clones introduced before
   37849 their _Execute_ stage as if they were real functions.  The only
   37850 difference is that clones are not visible during the _Generate Summary_
   37851 stage.
   37852 
   37853  To keep function summaries updated, the callgraph interface allows an
   37854 optimizer to register a callback that is called every time a new clone
   37855 is introduced as well as when the actual function or variable is
   37856 generated or when a function or variable is removed.  These hooks are
   37857 registered in the _Generate summary_ stage and allow the pass to keep
   37858 its information intact until the _Execute_ stage.  The same hooks can
   37859 also be registered during the _Execute_ stage to keep the optimization
   37860 summaries updated for the _Transform_ stage.
   37861 
   37862 24.3.2 IPA references
   37863 ---------------------
   37864 
   37865 GCC represents IPA references in the callgraph.  For a function or
   37866 variable `A', the _IPA reference_ is a list of all locations where the
   37867 address of `A' is taken and, when `A' is a variable, a list of all
   37868 direct stores and reads to/from `A'.  References represent an oriented
   37869 multi-graph on the union of nodes of the callgraph and the varpool.  See
   37870 `ipa-reference.c':`ipa_reference_write_optimization_summary' and
   37871 `ipa-reference.c':`ipa_reference_read_optimization_summary' for details.
   37872 
   37873 24.3.3 Jump functions
   37874 ---------------------
   37875 
   37876 Suppose that an optimization pass sees a function `A' and it knows the
   37877 values of (some of) its arguments.  The _jump function_ describes the
   37878 value of a parameter of a given function call in function `A' based on
   37879 this knowledge.
   37880 
   37881  Jump functions are used by several optimizations, such as the
   37882 inter-procedural constant propagation pass and the devirtualization
   37883 pass.  The inliner also uses jump functions to perform inlining of
   37884 callbacks.
   37885 
   37886 24.4 Whole program assumptions, linker plugin and symbol visibilities
   37887 =====================================================================
   37888 
   37889 Link-time optimization gives relatively minor benefits when used alone.
   37890 The problem is that propagation of inter-procedural information does
   37891 not work well across functions and variables that are called or
   37892 referenced by other compilation units (such as from a dynamically
   37893 linked library).  We say that such functions are variables are
   37894 _externally visible_.
   37895 
   37896  To make the situation even more difficult, many applications organize
   37897 themselves as a set of shared libraries, and the default ELF visibility
   37898 rules allow one to overwrite any externally visible symbol with a
   37899 different symbol at runtime.  This basically disables any optimizations
   37900 across such functions and variables, because the compiler cannot be
   37901 sure that the function body it is seeing is the same function body that
   37902 will be used at runtime.  Any function or variable not declared
   37903 `static' in the sources degrades the quality of inter-procedural
   37904 optimization.
   37905 
   37906  To avoid this problem the compiler must assume that it sees the whole
   37907 program when doing link-time optimization.  Strictly speaking, the
   37908 whole program is rarely visible even at link-time.  Standard system
   37909 libraries are usually linked dynamically or not provided with the
   37910 link-time information.  In GCC, the whole program option
   37911 (`-fwhole-program') asserts that every function and variable defined in
   37912 the current compilation unit is static, except for function `main'
   37913 (note: at link time, the current unit is the union of all objects
   37914 compiled with LTO).  Since some functions and variables need to be
   37915 referenced externally, for example by another DSO or from an assembler
   37916 file, GCC also provides the function and variable attribute
   37917 `externally_visible' which can be used to disable the effect of
   37918 `-fwhole-program' on a specific symbol.
   37919 
   37920  The whole program mode assumptions are slightly more complex in C++,
   37921 where inline functions in headers are put into _COMDAT_ sections.
   37922 COMDAT function and variables can be defined by multiple object files
   37923 and their bodies are unified at link-time and dynamic link-time.
   37924 COMDAT functions are changed to local only when their address is not
   37925 taken and thus un-sharing them with a library is not harmful.  COMDAT
   37926 variables always remain externally visible, however for readonly
   37927 variables it is assumed that their initializers cannot be overwritten
   37928 by a different value.
   37929 
   37930  GCC provides the function and variable attribute `visibility' that can
   37931 be used to specify the visibility of externally visible symbols (or
   37932 alternatively an `-fdefault-visibility' command line option).  ELF
   37933 defines the `default', `protected', `hidden' and `internal'
   37934 visibilities.
   37935 
   37936  The most commonly used is visibility is `hidden'.  It specifies that
   37937 the symbol cannot be referenced from outside of the current shared
   37938 library.  Unfortunately, this information cannot be used directly by
   37939 the link-time optimization in the compiler since the whole shared
   37940 library also might contain non-LTO objects and those are not visible to
   37941 the compiler.
   37942 
   37943  GCC solves this problem using linker plugins.  A _linker plugin_ is an
   37944 interface to the linker that allows an external program to claim the
   37945 ownership of a given object file.  The linker then performs the linking
   37946 procedure by querying the plugin about the symbol table of the claimed
   37947 objects and once the linking decisions are complete, the plugin is
   37948 allowed to provide the final object file before the actual linking is
   37949 made.  The linker plugin obtains the symbol resolution information
   37950 which specifies which symbols provided by the claimed objects are bound
   37951 from the rest of a binary being linked.
   37952 
   37953  Currently, the linker plugin  works only in combination with the Gold
   37954 linker, but a GNU ld implementation is under development.
   37955 
   37956  GCC is designed to be independent of the rest of the toolchain and
   37957 aims to support linkers without plugin support.  For this reason it
   37958 does not use the linker plugin by default.  Instead, the object files
   37959 are examined by `collect2' before being passed to the linker and
   37960 objects found to have LTO sections are passed to `lto1' first.  This
   37961 mode does not work for library archives.  The decision on what object
   37962 files from the archive are needed depends on the actual linking and
   37963 thus GCC would have to implement the linker itself.  The resolution
   37964 information is missing too and thus GCC needs to make an educated guess
   37965 based on `-fwhole-program'.  Without the linker plugin GCC also assumes
   37966 that symbols are declared `hidden' and not referred by non-LTO code by
   37967 default.
   37968 
   37969 24.5 Internal flags controlling `lto1'
   37970 ======================================
   37971 
   37972 The following flags are passed into `lto1' and are not meant to be used
   37973 directly from the command line.
   37974 
   37975    * -fwpa This option runs the serial part of the link-time optimizer
   37976      performing the inter-procedural propagation (WPA mode).  The
   37977      compiler reads in summary information from all inputs and performs
   37978      an analysis based on summary information only.  It generates
   37979      object files for subsequent runs of the link-time optimizer where
   37980      individual object files are optimized using both summary
   37981      information from the WPA mode and the actual function bodies.  It
   37982      then drives the LTRANS phase.
   37983 
   37984    * -fltrans This option runs the link-time optimizer in the
   37985      local-transformation (LTRANS) mode, which reads in output from a
   37986      previous run of the LTO in WPA mode.  In the LTRANS mode, LTO
   37987      optimizes an object and produces the final assembly.
   37988 
   37989    * -fltrans-output-list=FILE This option specifies a file to which
   37990      the names of LTRANS output files are written.  This option is only
   37991      meaningful in conjunction with `-fwpa'.
   37992 
   37993 
   37994 File: gccint.info,  Node: Funding,  Next: GNU Project,  Prev: LTO,  Up: Top
   37995 
   37996 Funding Free Software
   37997 *********************
   37998 
   37999 If you want to have more free software a few years from now, it makes
   38000 sense for you to help encourage people to contribute funds for its
   38001 development.  The most effective approach known is to encourage
   38002 commercial redistributors to donate.
   38003 
   38004  Users of free software systems can boost the pace of development by
   38005 encouraging for-a-fee distributors to donate part of their selling price
   38006 to free software developers--the Free Software Foundation, and others.
   38007 
   38008  The way to convince distributors to do this is to demand it and expect
   38009 it from them.  So when you compare distributors, judge them partly by
   38010 how much they give to free software development.  Show distributors
   38011 they must compete to be the one who gives the most.
   38012 
   38013  To make this approach work, you must insist on numbers that you can
   38014 compare, such as, "We will donate ten dollars to the Frobnitz project
   38015 for each disk sold."  Don't be satisfied with a vague promise, such as
   38016 "A portion of the profits are donated," since it doesn't give a basis
   38017 for comparison.
   38018 
   38019  Even a precise fraction "of the profits from this disk" is not very
   38020 meaningful, since creative accounting and unrelated business decisions
   38021 can greatly alter what fraction of the sales price counts as profit.
   38022 If the price you pay is $50, ten percent of the profit is probably less
   38023 than a dollar; it might be a few cents, or nothing at all.
   38024 
   38025  Some redistributors do development work themselves.  This is useful
   38026 too; but to keep everyone honest, you need to inquire how much they do,
   38027 and what kind.  Some kinds of development make much more long-term
   38028 difference than others.  For example, maintaining a separate version of
   38029 a program contributes very little; maintaining the standard version of a
   38030 program for the whole community contributes much.  Easy new ports
   38031 contribute little, since someone else would surely do them; difficult
   38032 ports such as adding a new CPU to the GNU Compiler Collection
   38033 contribute more; major new features or packages contribute the most.
   38034 
   38035  By establishing the idea that supporting further development is "the
   38036 proper thing to do" when distributing free software for a fee, we can
   38037 assure a steady flow of resources into making more free software.
   38038 
   38039      Copyright (C) 1994 Free Software Foundation, Inc.
   38040      Verbatim copying and redistribution of this section is permitted
   38041      without royalty; alteration is not permitted.
   38042 
   38043 
   38044 File: gccint.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
   38045 
   38046 The GNU Project and GNU/Linux
   38047 *****************************
   38048 
   38049 The GNU Project was launched in 1984 to develop a complete Unix-like
   38050 operating system which is free software: the GNU system.  (GNU is a
   38051 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
   38052 Variants of the GNU operating system, which use the kernel Linux, are
   38053 now widely used; though these systems are often referred to as "Linux",
   38054 they are more accurately called GNU/Linux systems.
   38055 
   38056  For more information, see:
   38057      `http://www.gnu.org/'
   38058      `http://www.gnu.org/gnu/linux-and-gnu.html'
   38059 
   38060 
   38061 File: gccint.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
   38062 
   38063 GNU General Public License
   38064 **************************
   38065 
   38066                         Version 3, 29 June 2007
   38067 
   38068      Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
   38069 
   38070      Everyone is permitted to copy and distribute verbatim copies of this
   38071      license document, but changing it is not allowed.
   38072 
   38073 Preamble
   38074 ========
   38075 
   38076 The GNU General Public License is a free, copyleft license for software
   38077 and other kinds of works.
   38078 
   38079  The licenses for most software and other practical works are designed
   38080 to take away your freedom to share and change the works.  By contrast,
   38081 the GNU General Public License is intended to guarantee your freedom to
   38082 share and change all versions of a program-to make sure it remains free
   38083 software for all its users.  We, the Free Software Foundation, use the
   38084 GNU General Public License for most of our software; it applies also to
   38085 any other work released this way by its authors.  You can apply it to
   38086 your programs, too.
   38087 
   38088  When we speak of free software, we are referring to freedom, not
   38089 price.  Our General Public Licenses are designed to make sure that you
   38090 have the freedom to distribute copies of free software (and charge for
   38091 them if you wish), that you receive source code or can get it if you
   38092 want it, that you can change the software or use pieces of it in new
   38093 free programs, and that you know you can do these things.
   38094 
   38095  To protect your rights, we need to prevent others from denying you
   38096 these rights or asking you to surrender the rights.  Therefore, you
   38097 have certain responsibilities if you distribute copies of the software,
   38098 or if you modify it: responsibilities to respect the freedom of others.
   38099 
   38100  For example, if you distribute copies of such a program, whether
   38101 gratis or for a fee, you must pass on to the recipients the same
   38102 freedoms that you received.  You must make sure that they, too, receive
   38103 or can get the source code.  And you must show them these terms so they
   38104 know their rights.
   38105 
   38106  Developers that use the GNU GPL protect your rights with two steps:
   38107 (1) assert copyright on the software, and (2) offer you this License
   38108 giving you legal permission to copy, distribute and/or modify it.
   38109 
   38110  For the developers' and authors' protection, the GPL clearly explains
   38111 that there is no warranty for this free software.  For both users' and
   38112 authors' sake, the GPL requires that modified versions be marked as
   38113 changed, so that their problems will not be attributed erroneously to
   38114 authors of previous versions.
   38115 
   38116  Some devices are designed to deny users access to install or run
   38117 modified versions of the software inside them, although the
   38118 manufacturer can do so.  This is fundamentally incompatible with the
   38119 aim of protecting users' freedom to change the software.  The
   38120 systematic pattern of such abuse occurs in the area of products for
   38121 individuals to use, which is precisely where it is most unacceptable.
   38122 Therefore, we have designed this version of the GPL to prohibit the
   38123 practice for those products.  If such problems arise substantially in
   38124 other domains, we stand ready to extend this provision to those domains
   38125 in future versions of the GPL, as needed to protect the freedom of
   38126 users.
   38127 
   38128  Finally, every program is threatened constantly by software patents.
   38129 States should not allow patents to restrict development and use of
   38130 software on general-purpose computers, but in those that do, we wish to
   38131 avoid the special danger that patents applied to a free program could
   38132 make it effectively proprietary.  To prevent this, the GPL assures that
   38133 patents cannot be used to render the program non-free.
   38134 
   38135  The precise terms and conditions for copying, distribution and
   38136 modification follow.
   38137 
   38138 TERMS AND CONDITIONS
   38139 ====================
   38140 
   38141   0. Definitions.
   38142 
   38143      "This License" refers to version 3 of the GNU General Public
   38144      License.
   38145 
   38146      "Copyright" also means copyright-like laws that apply to other
   38147      kinds of works, such as semiconductor masks.
   38148 
   38149      "The Program" refers to any copyrightable work licensed under this
   38150      License.  Each licensee is addressed as "you".  "Licensees" and
   38151      "recipients" may be individuals or organizations.
   38152 
   38153      To "modify" a work means to copy from or adapt all or part of the
   38154      work in a fashion requiring copyright permission, other than the
   38155      making of an exact copy.  The resulting work is called a "modified
   38156      version" of the earlier work or a work "based on" the earlier work.
   38157 
   38158      A "covered work" means either the unmodified Program or a work
   38159      based on the Program.
   38160 
   38161      To "propagate" a work means to do anything with it that, without
   38162      permission, would make you directly or secondarily liable for
   38163      infringement under applicable copyright law, except executing it
   38164      on a computer or modifying a private copy.  Propagation includes
   38165      copying, distribution (with or without modification), making
   38166      available to the public, and in some countries other activities as
   38167      well.
   38168 
   38169      To "convey" a work means any kind of propagation that enables other
   38170      parties to make or receive copies.  Mere interaction with a user
   38171      through a computer network, with no transfer of a copy, is not
   38172      conveying.
   38173 
   38174      An interactive user interface displays "Appropriate Legal Notices"
   38175      to the extent that it includes a convenient and prominently visible
   38176      feature that (1) displays an appropriate copyright notice, and (2)
   38177      tells the user that there is no warranty for the work (except to
   38178      the extent that warranties are provided), that licensees may
   38179      convey the work under this License, and how to view a copy of this
   38180      License.  If the interface presents a list of user commands or
   38181      options, such as a menu, a prominent item in the list meets this
   38182      criterion.
   38183 
   38184   1. Source Code.
   38185 
   38186      The "source code" for a work means the preferred form of the work
   38187      for making modifications to it.  "Object code" means any
   38188      non-source form of a work.
   38189 
   38190      A "Standard Interface" means an interface that either is an
   38191      official standard defined by a recognized standards body, or, in
   38192      the case of interfaces specified for a particular programming
   38193      language, one that is widely used among developers working in that
   38194      language.
   38195 
   38196      The "System Libraries" of an executable work include anything,
   38197      other than the work as a whole, that (a) is included in the normal
   38198      form of packaging a Major Component, but which is not part of that
   38199      Major Component, and (b) serves only to enable use of the work
   38200      with that Major Component, or to implement a Standard Interface
   38201      for which an implementation is available to the public in source
   38202      code form.  A "Major Component", in this context, means a major
   38203      essential component (kernel, window system, and so on) of the
   38204      specific operating system (if any) on which the executable work
   38205      runs, or a compiler used to produce the work, or an object code
   38206      interpreter used to run it.
   38207 
   38208      The "Corresponding Source" for a work in object code form means all
   38209      the source code needed to generate, install, and (for an executable
   38210      work) run the object code and to modify the work, including
   38211      scripts to control those activities.  However, it does not include
   38212      the work's System Libraries, or general-purpose tools or generally
   38213      available free programs which are used unmodified in performing
   38214      those activities but which are not part of the work.  For example,
   38215      Corresponding Source includes interface definition files
   38216      associated with source files for the work, and the source code for
   38217      shared libraries and dynamically linked subprograms that the work
   38218      is specifically designed to require, such as by intimate data
   38219      communication or control flow between those subprograms and other
   38220      parts of the work.
   38221 
   38222      The Corresponding Source need not include anything that users can
   38223      regenerate automatically from other parts of the Corresponding
   38224      Source.
   38225 
   38226      The Corresponding Source for a work in source code form is that
   38227      same work.
   38228 
   38229   2. Basic Permissions.
   38230 
   38231      All rights granted under this License are granted for the term of
   38232      copyright on the Program, and are irrevocable provided the stated
   38233      conditions are met.  This License explicitly affirms your unlimited
   38234      permission to run the unmodified Program.  The output from running
   38235      a covered work is covered by this License only if the output,
   38236      given its content, constitutes a covered work.  This License
   38237      acknowledges your rights of fair use or other equivalent, as
   38238      provided by copyright law.
   38239 
   38240      You may make, run and propagate covered works that you do not
   38241      convey, without conditions so long as your license otherwise
   38242      remains in force.  You may convey covered works to others for the
   38243      sole purpose of having them make modifications exclusively for
   38244      you, or provide you with facilities for running those works,
   38245      provided that you comply with the terms of this License in
   38246      conveying all material for which you do not control copyright.
   38247      Those thus making or running the covered works for you must do so
   38248      exclusively on your behalf, under your direction and control, on
   38249      terms that prohibit them from making any copies of your
   38250      copyrighted material outside their relationship with you.
   38251 
   38252      Conveying under any other circumstances is permitted solely under
   38253      the conditions stated below.  Sublicensing is not allowed; section
   38254      10 makes it unnecessary.
   38255 
   38256   3. Protecting Users' Legal Rights From Anti-Circumvention Law.
   38257 
   38258      No covered work shall be deemed part of an effective technological
   38259      measure under any applicable law fulfilling obligations under
   38260      article 11 of the WIPO copyright treaty adopted on 20 December
   38261      1996, or similar laws prohibiting or restricting circumvention of
   38262      such measures.
   38263 
   38264      When you convey a covered work, you waive any legal power to forbid
   38265      circumvention of technological measures to the extent such
   38266      circumvention is effected by exercising rights under this License
   38267      with respect to the covered work, and you disclaim any intention
   38268      to limit operation or modification of the work as a means of
   38269      enforcing, against the work's users, your or third parties' legal
   38270      rights to forbid circumvention of technological measures.
   38271 
   38272   4. Conveying Verbatim Copies.
   38273 
   38274      You may convey verbatim copies of the Program's source code as you
   38275      receive it, in any medium, provided that you conspicuously and
   38276      appropriately publish on each copy an appropriate copyright notice;
   38277      keep intact all notices stating that this License and any
   38278      non-permissive terms added in accord with section 7 apply to the
   38279      code; keep intact all notices of the absence of any warranty; and
   38280      give all recipients a copy of this License along with the Program.
   38281 
   38282      You may charge any price or no price for each copy that you convey,
   38283      and you may offer support or warranty protection for a fee.
   38284 
   38285   5. Conveying Modified Source Versions.
   38286 
   38287      You may convey a work based on the Program, or the modifications to
   38288      produce it from the Program, in the form of source code under the
   38289      terms of section 4, provided that you also meet all of these
   38290      conditions:
   38291 
   38292        a. The work must carry prominent notices stating that you
   38293           modified it, and giving a relevant date.
   38294 
   38295        b. The work must carry prominent notices stating that it is
   38296           released under this License and any conditions added under
   38297           section 7.  This requirement modifies the requirement in
   38298           section 4 to "keep intact all notices".
   38299 
   38300        c. You must license the entire work, as a whole, under this
   38301           License to anyone who comes into possession of a copy.  This
   38302           License will therefore apply, along with any applicable
   38303           section 7 additional terms, to the whole of the work, and all
   38304           its parts, regardless of how they are packaged.  This License
   38305           gives no permission to license the work in any other way, but
   38306           it does not invalidate such permission if you have separately
   38307           received it.
   38308 
   38309        d. If the work has interactive user interfaces, each must display
   38310           Appropriate Legal Notices; however, if the Program has
   38311           interactive interfaces that do not display Appropriate Legal
   38312           Notices, your work need not make them do so.
   38313 
   38314      A compilation of a covered work with other separate and independent
   38315      works, which are not by their nature extensions of the covered
   38316      work, and which are not combined with it such as to form a larger
   38317      program, in or on a volume of a storage or distribution medium, is
   38318      called an "aggregate" if the compilation and its resulting
   38319      copyright are not used to limit the access or legal rights of the
   38320      compilation's users beyond what the individual works permit.
   38321      Inclusion of a covered work in an aggregate does not cause this
   38322      License to apply to the other parts of the aggregate.
   38323 
   38324   6. Conveying Non-Source Forms.
   38325 
   38326      You may convey a covered work in object code form under the terms
   38327      of sections 4 and 5, provided that you also convey the
   38328      machine-readable Corresponding Source under the terms of this
   38329      License, in one of these ways:
   38330 
   38331        a. Convey the object code in, or embodied in, a physical product
   38332           (including a physical distribution medium), accompanied by the
   38333           Corresponding Source fixed on a durable physical medium
   38334           customarily used for software interchange.
   38335 
   38336        b. Convey the object code in, or embodied in, a physical product
   38337           (including a physical distribution medium), accompanied by a
   38338           written offer, valid for at least three years and valid for
   38339           as long as you offer spare parts or customer support for that
   38340           product model, to give anyone who possesses the object code
   38341           either (1) a copy of the Corresponding Source for all the
   38342           software in the product that is covered by this License, on a
   38343           durable physical medium customarily used for software
   38344           interchange, for a price no more than your reasonable cost of
   38345           physically performing this conveying of source, or (2) access
   38346           to copy the Corresponding Source from a network server at no
   38347           charge.
   38348 
   38349        c. Convey individual copies of the object code with a copy of
   38350           the written offer to provide the Corresponding Source.  This
   38351           alternative is allowed only occasionally and noncommercially,
   38352           and only if you received the object code with such an offer,
   38353           in accord with subsection 6b.
   38354 
   38355        d. Convey the object code by offering access from a designated
   38356           place (gratis or for a charge), and offer equivalent access
   38357           to the Corresponding Source in the same way through the same
   38358           place at no further charge.  You need not require recipients
   38359           to copy the Corresponding Source along with the object code.
   38360           If the place to copy the object code is a network server, the
   38361           Corresponding Source may be on a different server (operated
   38362           by you or a third party) that supports equivalent copying
   38363           facilities, provided you maintain clear directions next to
   38364           the object code saying where to find the Corresponding Source.
   38365           Regardless of what server hosts the Corresponding Source, you
   38366           remain obligated to ensure that it is available for as long
   38367           as needed to satisfy these requirements.
   38368 
   38369        e. Convey the object code using peer-to-peer transmission,
   38370           provided you inform other peers where the object code and
   38371           Corresponding Source of the work are being offered to the
   38372           general public at no charge under subsection 6d.
   38373 
   38374 
   38375      A separable portion of the object code, whose source code is
   38376      excluded from the Corresponding Source as a System Library, need
   38377      not be included in conveying the object code work.
   38378 
   38379      A "User Product" is either (1) a "consumer product", which means
   38380      any tangible personal property which is normally used for personal,
   38381      family, or household purposes, or (2) anything designed or sold for
   38382      incorporation into a dwelling.  In determining whether a product
   38383      is a consumer product, doubtful cases shall be resolved in favor of
   38384      coverage.  For a particular product received by a particular user,
   38385      "normally used" refers to a typical or common use of that class of
   38386      product, regardless of the status of the particular user or of the
   38387      way in which the particular user actually uses, or expects or is
   38388      expected to use, the product.  A product is a consumer product
   38389      regardless of whether the product has substantial commercial,
   38390      industrial or non-consumer uses, unless such uses represent the
   38391      only significant mode of use of the product.
   38392 
   38393      "Installation Information" for a User Product means any methods,
   38394      procedures, authorization keys, or other information required to
   38395      install and execute modified versions of a covered work in that
   38396      User Product from a modified version of its Corresponding Source.
   38397      The information must suffice to ensure that the continued
   38398      functioning of the modified object code is in no case prevented or
   38399      interfered with solely because modification has been made.
   38400 
   38401      If you convey an object code work under this section in, or with,
   38402      or specifically for use in, a User Product, and the conveying
   38403      occurs as part of a transaction in which the right of possession
   38404      and use of the User Product is transferred to the recipient in
   38405      perpetuity or for a fixed term (regardless of how the transaction
   38406      is characterized), the Corresponding Source conveyed under this
   38407      section must be accompanied by the Installation Information.  But
   38408      this requirement does not apply if neither you nor any third party
   38409      retains the ability to install modified object code on the User
   38410      Product (for example, the work has been installed in ROM).
   38411 
   38412      The requirement to provide Installation Information does not
   38413      include a requirement to continue to provide support service,
   38414      warranty, or updates for a work that has been modified or
   38415      installed by the recipient, or for the User Product in which it
   38416      has been modified or installed.  Access to a network may be denied
   38417      when the modification itself materially and adversely affects the
   38418      operation of the network or violates the rules and protocols for
   38419      communication across the network.
   38420 
   38421      Corresponding Source conveyed, and Installation Information
   38422      provided, in accord with this section must be in a format that is
   38423      publicly documented (and with an implementation available to the
   38424      public in source code form), and must require no special password
   38425      or key for unpacking, reading or copying.
   38426 
   38427   7. Additional Terms.
   38428 
   38429      "Additional permissions" are terms that supplement the terms of
   38430      this License by making exceptions from one or more of its
   38431      conditions.  Additional permissions that are applicable to the
   38432      entire Program shall be treated as though they were included in
   38433      this License, to the extent that they are valid under applicable
   38434      law.  If additional permissions apply only to part of the Program,
   38435      that part may be used separately under those permissions, but the
   38436      entire Program remains governed by this License without regard to
   38437      the additional permissions.
   38438 
   38439      When you convey a copy of a covered work, you may at your option
   38440      remove any additional permissions from that copy, or from any part
   38441      of it.  (Additional permissions may be written to require their own
   38442      removal in certain cases when you modify the work.)  You may place
   38443      additional permissions on material, added by you to a covered work,
   38444      for which you have or can give appropriate copyright permission.
   38445 
   38446      Notwithstanding any other provision of this License, for material
   38447      you add to a covered work, you may (if authorized by the copyright
   38448      holders of that material) supplement the terms of this License
   38449      with terms:
   38450 
   38451        a. Disclaiming warranty or limiting liability differently from
   38452           the terms of sections 15 and 16 of this License; or
   38453 
   38454        b. Requiring preservation of specified reasonable legal notices
   38455           or author attributions in that material or in the Appropriate
   38456           Legal Notices displayed by works containing it; or
   38457 
   38458        c. Prohibiting misrepresentation of the origin of that material,
   38459           or requiring that modified versions of such material be
   38460           marked in reasonable ways as different from the original
   38461           version; or
   38462 
   38463        d. Limiting the use for publicity purposes of names of licensors
   38464           or authors of the material; or
   38465 
   38466        e. Declining to grant rights under trademark law for use of some
   38467           trade names, trademarks, or service marks; or
   38468 
   38469        f. Requiring indemnification of licensors and authors of that
   38470           material by anyone who conveys the material (or modified
   38471           versions of it) with contractual assumptions of liability to
   38472           the recipient, for any liability that these contractual
   38473           assumptions directly impose on those licensors and authors.
   38474 
   38475      All other non-permissive additional terms are considered "further
   38476      restrictions" within the meaning of section 10.  If the Program as
   38477      you received it, or any part of it, contains a notice stating that
   38478      it is governed by this License along with a term that is a further
   38479      restriction, you may remove that term.  If a license document
   38480      contains a further restriction but permits relicensing or
   38481      conveying under this License, you may add to a covered work
   38482      material governed by the terms of that license document, provided
   38483      that the further restriction does not survive such relicensing or
   38484      conveying.
   38485 
   38486      If you add terms to a covered work in accord with this section, you
   38487      must place, in the relevant source files, a statement of the
   38488      additional terms that apply to those files, or a notice indicating
   38489      where to find the applicable terms.
   38490 
   38491      Additional terms, permissive or non-permissive, may be stated in
   38492      the form of a separately written license, or stated as exceptions;
   38493      the above requirements apply either way.
   38494 
   38495   8. Termination.
   38496 
   38497      You may not propagate or modify a covered work except as expressly
   38498      provided under this License.  Any attempt otherwise to propagate or
   38499      modify it is void, and will automatically terminate your rights
   38500      under this License (including any patent licenses granted under
   38501      the third paragraph of section 11).
   38502 
   38503      However, if you cease all violation of this License, then your
   38504      license from a particular copyright holder is reinstated (a)
   38505      provisionally, unless and until the copyright holder explicitly
   38506      and finally terminates your license, and (b) permanently, if the
   38507      copyright holder fails to notify you of the violation by some
   38508      reasonable means prior to 60 days after the cessation.
   38509 
   38510      Moreover, your license from a particular copyright holder is
   38511      reinstated permanently if the copyright holder notifies you of the
   38512      violation by some reasonable means, this is the first time you have
   38513      received notice of violation of this License (for any work) from
   38514      that copyright holder, and you cure the violation prior to 30 days
   38515      after your receipt of the notice.
   38516 
   38517      Termination of your rights under this section does not terminate
   38518      the licenses of parties who have received copies or rights from
   38519      you under this License.  If your rights have been terminated and
   38520      not permanently reinstated, you do not qualify to receive new
   38521      licenses for the same material under section 10.
   38522 
   38523   9. Acceptance Not Required for Having Copies.
   38524 
   38525      You are not required to accept this License in order to receive or
   38526      run a copy of the Program.  Ancillary propagation of a covered work
   38527      occurring solely as a consequence of using peer-to-peer
   38528      transmission to receive a copy likewise does not require
   38529      acceptance.  However, nothing other than this License grants you
   38530      permission to propagate or modify any covered work.  These actions
   38531      infringe copyright if you do not accept this License.  Therefore,
   38532      by modifying or propagating a covered work, you indicate your
   38533      acceptance of this License to do so.
   38534 
   38535  10. Automatic Licensing of Downstream Recipients.
   38536 
   38537      Each time you convey a covered work, the recipient automatically
   38538      receives a license from the original licensors, to run, modify and
   38539      propagate that work, subject to this License.  You are not
   38540      responsible for enforcing compliance by third parties with this
   38541      License.
   38542 
   38543      An "entity transaction" is a transaction transferring control of an
   38544      organization, or substantially all assets of one, or subdividing an
   38545      organization, or merging organizations.  If propagation of a
   38546      covered work results from an entity transaction, each party to that
   38547      transaction who receives a copy of the work also receives whatever
   38548      licenses to the work the party's predecessor in interest had or
   38549      could give under the previous paragraph, plus a right to
   38550      possession of the Corresponding Source of the work from the
   38551      predecessor in interest, if the predecessor has it or can get it
   38552      with reasonable efforts.
   38553 
   38554      You may not impose any further restrictions on the exercise of the
   38555      rights granted or affirmed under this License.  For example, you
   38556      may not impose a license fee, royalty, or other charge for
   38557      exercise of rights granted under this License, and you may not
   38558      initiate litigation (including a cross-claim or counterclaim in a
   38559      lawsuit) alleging that any patent claim is infringed by making,
   38560      using, selling, offering for sale, or importing the Program or any
   38561      portion of it.
   38562 
   38563  11. Patents.
   38564 
   38565      A "contributor" is a copyright holder who authorizes use under this
   38566      License of the Program or a work on which the Program is based.
   38567      The work thus licensed is called the contributor's "contributor
   38568      version".
   38569 
   38570      A contributor's "essential patent claims" are all patent claims
   38571      owned or controlled by the contributor, whether already acquired or
   38572      hereafter acquired, that would be infringed by some manner,
   38573      permitted by this License, of making, using, or selling its
   38574      contributor version, but do not include claims that would be
   38575      infringed only as a consequence of further modification of the
   38576      contributor version.  For purposes of this definition, "control"
   38577      includes the right to grant patent sublicenses in a manner
   38578      consistent with the requirements of this License.
   38579 
   38580      Each contributor grants you a non-exclusive, worldwide,
   38581      royalty-free patent license under the contributor's essential
   38582      patent claims, to make, use, sell, offer for sale, import and
   38583      otherwise run, modify and propagate the contents of its
   38584      contributor version.
   38585 
   38586      In the following three paragraphs, a "patent license" is any
   38587      express agreement or commitment, however denominated, not to
   38588      enforce a patent (such as an express permission to practice a
   38589      patent or covenant not to sue for patent infringement).  To
   38590      "grant" such a patent license to a party means to make such an
   38591      agreement or commitment not to enforce a patent against the party.
   38592 
   38593      If you convey a covered work, knowingly relying on a patent
   38594      license, and the Corresponding Source of the work is not available
   38595      for anyone to copy, free of charge and under the terms of this
   38596      License, through a publicly available network server or other
   38597      readily accessible means, then you must either (1) cause the
   38598      Corresponding Source to be so available, or (2) arrange to deprive
   38599      yourself of the benefit of the patent license for this particular
   38600      work, or (3) arrange, in a manner consistent with the requirements
   38601      of this License, to extend the patent license to downstream
   38602      recipients.  "Knowingly relying" means you have actual knowledge
   38603      that, but for the patent license, your conveying the covered work
   38604      in a country, or your recipient's use of the covered work in a
   38605      country, would infringe one or more identifiable patents in that
   38606      country that you have reason to believe are valid.
   38607 
   38608      If, pursuant to or in connection with a single transaction or
   38609      arrangement, you convey, or propagate by procuring conveyance of, a
   38610      covered work, and grant a patent license to some of the parties
   38611      receiving the covered work authorizing them to use, propagate,
   38612      modify or convey a specific copy of the covered work, then the
   38613      patent license you grant is automatically extended to all
   38614      recipients of the covered work and works based on it.
   38615 
   38616      A patent license is "discriminatory" if it does not include within
   38617      the scope of its coverage, prohibits the exercise of, or is
   38618      conditioned on the non-exercise of one or more of the rights that
   38619      are specifically granted under this License.  You may not convey a
   38620      covered work if you are a party to an arrangement with a third
   38621      party that is in the business of distributing software, under
   38622      which you make payment to the third party based on the extent of
   38623      your activity of conveying the work, and under which the third
   38624      party grants, to any of the parties who would receive the covered
   38625      work from you, a discriminatory patent license (a) in connection
   38626      with copies of the covered work conveyed by you (or copies made
   38627      from those copies), or (b) primarily for and in connection with
   38628      specific products or compilations that contain the covered work,
   38629      unless you entered into that arrangement, or that patent license
   38630      was granted, prior to 28 March 2007.
   38631 
   38632      Nothing in this License shall be construed as excluding or limiting
   38633      any implied license or other defenses to infringement that may
   38634      otherwise be available to you under applicable patent law.
   38635 
   38636  12. No Surrender of Others' Freedom.
   38637 
   38638      If conditions are imposed on you (whether by court order,
   38639      agreement or otherwise) that contradict the conditions of this
   38640      License, they do not excuse you from the conditions of this
   38641      License.  If you cannot convey a covered work so as to satisfy
   38642      simultaneously your obligations under this License and any other
   38643      pertinent obligations, then as a consequence you may not convey it
   38644      at all.  For example, if you agree to terms that obligate you to
   38645      collect a royalty for further conveying from those to whom you
   38646      convey the Program, the only way you could satisfy both those
   38647      terms and this License would be to refrain entirely from conveying
   38648      the Program.
   38649 
   38650  13. Use with the GNU Affero General Public License.
   38651 
   38652      Notwithstanding any other provision of this License, you have
   38653      permission to link or combine any covered work with a work licensed
   38654      under version 3 of the GNU Affero General Public License into a
   38655      single combined work, and to convey the resulting work.  The terms
   38656      of this License will continue to apply to the part which is the
   38657      covered work, but the special requirements of the GNU Affero
   38658      General Public License, section 13, concerning interaction through
   38659      a network will apply to the combination as such.
   38660 
   38661  14. Revised Versions of this License.
   38662 
   38663      The Free Software Foundation may publish revised and/or new
   38664      versions of the GNU General Public License from time to time.
   38665      Such new versions will be similar in spirit to the present
   38666      version, but may differ in detail to address new problems or
   38667      concerns.
   38668 
   38669      Each version is given a distinguishing version number.  If the
   38670      Program specifies that a certain numbered version of the GNU
   38671      General Public License "or any later version" applies to it, you
   38672      have the option of following the terms and conditions either of
   38673      that numbered version or of any later version published by the
   38674      Free Software Foundation.  If the Program does not specify a
   38675      version number of the GNU General Public License, you may choose
   38676      any version ever published by the Free Software Foundation.
   38677 
   38678      If the Program specifies that a proxy can decide which future
   38679      versions of the GNU General Public License can be used, that
   38680      proxy's public statement of acceptance of a version permanently
   38681      authorizes you to choose that version for the Program.
   38682 
   38683      Later license versions may give you additional or different
   38684      permissions.  However, no additional obligations are imposed on any
   38685      author or copyright holder as a result of your choosing to follow a
   38686      later version.
   38687 
   38688  15. Disclaimer of Warranty.
   38689 
   38690      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
   38691      APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
   38692      COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
   38693      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
   38694      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   38695      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
   38696      RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
   38697      SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
   38698      NECESSARY SERVICING, REPAIR OR CORRECTION.
   38699 
   38700  16. Limitation of Liability.
   38701 
   38702      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
   38703      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
   38704      AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
   38705      FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
   38706      CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
   38707      THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
   38708      BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
   38709      PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
   38710      PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
   38711      THE POSSIBILITY OF SUCH DAMAGES.
   38712 
   38713  17. Interpretation of Sections 15 and 16.
   38714 
   38715      If the disclaimer of warranty and limitation of liability provided
   38716      above cannot be given local legal effect according to their terms,
   38717      reviewing courts shall apply local law that most closely
   38718      approximates an absolute waiver of all civil liability in
   38719      connection with the Program, unless a warranty or assumption of
   38720      liability accompanies a copy of the Program in return for a fee.
   38721 
   38722 
   38723 END OF TERMS AND CONDITIONS
   38724 ===========================
   38725 
   38726 How to Apply These Terms to Your New Programs
   38727 =============================================
   38728 
   38729 If you develop a new program, and you want it to be of the greatest
   38730 possible use to the public, the best way to achieve this is to make it
   38731 free software which everyone can redistribute and change under these
   38732 terms.
   38733 
   38734  To do so, attach the following notices to the program.  It is safest
   38735 to attach them to the start of each source file to most effectively
   38736 state the exclusion of warranty; and each file should have at least the
   38737 "copyright" line and a pointer to where the full notice is found.
   38738 
   38739      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
   38740      Copyright (C) YEAR NAME OF AUTHOR
   38741 
   38742      This program is free software: you can redistribute it and/or modify
   38743      it under the terms of the GNU General Public License as published by
   38744      the Free Software Foundation, either version 3 of the License, or (at
   38745      your option) any later version.
   38746 
   38747      This program is distributed in the hope that it will be useful, but
   38748      WITHOUT ANY WARRANTY; without even the implied warranty of
   38749      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   38750      General Public License for more details.
   38751 
   38752      You should have received a copy of the GNU General Public License
   38753      along with this program.  If not, see `http://www.gnu.org/licenses/'.
   38754 
   38755  Also add information on how to contact you by electronic and paper
   38756 mail.
   38757 
   38758  If the program does terminal interaction, make it output a short
   38759 notice like this when it starts in an interactive mode:
   38760 
   38761      PROGRAM Copyright (C) YEAR NAME OF AUTHOR
   38762      This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
   38763      This is free software, and you are welcome to redistribute it
   38764      under certain conditions; type `show c' for details.
   38765 
   38766  The hypothetical commands `show w' and `show c' should show the
   38767 appropriate parts of the General Public License.  Of course, your
   38768 program's commands might be different; for a GUI interface, you would
   38769 use an "about box".
   38770 
   38771  You should also get your employer (if you work as a programmer) or
   38772 school, if any, to sign a "copyright disclaimer" for the program, if
   38773 necessary.  For more information on this, and how to apply and follow
   38774 the GNU GPL, see `http://www.gnu.org/licenses/'.
   38775 
   38776  The GNU General Public License does not permit incorporating your
   38777 program into proprietary programs.  If your program is a subroutine
   38778 library, you may consider it more useful to permit linking proprietary
   38779 applications with the library.  If this is what you want to do, use the
   38780 GNU Lesser General Public License instead of this License.  But first,
   38781 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
   38782 
   38783 
   38784 File: gccint.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
   38785 
   38786 GNU Free Documentation License
   38787 ******************************
   38788 
   38789                      Version 1.3, 3 November 2008
   38790 
   38791      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
   38792      `http://fsf.org/'
   38793 
   38794      Everyone is permitted to copy and distribute verbatim copies
   38795      of this license document, but changing it is not allowed.
   38796 
   38797   0. PREAMBLE
   38798 
   38799      The purpose of this License is to make a manual, textbook, or other
   38800      functional and useful document "free" in the sense of freedom: to
   38801      assure everyone the effective freedom to copy and redistribute it,
   38802      with or without modifying it, either commercially or
   38803      noncommercially.  Secondarily, this License preserves for the
   38804      author and publisher a way to get credit for their work, while not
   38805      being considered responsible for modifications made by others.
   38806 
   38807      This License is a kind of "copyleft", which means that derivative
   38808      works of the document must themselves be free in the same sense.
   38809      It complements the GNU General Public License, which is a copyleft
   38810      license designed for free software.
   38811 
   38812      We have designed this License in order to use it for manuals for
   38813      free software, because free software needs free documentation: a
   38814      free program should come with manuals providing the same freedoms
   38815      that the software does.  But this License is not limited to
   38816      software manuals; it can be used for any textual work, regardless
   38817      of subject matter or whether it is published as a printed book.
   38818      We recommend this License principally for works whose purpose is
   38819      instruction or reference.
   38820 
   38821   1. APPLICABILITY AND DEFINITIONS
   38822 
   38823      This License applies to any manual or other work, in any medium,
   38824      that contains a notice placed by the copyright holder saying it
   38825      can be distributed under the terms of this License.  Such a notice
   38826      grants a world-wide, royalty-free license, unlimited in duration,
   38827      to use that work under the conditions stated herein.  The
   38828      "Document", below, refers to any such manual or work.  Any member
   38829      of the public is a licensee, and is addressed as "you".  You
   38830      accept the license if you copy, modify or distribute the work in a
   38831      way requiring permission under copyright law.
   38832 
   38833      A "Modified Version" of the Document means any work containing the
   38834      Document or a portion of it, either copied verbatim, or with
   38835      modifications and/or translated into another language.
   38836 
   38837      A "Secondary Section" is a named appendix or a front-matter section
   38838      of the Document that deals exclusively with the relationship of the
   38839      publishers or authors of the Document to the Document's overall
   38840      subject (or to related matters) and contains nothing that could
   38841      fall directly within that overall subject.  (Thus, if the Document
   38842      is in part a textbook of mathematics, a Secondary Section may not
   38843      explain any mathematics.)  The relationship could be a matter of
   38844      historical connection with the subject or with related matters, or
   38845      of legal, commercial, philosophical, ethical or political position
   38846      regarding them.
   38847 
   38848      The "Invariant Sections" are certain Secondary Sections whose
   38849      titles are designated, as being those of Invariant Sections, in
   38850      the notice that says that the Document is released under this
   38851      License.  If a section does not fit the above definition of
   38852      Secondary then it is not allowed to be designated as Invariant.
   38853      The Document may contain zero Invariant Sections.  If the Document
   38854      does not identify any Invariant Sections then there are none.
   38855 
   38856      The "Cover Texts" are certain short passages of text that are
   38857      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
   38858      that says that the Document is released under this License.  A
   38859      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
   38860      be at most 25 words.
   38861 
   38862      A "Transparent" copy of the Document means a machine-readable copy,
   38863      represented in a format whose specification is available to the
   38864      general public, that is suitable for revising the document
   38865      straightforwardly with generic text editors or (for images
   38866      composed of pixels) generic paint programs or (for drawings) some
   38867      widely available drawing editor, and that is suitable for input to
   38868      text formatters or for automatic translation to a variety of
   38869      formats suitable for input to text formatters.  A copy made in an
   38870      otherwise Transparent file format whose markup, or absence of
   38871      markup, has been arranged to thwart or discourage subsequent
   38872      modification by readers is not Transparent.  An image format is
   38873      not Transparent if used for any substantial amount of text.  A
   38874      copy that is not "Transparent" is called "Opaque".
   38875 
   38876      Examples of suitable formats for Transparent copies include plain
   38877      ASCII without markup, Texinfo input format, LaTeX input format,
   38878      SGML or XML using a publicly available DTD, and
   38879      standard-conforming simple HTML, PostScript or PDF designed for
   38880      human modification.  Examples of transparent image formats include
   38881      PNG, XCF and JPG.  Opaque formats include proprietary formats that
   38882      can be read and edited only by proprietary word processors, SGML or
   38883      XML for which the DTD and/or processing tools are not generally
   38884      available, and the machine-generated HTML, PostScript or PDF
   38885      produced by some word processors for output purposes only.
   38886 
   38887      The "Title Page" means, for a printed book, the title page itself,
   38888      plus such following pages as are needed to hold, legibly, the
   38889      material this License requires to appear in the title page.  For
   38890      works in formats which do not have any title page as such, "Title
   38891      Page" means the text near the most prominent appearance of the
   38892      work's title, preceding the beginning of the body of the text.
   38893 
   38894      The "publisher" means any person or entity that distributes copies
   38895      of the Document to the public.
   38896 
   38897      A section "Entitled XYZ" means a named subunit of the Document
   38898      whose title either is precisely XYZ or contains XYZ in parentheses
   38899      following text that translates XYZ in another language.  (Here XYZ
   38900      stands for a specific section name mentioned below, such as
   38901      "Acknowledgements", "Dedications", "Endorsements", or "History".)
   38902      To "Preserve the Title" of such a section when you modify the
   38903      Document means that it remains a section "Entitled XYZ" according
   38904      to this definition.
   38905 
   38906      The Document may include Warranty Disclaimers next to the notice
   38907      which states that this License applies to the Document.  These
   38908      Warranty Disclaimers are considered to be included by reference in
   38909      this License, but only as regards disclaiming warranties: any other
   38910      implication that these Warranty Disclaimers may have is void and
   38911      has no effect on the meaning of this License.
   38912 
   38913   2. VERBATIM COPYING
   38914 
   38915      You may copy and distribute the Document in any medium, either
   38916      commercially or noncommercially, provided that this License, the
   38917      copyright notices, and the license notice saying this License
   38918      applies to the Document are reproduced in all copies, and that you
   38919      add no other conditions whatsoever to those of this License.  You
   38920      may not use technical measures to obstruct or control the reading
   38921      or further copying of the copies you make or distribute.  However,
   38922      you may accept compensation in exchange for copies.  If you
   38923      distribute a large enough number of copies you must also follow
   38924      the conditions in section 3.
   38925 
   38926      You may also lend copies, under the same conditions stated above,
   38927      and you may publicly display copies.
   38928 
   38929   3. COPYING IN QUANTITY
   38930 
   38931      If you publish printed copies (or copies in media that commonly
   38932      have printed covers) of the Document, numbering more than 100, and
   38933      the Document's license notice requires Cover Texts, you must
   38934      enclose the copies in covers that carry, clearly and legibly, all
   38935      these Cover Texts: Front-Cover Texts on the front cover, and
   38936      Back-Cover Texts on the back cover.  Both covers must also clearly
   38937      and legibly identify you as the publisher of these copies.  The
   38938      front cover must present the full title with all words of the
   38939      title equally prominent and visible.  You may add other material
   38940      on the covers in addition.  Copying with changes limited to the
   38941      covers, as long as they preserve the title of the Document and
   38942      satisfy these conditions, can be treated as verbatim copying in
   38943      other respects.
   38944 
   38945      If the required texts for either cover are too voluminous to fit
   38946      legibly, you should put the first ones listed (as many as fit
   38947      reasonably) on the actual cover, and continue the rest onto
   38948      adjacent pages.
   38949 
   38950      If you publish or distribute Opaque copies of the Document
   38951      numbering more than 100, you must either include a
   38952      machine-readable Transparent copy along with each Opaque copy, or
   38953      state in or with each Opaque copy a computer-network location from
   38954      which the general network-using public has access to download
   38955      using public-standard network protocols a complete Transparent
   38956      copy of the Document, free of added material.  If you use the
   38957      latter option, you must take reasonably prudent steps, when you
   38958      begin distribution of Opaque copies in quantity, to ensure that
   38959      this Transparent copy will remain thus accessible at the stated
   38960      location until at least one year after the last time you
   38961      distribute an Opaque copy (directly or through your agents or
   38962      retailers) of that edition to the public.
   38963 
   38964      It is requested, but not required, that you contact the authors of
   38965      the Document well before redistributing any large number of
   38966      copies, to give them a chance to provide you with an updated
   38967      version of the Document.
   38968 
   38969   4. MODIFICATIONS
   38970 
   38971      You may copy and distribute a Modified Version of the Document
   38972      under the conditions of sections 2 and 3 above, provided that you
   38973      release the Modified Version under precisely this License, with
   38974      the Modified Version filling the role of the Document, thus
   38975      licensing distribution and modification of the Modified Version to
   38976      whoever possesses a copy of it.  In addition, you must do these
   38977      things in the Modified Version:
   38978 
   38979        A. Use in the Title Page (and on the covers, if any) a title
   38980           distinct from that of the Document, and from those of
   38981           previous versions (which should, if there were any, be listed
   38982           in the History section of the Document).  You may use the
   38983           same title as a previous version if the original publisher of
   38984           that version gives permission.
   38985 
   38986        B. List on the Title Page, as authors, one or more persons or
   38987           entities responsible for authorship of the modifications in
   38988           the Modified Version, together with at least five of the
   38989           principal authors of the Document (all of its principal
   38990           authors, if it has fewer than five), unless they release you
   38991           from this requirement.
   38992 
   38993        C. State on the Title page the name of the publisher of the
   38994           Modified Version, as the publisher.
   38995 
   38996        D. Preserve all the copyright notices of the Document.
   38997 
   38998        E. Add an appropriate copyright notice for your modifications
   38999           adjacent to the other copyright notices.
   39000 
   39001        F. Include, immediately after the copyright notices, a license
   39002           notice giving the public permission to use the Modified
   39003           Version under the terms of this License, in the form shown in
   39004           the Addendum below.
   39005 
   39006        G. Preserve in that license notice the full lists of Invariant
   39007           Sections and required Cover Texts given in the Document's
   39008           license notice.
   39009 
   39010        H. Include an unaltered copy of this License.
   39011 
   39012        I. Preserve the section Entitled "History", Preserve its Title,
   39013           and add to it an item stating at least the title, year, new
   39014           authors, and publisher of the Modified Version as given on
   39015           the Title Page.  If there is no section Entitled "History" in
   39016           the Document, create one stating the title, year, authors,
   39017           and publisher of the Document as given on its Title Page,
   39018           then add an item describing the Modified Version as stated in
   39019           the previous sentence.
   39020 
   39021        J. Preserve the network location, if any, given in the Document
   39022           for public access to a Transparent copy of the Document, and
   39023           likewise the network locations given in the Document for
   39024           previous versions it was based on.  These may be placed in
   39025           the "History" section.  You may omit a network location for a
   39026           work that was published at least four years before the
   39027           Document itself, or if the original publisher of the version
   39028           it refers to gives permission.
   39029 
   39030        K. For any section Entitled "Acknowledgements" or "Dedications",
   39031           Preserve the Title of the section, and preserve in the
   39032           section all the substance and tone of each of the contributor
   39033           acknowledgements and/or dedications given therein.
   39034 
   39035        L. Preserve all the Invariant Sections of the Document,
   39036           unaltered in their text and in their titles.  Section numbers
   39037           or the equivalent are not considered part of the section
   39038           titles.
   39039 
   39040        M. Delete any section Entitled "Endorsements".  Such a section
   39041           may not be included in the Modified Version.
   39042 
   39043        N. Do not retitle any existing section to be Entitled
   39044           "Endorsements" or to conflict in title with any Invariant
   39045           Section.
   39046 
   39047        O. Preserve any Warranty Disclaimers.
   39048 
   39049      If the Modified Version includes new front-matter sections or
   39050      appendices that qualify as Secondary Sections and contain no
   39051      material copied from the Document, you may at your option
   39052      designate some or all of these sections as invariant.  To do this,
   39053      add their titles to the list of Invariant Sections in the Modified
   39054      Version's license notice.  These titles must be distinct from any
   39055      other section titles.
   39056 
   39057      You may add a section Entitled "Endorsements", provided it contains
   39058      nothing but endorsements of your Modified Version by various
   39059      parties--for example, statements of peer review or that the text
   39060      has been approved by an organization as the authoritative
   39061      definition of a standard.
   39062 
   39063      You may add a passage of up to five words as a Front-Cover Text,
   39064      and a passage of up to 25 words as a Back-Cover Text, to the end
   39065      of the list of Cover Texts in the Modified Version.  Only one
   39066      passage of Front-Cover Text and one of Back-Cover Text may be
   39067      added by (or through arrangements made by) any one entity.  If the
   39068      Document already includes a cover text for the same cover,
   39069      previously added by you or by arrangement made by the same entity
   39070      you are acting on behalf of, you may not add another; but you may
   39071      replace the old one, on explicit permission from the previous
   39072      publisher that added the old one.
   39073 
   39074      The author(s) and publisher(s) of the Document do not by this
   39075      License give permission to use their names for publicity for or to
   39076      assert or imply endorsement of any Modified Version.
   39077 
   39078   5. COMBINING DOCUMENTS
   39079 
   39080      You may combine the Document with other documents released under
   39081      this License, under the terms defined in section 4 above for
   39082      modified versions, provided that you include in the combination
   39083      all of the Invariant Sections of all of the original documents,
   39084      unmodified, and list them all as Invariant Sections of your
   39085      combined work in its license notice, and that you preserve all
   39086      their Warranty Disclaimers.
   39087 
   39088      The combined work need only contain one copy of this License, and
   39089      multiple identical Invariant Sections may be replaced with a single
   39090      copy.  If there are multiple Invariant Sections with the same name
   39091      but different contents, make the title of each such section unique
   39092      by adding at the end of it, in parentheses, the name of the
   39093      original author or publisher of that section if known, or else a
   39094      unique number.  Make the same adjustment to the section titles in
   39095      the list of Invariant Sections in the license notice of the
   39096      combined work.
   39097 
   39098      In the combination, you must combine any sections Entitled
   39099      "History" in the various original documents, forming one section
   39100      Entitled "History"; likewise combine any sections Entitled
   39101      "Acknowledgements", and any sections Entitled "Dedications".  You
   39102      must delete all sections Entitled "Endorsements."
   39103 
   39104   6. COLLECTIONS OF DOCUMENTS
   39105 
   39106      You may make a collection consisting of the Document and other
   39107      documents released under this License, and replace the individual
   39108      copies of this License in the various documents with a single copy
   39109      that is included in the collection, provided that you follow the
   39110      rules of this License for verbatim copying of each of the
   39111      documents in all other respects.
   39112 
   39113      You may extract a single document from such a collection, and
   39114      distribute it individually under this License, provided you insert
   39115      a copy of this License into the extracted document, and follow
   39116      this License in all other respects regarding verbatim copying of
   39117      that document.
   39118 
   39119   7. AGGREGATION WITH INDEPENDENT WORKS
   39120 
   39121      A compilation of the Document or its derivatives with other
   39122      separate and independent documents or works, in or on a volume of
   39123      a storage or distribution medium, is called an "aggregate" if the
   39124      copyright resulting from the compilation is not used to limit the
   39125      legal rights of the compilation's users beyond what the individual
   39126      works permit.  When the Document is included in an aggregate, this
   39127      License does not apply to the other works in the aggregate which
   39128      are not themselves derivative works of the Document.
   39129 
   39130      If the Cover Text requirement of section 3 is applicable to these
   39131      copies of the Document, then if the Document is less than one half
   39132      of the entire aggregate, the Document's Cover Texts may be placed
   39133      on covers that bracket the Document within the aggregate, or the
   39134      electronic equivalent of covers if the Document is in electronic
   39135      form.  Otherwise they must appear on printed covers that bracket
   39136      the whole aggregate.
   39137 
   39138   8. TRANSLATION
   39139 
   39140      Translation is considered a kind of modification, so you may
   39141      distribute translations of the Document under the terms of section
   39142      4.  Replacing Invariant Sections with translations requires special
   39143      permission from their copyright holders, but you may include
   39144      translations of some or all Invariant Sections in addition to the
   39145      original versions of these Invariant Sections.  You may include a
   39146      translation of this License, and all the license notices in the
   39147      Document, and any Warranty Disclaimers, provided that you also
   39148      include the original English version of this License and the
   39149      original versions of those notices and disclaimers.  In case of a
   39150      disagreement between the translation and the original version of
   39151      this License or a notice or disclaimer, the original version will
   39152      prevail.
   39153 
   39154      If a section in the Document is Entitled "Acknowledgements",
   39155      "Dedications", or "History", the requirement (section 4) to
   39156      Preserve its Title (section 1) will typically require changing the
   39157      actual title.
   39158 
   39159   9. TERMINATION
   39160 
   39161      You may not copy, modify, sublicense, or distribute the Document
   39162      except as expressly provided under this License.  Any attempt
   39163      otherwise to copy, modify, sublicense, or distribute it is void,
   39164      and will automatically terminate your rights under this License.
   39165 
   39166      However, if you cease all violation of this License, then your
   39167      license from a particular copyright holder is reinstated (a)
   39168      provisionally, unless and until the copyright holder explicitly
   39169      and finally terminates your license, and (b) permanently, if the
   39170      copyright holder fails to notify you of the violation by some
   39171      reasonable means prior to 60 days after the cessation.
   39172 
   39173      Moreover, your license from a particular copyright holder is
   39174      reinstated permanently if the copyright holder notifies you of the
   39175      violation by some reasonable means, this is the first time you have
   39176      received notice of violation of this License (for any work) from
   39177      that copyright holder, and you cure the violation prior to 30 days
   39178      after your receipt of the notice.
   39179 
   39180      Termination of your rights under this section does not terminate
   39181      the licenses of parties who have received copies or rights from
   39182      you under this License.  If your rights have been terminated and
   39183      not permanently reinstated, receipt of a copy of some or all of
   39184      the same material does not give you any rights to use it.
   39185 
   39186  10. FUTURE REVISIONS OF THIS LICENSE
   39187 
   39188      The Free Software Foundation may publish new, revised versions of
   39189      the GNU Free Documentation License from time to time.  Such new
   39190      versions will be similar in spirit to the present version, but may
   39191      differ in detail to address new problems or concerns.  See
   39192      `http://www.gnu.org/copyleft/'.
   39193 
   39194      Each version of the License is given a distinguishing version
   39195      number.  If the Document specifies that a particular numbered
   39196      version of this License "or any later version" applies to it, you
   39197      have the option of following the terms and conditions either of
   39198      that specified version or of any later version that has been
   39199      published (not as a draft) by the Free Software Foundation.  If
   39200      the Document does not specify a version number of this License,
   39201      you may choose any version ever published (not as a draft) by the
   39202      Free Software Foundation.  If the Document specifies that a proxy
   39203      can decide which future versions of this License can be used, that
   39204      proxy's public statement of acceptance of a version permanently
   39205      authorizes you to choose that version for the Document.
   39206 
   39207  11. RELICENSING
   39208 
   39209      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
   39210      World Wide Web server that publishes copyrightable works and also
   39211      provides prominent facilities for anybody to edit those works.  A
   39212      public wiki that anybody can edit is an example of such a server.
   39213      A "Massive Multiauthor Collaboration" (or "MMC") contained in the
   39214      site means any set of copyrightable works thus published on the MMC
   39215      site.
   39216 
   39217      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
   39218      license published by Creative Commons Corporation, a not-for-profit
   39219      corporation with a principal place of business in San Francisco,
   39220      California, as well as future copyleft versions of that license
   39221      published by that same organization.
   39222 
   39223      "Incorporate" means to publish or republish a Document, in whole or
   39224      in part, as part of another Document.
   39225 
   39226      An MMC is "eligible for relicensing" if it is licensed under this
   39227      License, and if all works that were first published under this
   39228      License somewhere other than this MMC, and subsequently
   39229      incorporated in whole or in part into the MMC, (1) had no cover
   39230      texts or invariant sections, and (2) were thus incorporated prior
   39231      to November 1, 2008.
   39232 
   39233      The operator of an MMC Site may republish an MMC contained in the
   39234      site under CC-BY-SA on the same site at any time before August 1,
   39235      2009, provided the MMC is eligible for relicensing.
   39236 
   39237 
   39238 ADDENDUM: How to use this License for your documents
   39239 ====================================================
   39240 
   39241 To use this License in a document you have written, include a copy of
   39242 the License in the document and put the following copyright and license
   39243 notices just after the title page:
   39244 
   39245        Copyright (C)  YEAR  YOUR NAME.
   39246        Permission is granted to copy, distribute and/or modify this document
   39247        under the terms of the GNU Free Documentation License, Version 1.3
   39248        or any later version published by the Free Software Foundation;
   39249        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
   39250        Texts.  A copy of the license is included in the section entitled ``GNU
   39251        Free Documentation License''.
   39252 
   39253  If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
   39254 replace the "with...Texts." line with this:
   39255 
   39256          with the Invariant Sections being LIST THEIR TITLES, with
   39257          the Front-Cover Texts being LIST, and with the Back-Cover Texts
   39258          being LIST.
   39259 
   39260  If you have Invariant Sections without Cover Texts, or some other
   39261 combination of the three, merge those two alternatives to suit the
   39262 situation.
   39263 
   39264  If your document contains nontrivial examples of program code, we
   39265 recommend releasing these examples in parallel under your choice of
   39266 free software license, such as the GNU General Public License, to
   39267 permit their use in free software.
   39268 
   39269 
   39270 File: gccint.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
   39271 
   39272 Contributors to GCC
   39273 *******************
   39274 
   39275 The GCC project would like to thank its many contributors.  Without
   39276 them the project would not have been nearly as successful as it has
   39277 been.  Any omissions in this list are accidental.  Feel free to contact
   39278 <law (a] redhat.com> or <gerald (a] pfeifer.com> if you have been left out or
   39279 some of your contributions are not listed.  Please keep this list in
   39280 alphabetical order.
   39281 
   39282    * Analog Devices helped implement the support for complex data types
   39283      and iterators.
   39284 
   39285    * John David Anglin for threading-related fixes and improvements to
   39286      libstdc++-v3, and the HP-UX port.
   39287 
   39288    * James van Artsdalen wrote the code that makes efficient use of the
   39289      Intel 80387 register stack.
   39290 
   39291    * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
   39292      Series port.
   39293 
   39294    * Alasdair Baird for various bug fixes.
   39295 
   39296    * Giovanni Bajo for analyzing lots of complicated C++ problem
   39297      reports.
   39298 
   39299    * Peter Barada for his work to improve code generation for new
   39300      ColdFire cores.
   39301 
   39302    * Gerald Baumgartner added the signature extension to the C++ front
   39303      end.
   39304 
   39305    * Godmar Back for his Java improvements and encouragement.
   39306 
   39307    * Scott Bambrough for help porting the Java compiler.
   39308 
   39309    * Wolfgang Bangerth for processing tons of bug reports.
   39310 
   39311    * Jon Beniston for his Microsoft Windows port of Java and port to
   39312      Lattice Mico32.
   39313 
   39314    * Daniel Berlin for better DWARF2 support, faster/better
   39315      optimizations, improved alias analysis, plus migrating GCC to
   39316      Bugzilla.
   39317 
   39318    * Geoff Berry for his Java object serialization work and various
   39319      patches.
   39320 
   39321    * Uros Bizjak for the implementation of x87 math built-in functions
   39322      and for various middle end and i386 back end improvements and bug
   39323      fixes.
   39324 
   39325    * Eric Blake for helping to make GCJ and libgcj conform to the
   39326      specifications.
   39327 
   39328    * Janne Blomqvist for contributions to GNU Fortran.
   39329 
   39330    * Segher Boessenkool for various fixes.
   39331 
   39332    * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
   39333      other Java work.
   39334 
   39335    * Neil Booth for work on cpplib, lang hooks, debug hooks and other
   39336      miscellaneous clean-ups.
   39337 
   39338    * Steven Bosscher for integrating the GNU Fortran front end into GCC
   39339      and for contributing to the tree-ssa branch.
   39340 
   39341    * Eric Botcazou for fixing middle- and backend bugs left and right.
   39342 
   39343    * Per Bothner for his direction via the steering committee and
   39344      various improvements to the infrastructure for supporting new
   39345      languages.  Chill front end implementation.  Initial
   39346      implementations of cpplib, fix-header, config.guess, libio, and
   39347      past C++ library (libg++) maintainer.  Dreaming up, designing and
   39348      implementing much of GCJ.
   39349 
   39350    * Devon Bowen helped port GCC to the Tahoe.
   39351 
   39352    * Don Bowman for mips-vxworks contributions.
   39353 
   39354    * Dave Brolley for work on cpplib and Chill.
   39355 
   39356    * Paul Brook for work on the ARM architecture and maintaining GNU
   39357      Fortran.
   39358 
   39359    * Robert Brown implemented the support for Encore 32000 systems.
   39360 
   39361    * Christian Bruel for improvements to local store elimination.
   39362 
   39363    * Herman A.J. ten Brugge for various fixes.
   39364 
   39365    * Joerg Brunsmann for Java compiler hacking and help with the GCJ
   39366      FAQ.
   39367 
   39368    * Joe Buck for his direction via the steering committee.
   39369 
   39370    * Craig Burley for leadership of the G77 Fortran effort.
   39371 
   39372    * Stephan Buys for contributing Doxygen notes for libstdc++.
   39373 
   39374    * Paolo Carlini for libstdc++ work: lots of efficiency improvements
   39375      to the C++ strings, streambufs and formatted I/O, hard detective
   39376      work on the frustrating localization issues, and keeping up with
   39377      the problem reports.
   39378 
   39379    * John Carr for his alias work, SPARC hacking, infrastructure
   39380      improvements, previous contributions to the steering committee,
   39381      loop optimizations, etc.
   39382 
   39383    * Stephane Carrez for 68HC11 and 68HC12 ports.
   39384 
   39385    * Steve Chamberlain for support for the Renesas SH and H8 processors
   39386      and the PicoJava processor, and for GCJ config fixes.
   39387 
   39388    * Glenn Chambers for help with the GCJ FAQ.
   39389 
   39390    * John-Marc Chandonia for various libgcj patches.
   39391 
   39392    * Denis Chertykov for contributing and maintaining the AVR port, the
   39393      first GCC port for an 8-bit architecture.
   39394 
   39395    * Scott Christley for his Objective-C contributions.
   39396 
   39397    * Eric Christopher for his Java porting help and clean-ups.
   39398 
   39399    * Branko Cibej for more warning contributions.
   39400 
   39401    * The GNU Classpath project for all of their merged runtime code.
   39402 
   39403    * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help',
   39404      and other random hacking.
   39405 
   39406    * Michael Cook for libstdc++ cleanup patches to reduce warnings.
   39407 
   39408    * R. Kelley Cook for making GCC buildable from a read-only directory
   39409      as well as other miscellaneous build process and documentation
   39410      clean-ups.
   39411 
   39412    * Ralf Corsepius for SH testing and minor bug fixing.
   39413 
   39414    * Stan Cox for care and feeding of the x86 port and lots of behind
   39415      the scenes hacking.
   39416 
   39417    * Alex Crain provided changes for the 3b1.
   39418 
   39419    * Ian Dall for major improvements to the NS32k port.
   39420 
   39421    * Paul Dale for his work to add uClinux platform support to the m68k
   39422      backend.
   39423 
   39424    * Dario Dariol contributed the four varieties of sample programs
   39425      that print a copy of their source.
   39426 
   39427    * Russell Davidson for fstream and stringstream fixes in libstdc++.
   39428 
   39429    * Bud Davis for work on the G77 and GNU Fortran compilers.
   39430 
   39431    * Mo DeJong for GCJ and libgcj bug fixes.
   39432 
   39433    * DJ Delorie for the DJGPP port, build and libiberty maintenance,
   39434      various bug fixes, and the M32C and MeP ports.
   39435 
   39436    * Arnaud Desitter for helping to debug GNU Fortran.
   39437 
   39438    * Gabriel Dos Reis for contributions to G++, contributions and
   39439      maintenance of GCC diagnostics infrastructure, libstdc++-v3,
   39440      including `valarray<>', `complex<>', maintaining the numerics
   39441      library (including that pesky `<limits>' :-) and keeping
   39442      up-to-date anything to do with numbers.
   39443 
   39444    * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
   39445      ISO C99 support, CFG dumping support, etc., plus support of the
   39446      C++ runtime libraries including for all kinds of C interface
   39447      issues, contributing and maintaining `complex<>', sanity checking
   39448      and disbursement, configuration architecture, libio maintenance,
   39449      and early math work.
   39450 
   39451    * Zdenek Dvorak for a new loop unroller and various fixes.
   39452 
   39453    * Michael Eager for his work on the Xilinx MicroBlaze port.
   39454 
   39455    * Richard Earnshaw for his ongoing work with the ARM.
   39456 
   39457    * David Edelsohn for his direction via the steering committee,
   39458      ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
   39459      loop changes, doing the entire AIX port of libstdc++ with his bare
   39460      hands, and for ensuring GCC properly keeps working on AIX.
   39461 
   39462    * Kevin Ediger for the floating point formatting of num_put::do_put
   39463      in libstdc++.
   39464 
   39465    * Phil Edwards for libstdc++ work including configuration hackery,
   39466      documentation maintainer, chief breaker of the web pages, the
   39467      occasional iostream bug fix, and work on shared library symbol
   39468      versioning.
   39469 
   39470    * Paul Eggert for random hacking all over GCC.
   39471 
   39472    * Mark Elbrecht for various DJGPP improvements, and for libstdc++
   39473      configuration support for locales and fstream-related fixes.
   39474 
   39475    * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
   39476      iostreams.
   39477 
   39478    * Christian Ehrhardt for dealing with bug reports.
   39479 
   39480    * Ben Elliston for his work to move the Objective-C runtime into its
   39481      own subdirectory and for his work on autoconf.
   39482 
   39483    * Revital Eres for work on the PowerPC 750CL port.
   39484 
   39485    * Marc Espie for OpenBSD support.
   39486 
   39487    * Doug Evans for much of the global optimization framework, arc,
   39488      m32r, and SPARC work.
   39489 
   39490    * Christopher Faylor for his work on the Cygwin port and for caring
   39491      and feeding the gcc.gnu.org box and saving its users tons of spam.
   39492 
   39493    * Fred Fish for BeOS support and Ada fixes.
   39494 
   39495    * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
   39496 
   39497    * Peter Gerwinski for various bug fixes and the Pascal front end.
   39498 
   39499    * Kaveh R. Ghazi for his direction via the steering committee,
   39500      amazing work to make `-W -Wall -W* -Werror' useful, and
   39501      continuously testing GCC on a plethora of platforms.  Kaveh
   39502      extends his gratitude to the CAIP Center at Rutgers University for
   39503      providing him with computing resources to work on Free Software
   39504      since the late 1980s.
   39505 
   39506    * John Gilmore for a donation to the FSF earmarked improving GNU
   39507      Java.
   39508 
   39509    * Judy Goldberg for c++ contributions.
   39510 
   39511    * Torbjorn Granlund for various fixes and the c-torture testsuite,
   39512      multiply- and divide-by-constant optimization, improved long long
   39513      support, improved leaf function register allocation, and his
   39514      direction via the steering committee.
   39515 
   39516    * Anthony Green for his `-Os' contributions, the moxie port, and
   39517      Java front end work.
   39518 
   39519    * Stu Grossman for gdb hacking, allowing GCJ developers to debug
   39520      Java code.
   39521 
   39522    * Michael K. Gschwind contributed the port to the PDP-11.
   39523 
   39524    * Richard Guenther for his ongoing middle-end contributions and bug
   39525      fixes and for release management.
   39526 
   39527    * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
   39528      the support for Dwarf symbolic debugging information, and much of
   39529      the support for System V Release 4.  He has also worked heavily on
   39530      the Intel 386 and 860 support.
   39531 
   39532    * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
   39533      GCSE.
   39534 
   39535    * Bruno Haible for improvements in the runtime overhead for EH, new
   39536      warnings and assorted bug fixes.
   39537 
   39538    * Andrew Haley for his amazing Java compiler and library efforts.
   39539 
   39540    * Chris Hanson assisted in making GCC work on HP-UX for the 9000
   39541      series 300.
   39542 
   39543    * Michael Hayes for various thankless work he's done trying to get
   39544      the c30/c40 ports functional.  Lots of loop and unroll
   39545      improvements and fixes.
   39546 
   39547    * Dara Hazeghi for wading through myriads of target-specific bug
   39548      reports.
   39549 
   39550    * Kate Hedstrom for staking the G77 folks with an initial testsuite.
   39551 
   39552    * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
   39553      work, loop opts, and generally fixing lots of old problems we've
   39554      ignored for years, flow rewrite and lots of further stuff,
   39555      including reviewing tons of patches.
   39556 
   39557    * Aldy Hernandez for working on the PowerPC port, SIMD support, and
   39558      various fixes.
   39559 
   39560    * Nobuyuki Hikichi of Software Research Associates, Tokyo,
   39561      contributed the support for the Sony NEWS machine.
   39562 
   39563    * Kazu Hirata for caring and feeding the Renesas H8/300 port and
   39564      various fixes.
   39565 
   39566    * Katherine Holcomb for work on GNU Fortran.
   39567 
   39568    * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
   39569      of testing and bug fixing, particularly of GCC configury code.
   39570 
   39571    * Steve Holmgren for MachTen patches.
   39572 
   39573    * Jan Hubicka for his x86 port improvements.
   39574 
   39575    * Falk Hueffner for working on C and optimization bug reports.
   39576 
   39577    * Bernardo Innocenti for his m68k work, including merging of
   39578      ColdFire improvements and uClinux support.
   39579 
   39580    * Christian Iseli for various bug fixes.
   39581 
   39582    * Kamil Iskra for general m68k hacking.
   39583 
   39584    * Lee Iverson for random fixes and MIPS testing.
   39585 
   39586    * Andreas Jaeger for testing and benchmarking of GCC and various bug
   39587      fixes.
   39588 
   39589    * Jakub Jelinek for his SPARC work and sibling call optimizations as
   39590      well as lots of bug fixes and test cases, and for improving the
   39591      Java build system.
   39592 
   39593    * Janis Johnson for ia64 testing and fixes, her quality improvement
   39594      sidetracks, and web page maintenance.
   39595 
   39596    * Kean Johnston for SCO OpenServer support and various fixes.
   39597 
   39598    * Tim Josling for the sample language treelang based originally on
   39599      Richard Kenner's "toy" language.
   39600 
   39601    * Nicolai Josuttis for additional libstdc++ documentation.
   39602 
   39603    * Klaus Kaempf for his ongoing work to make alpha-vms a viable
   39604      target.
   39605 
   39606    * Steven G. Kargl for work on GNU Fortran.
   39607 
   39608    * David Kashtan of SRI adapted GCC to VMS.
   39609 
   39610    * Ryszard Kabatek for many, many libstdc++ bug fixes and
   39611      optimizations of strings, especially member functions, and for
   39612      auto_ptr fixes.
   39613 
   39614    * Geoffrey Keating for his ongoing work to make the PPC work for
   39615      GNU/Linux and his automatic regression tester.
   39616 
   39617    * Brendan Kehoe for his ongoing work with G++ and for a lot of early
   39618      work in just about every part of libstdc++.
   39619 
   39620    * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
   39621      MIL-STD-1750A.
   39622 
   39623    * Richard Kenner of the New York University Ultracomputer Research
   39624      Laboratory wrote the machine descriptions for the AMD 29000, the
   39625      DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
   39626      support for instruction attributes.  He also made changes to
   39627      better support RISC processors including changes to common
   39628      subexpression elimination, strength reduction, function calling
   39629      sequence handling, and condition code support, in addition to
   39630      generalizing the code for frame pointer elimination and delay slot
   39631      scheduling.  Richard Kenner was also the head maintainer of GCC
   39632      for several years.
   39633 
   39634    * Mumit Khan for various contributions to the Cygwin and Mingw32
   39635      ports and maintaining binary releases for Microsoft Windows hosts,
   39636      and for massive libstdc++ porting work to Cygwin/Mingw32.
   39637 
   39638    * Robin Kirkham for cpu32 support.
   39639 
   39640    * Mark Klein for PA improvements.
   39641 
   39642    * Thomas Koenig for various bug fixes.
   39643 
   39644    * Bruce Korb for the new and improved fixincludes code.
   39645 
   39646    * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
   39647      effort.
   39648 
   39649    * Charles LaBrec contributed the support for the Integrated Solutions
   39650      68020 system.
   39651 
   39652    * Asher Langton and Mike Kumbera for contributing Cray pointer
   39653      support to GNU Fortran, and for other GNU Fortran improvements.
   39654 
   39655    * Jeff Law for his direction via the steering committee,
   39656      coordinating the entire egcs project and GCC 2.95, rolling out
   39657      snapshots and releases, handling merges from GCC2, reviewing tons
   39658      of patches that might have fallen through the cracks else, and
   39659      random but extensive hacking.
   39660 
   39661    * Marc Lehmann for his direction via the steering committee and
   39662      helping with analysis and improvements of x86 performance.
   39663 
   39664    * Victor Leikehman for work on GNU Fortran.
   39665 
   39666    * Ted Lemon wrote parts of the RTL reader and printer.
   39667 
   39668    * Kriang Lerdsuwanakij for C++ improvements including template as
   39669      template parameter support, and many C++ fixes.
   39670 
   39671    * Warren Levy for tremendous work on libgcj (Java Runtime Library)
   39672      and random work on the Java front end.
   39673 
   39674    * Alain Lichnewsky ported GCC to the MIPS CPU.
   39675 
   39676    * Oskar Liljeblad for hacking on AWT and his many Java bug reports
   39677      and patches.
   39678 
   39679    * Robert Lipe for OpenServer support, new testsuites, testing, etc.
   39680 
   39681    * Chen Liqin for various S+core related fixes/improvement, and for
   39682      maintaining the S+core port.
   39683 
   39684    * Weiwen Liu for testing and various bug fixes.
   39685 
   39686    * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other
   39687      diagnostics fixes and improvements.
   39688 
   39689    * Dave Love for his ongoing work with the Fortran front end and
   39690      runtime libraries.
   39691 
   39692    * Martin von Lo"wis for internal consistency checking infrastructure,
   39693      various C++ improvements including namespace support, and tons of
   39694      assistance with libstdc++/compiler merges.
   39695 
   39696    * H.J. Lu for his previous contributions to the steering committee,
   39697      many x86 bug reports, prototype patches, and keeping the GNU/Linux
   39698      ports working.
   39699 
   39700    * Greg McGary for random fixes and (someday) bounded pointers.
   39701 
   39702    * Andrew MacLeod for his ongoing work in building a real EH system,
   39703      various code generation improvements, work on the global
   39704      optimizer, etc.
   39705 
   39706    * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
   39707      hacking improvements to compile-time performance, overall
   39708      knowledge and direction in the area of instruction scheduling, and
   39709      design and implementation of the automaton based instruction
   39710      scheduler.
   39711 
   39712    * Bob Manson for his behind the scenes work on dejagnu.
   39713 
   39714    * Philip Martin for lots of libstdc++ string and vector iterator
   39715      fixes and improvements, and string clean up and testsuites.
   39716 
   39717    * All of the Mauve project contributors, for Java test code.
   39718 
   39719    * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
   39720 
   39721    * Adam Megacz for his work on the Microsoft Windows port of GCJ.
   39722 
   39723    * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
   39724      powerpc, haifa, ECOFF debug support, and other assorted hacking.
   39725 
   39726    * Jason Merrill for his direction via the steering committee and
   39727      leading the G++ effort.
   39728 
   39729    * Martin Michlmayr for testing GCC on several architectures using the
   39730      entire Debian archive.
   39731 
   39732    * David Miller for his direction via the steering committee, lots of
   39733      SPARC work, improvements in jump.c and interfacing with the Linux
   39734      kernel developers.
   39735 
   39736    * Gary Miller ported GCC to Charles River Data Systems machines.
   39737 
   39738    * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
   39739      the entire libstdc++ testsuite namespace-compatible.
   39740 
   39741    * Mark Mitchell for his direction via the steering committee,
   39742      mountains of C++ work, load/store hoisting out of loops, alias
   39743      analysis improvements, ISO C `restrict' support, and serving as
   39744      release manager for GCC 3.x.
   39745 
   39746    * Alan Modra for various GNU/Linux bits and testing.
   39747 
   39748    * Toon Moene for his direction via the steering committee, Fortran
   39749      maintenance, and his ongoing work to make us make Fortran run fast.
   39750 
   39751    * Jason Molenda for major help in the care and feeding of all the
   39752      services on the gcc.gnu.org (formerly egcs.cygnus.com)
   39753      machine--mail, web services, ftp services, etc etc.  Doing all
   39754      this work on scrap paper and the backs of envelopes would have
   39755      been... difficult.
   39756 
   39757    * Catherine Moore for fixing various ugly problems we have sent her
   39758      way, including the haifa bug which was killing the Alpha & PowerPC
   39759      Linux kernels.
   39760 
   39761    * Mike Moreton for his various Java patches.
   39762 
   39763    * David Mosberger-Tang for various Alpha improvements, and for the
   39764      initial IA-64 port.
   39765 
   39766    * Stephen Moshier contributed the floating point emulator that
   39767      assists in cross-compilation and permits support for floating
   39768      point numbers wider than 64 bits and for ISO C99 support.
   39769 
   39770    * Bill Moyer for his behind the scenes work on various issues.
   39771 
   39772    * Philippe De Muyter for his work on the m68k port.
   39773 
   39774    * Joseph S. Myers for his work on the PDP-11 port, format checking
   39775      and ISO C99 support, and continuous emphasis on (and contributions
   39776      to) documentation.
   39777 
   39778    * Nathan Myers for his work on libstdc++-v3: architecture and
   39779      authorship through the first three snapshots, including
   39780      implementation of locale infrastructure, string, shadow C headers,
   39781      and the initial project documentation (DESIGN, CHECKLIST, and so
   39782      forth).  Later, more work on MT-safe string and shadow headers.
   39783 
   39784    * Felix Natter for documentation on porting libstdc++.
   39785 
   39786    * Nathanael Nerode for cleaning up the configuration/build process.
   39787 
   39788    * NeXT, Inc. donated the front end that supports the Objective-C
   39789      language.
   39790 
   39791    * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
   39792      the search engine setup, various documentation fixes and other
   39793      small fixes.
   39794 
   39795    * Geoff Noer for his work on getting cygwin native builds working.
   39796 
   39797    * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
   39798      tracking web pages, GIMPLE tuples, and assorted fixes.
   39799 
   39800    * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
   39801      FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
   39802      related infrastructure improvements.
   39803 
   39804    * Alexandre Oliva for various build infrastructure improvements,
   39805      scripts and amazing testing work, including keeping libtool issues
   39806      sane and happy.
   39807 
   39808    * Stefan Olsson for work on mt_alloc.
   39809 
   39810    * Melissa O'Neill for various NeXT fixes.
   39811 
   39812    * Rainer Orth for random MIPS work, including improvements to GCC's
   39813      o32 ABI support, improvements to dejagnu's MIPS support, Java
   39814      configuration clean-ups and porting work, and maintaining the
   39815      IRIX, Solaris 2, and Tru64 UNIX ports.
   39816 
   39817    * Hartmut Penner for work on the s390 port.
   39818 
   39819    * Paul Petersen wrote the machine description for the Alliant FX/8.
   39820 
   39821    * Alexandre Petit-Bianco for implementing much of the Java compiler
   39822      and continued Java maintainership.
   39823 
   39824    * Matthias Pfaller for major improvements to the NS32k port.
   39825 
   39826    * Gerald Pfeifer for his direction via the steering committee,
   39827      pointing out lots of problems we need to solve, maintenance of the
   39828      web pages, and taking care of documentation maintenance in general.
   39829 
   39830    * Andrew Pinski for processing bug reports by the dozen.
   39831 
   39832    * Ovidiu Predescu for his work on the Objective-C front end and
   39833      runtime libraries.
   39834 
   39835    * Jerry Quinn for major performance improvements in C++ formatted
   39836      I/O.
   39837 
   39838    * Ken Raeburn for various improvements to checker, MIPS ports and
   39839      various cleanups in the compiler.
   39840 
   39841    * Rolf W. Rasmussen for hacking on AWT.
   39842 
   39843    * David Reese of Sun Microsystems contributed to the Solaris on
   39844      PowerPC port.
   39845 
   39846    * Volker Reichelt for keeping up with the problem reports.
   39847 
   39848    * Joern Rennecke for maintaining the sh port, loop, regmove & reload
   39849      hacking.
   39850 
   39851    * Loren J. Rittle for improvements to libstdc++-v3 including the
   39852      FreeBSD port, threading fixes, thread-related configury changes,
   39853      critical threading documentation, and solutions to really tricky
   39854      I/O problems, as well as keeping GCC properly working on FreeBSD
   39855      and continuous testing.
   39856 
   39857    * Craig Rodrigues for processing tons of bug reports.
   39858 
   39859    * Ola Ro"nnerup for work on mt_alloc.
   39860 
   39861    * Gavin Romig-Koch for lots of behind the scenes MIPS work.
   39862 
   39863    * David Ronis inspired and encouraged Craig to rewrite the G77
   39864      documentation in texinfo format by contributing a first pass at a
   39865      translation of the old `g77-0.5.16/f/DOC' file.
   39866 
   39867    * Ken Rose for fixes to GCC's delay slot filling code.
   39868 
   39869    * Paul Rubin wrote most of the preprocessor.
   39870 
   39871    * Pe'tur Runo'lfsson for major performance improvements in C++
   39872      formatted I/O and large file support in C++ filebuf.
   39873 
   39874    * Chip Salzenberg for libstdc++ patches and improvements to locales,
   39875      traits, Makefiles, libio, libtool hackery, and "long long" support.
   39876 
   39877    * Juha Sarlin for improvements to the H8 code generator.
   39878 
   39879    * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
   39880      300.
   39881 
   39882    * Roger Sayle for improvements to constant folding and GCC's RTL
   39883      optimizers as well as for fixing numerous bugs.
   39884 
   39885    * Bradley Schatz for his work on the GCJ FAQ.
   39886 
   39887    * Peter Schauer wrote the code to allow debugging to work on the
   39888      Alpha.
   39889 
   39890    * William Schelter did most of the work on the Intel 80386 support.
   39891 
   39892    * Tobias Schlu"ter for work on GNU Fortran.
   39893 
   39894    * Bernd Schmidt for various code generation improvements and major
   39895      work in the reload pass as well a serving as release manager for
   39896      GCC 2.95.3.
   39897 
   39898    * Peter Schmid for constant testing of libstdc++--especially
   39899      application testing, going above and beyond what was requested for
   39900      the release criteria--and libstdc++ header file tweaks.
   39901 
   39902    * Jason Schroeder for jcf-dump patches.
   39903 
   39904    * Andreas Schwab for his work on the m68k port.
   39905 
   39906    * Lars Segerlund for work on GNU Fortran.
   39907 
   39908    * Dodji Seketeli for numerous C++ bug fixes and debug info
   39909      improvements.
   39910 
   39911    * Joel Sherrill for his direction via the steering committee, RTEMS
   39912      contributions and RTEMS testing.
   39913 
   39914    * Nathan Sidwell for many C++ fixes/improvements.
   39915 
   39916    * Jeffrey Siegal for helping RMS with the original design of GCC,
   39917      some code which handles the parse tree and RTL data structures,
   39918      constant folding and help with the original VAX & m68k ports.
   39919 
   39920    * Kenny Simpson for prompting libstdc++ fixes due to defect reports
   39921      from the LWG (thereby keeping GCC in line with updates from the
   39922      ISO).
   39923 
   39924    * Franz Sirl for his ongoing work with making the PPC port stable
   39925      for GNU/Linux.
   39926 
   39927    * Andrey Slepuhin for assorted AIX hacking.
   39928 
   39929    * Trevor Smigiel for contributing the SPU port.
   39930 
   39931    * Christopher Smith did the port for Convex machines.
   39932 
   39933    * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
   39934 
   39935    * Randy Smith finished the Sun FPA support.
   39936 
   39937    * Scott Snyder for queue, iterator, istream, and string fixes and
   39938      libstdc++ testsuite entries.  Also for providing the patch to G77
   39939      to add rudimentary support for `INTEGER*1', `INTEGER*2', and
   39940      `LOGICAL*1'.
   39941 
   39942    * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
   39943 
   39944    * Richard Stallman, for writing the original GCC and launching the
   39945      GNU project.
   39946 
   39947    * Jan Stein of the Chalmers Computer Society provided support for
   39948      Genix, as well as part of the 32000 machine description.
   39949 
   39950    * Nigel Stephens for various mips16 related fixes/improvements.
   39951 
   39952    * Jonathan Stone wrote the machine description for the Pyramid
   39953      computer.
   39954 
   39955    * Graham Stott for various infrastructure improvements.
   39956 
   39957    * John Stracke for his Java HTTP protocol fixes.
   39958 
   39959    * Mike Stump for his Elxsi port, G++ contributions over the years
   39960      and more recently his vxworks contributions
   39961 
   39962    * Jeff Sturm for Java porting help, bug fixes, and encouragement.
   39963 
   39964    * Shigeya Suzuki for this fixes for the bsdi platforms.
   39965 
   39966    * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
   39967      support, general configury hacking, fixincludes, etc.
   39968 
   39969    * Holger Teutsch provided the support for the Clipper CPU.
   39970 
   39971    * Gary Thomas for his ongoing work to make the PPC work for
   39972      GNU/Linux.
   39973 
   39974    * Philipp Thomas for random bug fixes throughout the compiler
   39975 
   39976    * Jason Thorpe for thread support in libstdc++ on NetBSD.
   39977 
   39978    * Kresten Krab Thorup wrote the run time support for the Objective-C
   39979      language and the fantastic Java bytecode interpreter.
   39980 
   39981    * Michael Tiemann for random bug fixes, the first instruction
   39982      scheduler, initial C++ support, function integration, NS32k, SPARC
   39983      and M88k machine description work, delay slot scheduling.
   39984 
   39985    * Andreas Tobler for his work porting libgcj to Darwin.
   39986 
   39987    * Teemu Torma for thread safe exception handling support.
   39988 
   39989    * Leonard Tower wrote parts of the parser, RTL generator, and RTL
   39990      definitions, and of the VAX machine description.
   39991 
   39992    * Daniel Towner and Hariharan Sandanagobalane contributed and
   39993      maintain the picoChip port.
   39994 
   39995    * Tom Tromey for internationalization support and for his many Java
   39996      contributions and libgcj maintainership.
   39997 
   39998    * Lassi Tuura for improvements to config.guess to determine HP
   39999      processor types.
   40000 
   40001    * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
   40002 
   40003    * Andy Vaught for the design and initial implementation of the GNU
   40004      Fortran front end.
   40005 
   40006    * Brent Verner for work with the libstdc++ cshadow files and their
   40007      associated configure steps.
   40008 
   40009    * Todd Vierling for contributions for NetBSD ports.
   40010 
   40011    * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
   40012      guidance.
   40013 
   40014    * Dean Wakerley for converting the install documentation from HTML
   40015      to texinfo in time for GCC 3.0.
   40016 
   40017    * Krister Walfridsson for random bug fixes.
   40018 
   40019    * Feng Wang for contributions to GNU Fortran.
   40020 
   40021    * Stephen M. Webb for time and effort on making libstdc++ shadow
   40022      files work with the tricky Solaris 8+ headers, and for pushing the
   40023      build-time header tree.
   40024 
   40025    * John Wehle for various improvements for the x86 code generator,
   40026      related infrastructure improvements to help x86 code generation,
   40027      value range propagation and other work, WE32k port.
   40028 
   40029    * Ulrich Weigand for work on the s390 port.
   40030 
   40031    * Zack Weinberg for major work on cpplib and various other bug fixes.
   40032 
   40033    * Matt Welsh for help with Linux Threads support in GCJ.
   40034 
   40035    * Urban Widmark for help fixing java.io.
   40036 
   40037    * Mark Wielaard for new Java library code and his work integrating
   40038      with Classpath.
   40039 
   40040    * Dale Wiles helped port GCC to the Tahoe.
   40041 
   40042    * Bob Wilson from Tensilica, Inc. for the Xtensa port.
   40043 
   40044    * Jim Wilson for his direction via the steering committee, tackling
   40045      hard problems in various places that nobody else wanted to work
   40046      on, strength reduction and other loop optimizations.
   40047 
   40048    * Paul Woegerer and Tal Agmon for the CRX port.
   40049 
   40050    * Carlo Wood for various fixes.
   40051 
   40052    * Tom Wood for work on the m88k port.
   40053 
   40054    * Canqun Yang for work on GNU Fortran.
   40055 
   40056    * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
   40057      description for the Tron architecture (specifically, the Gmicro).
   40058 
   40059    * Kevin Zachmann helped port GCC to the Tahoe.
   40060 
   40061    * Ayal Zaks for Swing Modulo Scheduling (SMS).
   40062 
   40063    * Xiaoqiang Zhang for work on GNU Fortran.
   40064 
   40065    * Gilles Zunino for help porting Java to Irix.
   40066 
   40067 
   40068  The following people are recognized for their contributions to GNAT,
   40069 the Ada front end of GCC:
   40070    * Bernard Banner
   40071 
   40072    * Romain Berrendonner
   40073 
   40074    * Geert Bosch
   40075 
   40076    * Emmanuel Briot
   40077 
   40078    * Joel Brobecker
   40079 
   40080    * Ben Brosgol
   40081 
   40082    * Vincent Celier
   40083 
   40084    * Arnaud Charlet
   40085 
   40086    * Chien Chieng
   40087 
   40088    * Cyrille Comar
   40089 
   40090    * Cyrille Crozes
   40091 
   40092    * Robert Dewar
   40093 
   40094    * Gary Dismukes
   40095 
   40096    * Robert Duff
   40097 
   40098    * Ed Falis
   40099 
   40100    * Ramon Fernandez
   40101 
   40102    * Sam Figueroa
   40103 
   40104    * Vasiliy Fofanov
   40105 
   40106    * Michael Friess
   40107 
   40108    * Franco Gasperoni
   40109 
   40110    * Ted Giering
   40111 
   40112    * Matthew Gingell
   40113 
   40114    * Laurent Guerby
   40115 
   40116    * Jerome Guitton
   40117 
   40118    * Olivier Hainque
   40119 
   40120    * Jerome Hugues
   40121 
   40122    * Hristian Kirtchev
   40123 
   40124    * Jerome Lambourg
   40125 
   40126    * Bruno Leclerc
   40127 
   40128    * Albert Lee
   40129 
   40130    * Sean McNeil
   40131 
   40132    * Javier Miranda
   40133 
   40134    * Laurent Nana
   40135 
   40136    * Pascal Obry
   40137 
   40138    * Dong-Ik Oh
   40139 
   40140    * Laurent Pautet
   40141 
   40142    * Brett Porter
   40143 
   40144    * Thomas Quinot
   40145 
   40146    * Nicolas Roche
   40147 
   40148    * Pat Rogers
   40149 
   40150    * Jose Ruiz
   40151 
   40152    * Douglas Rupp
   40153 
   40154    * Sergey Rybin
   40155 
   40156    * Gail Schenker
   40157 
   40158    * Ed Schonberg
   40159 
   40160    * Nicolas Setton
   40161 
   40162    * Samuel Tardieu
   40163 
   40164 
   40165  The following people are recognized for their contributions of new
   40166 features, bug reports, testing and integration of classpath/libgcj for
   40167 GCC version 4.1:
   40168    * Lillian Angel for `JTree' implementation and lots Free Swing
   40169      additions and bug fixes.
   40170 
   40171    * Wolfgang Baer for `GapContent' bug fixes.
   40172 
   40173    * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
   40174      event fixes, lots of Free Swing work including `JTable' editing.
   40175 
   40176    * Stuart Ballard for RMI constant fixes.
   40177 
   40178    * Goffredo Baroncelli for `HTTPURLConnection' fixes.
   40179 
   40180    * Gary Benson for `MessageFormat' fixes.
   40181 
   40182    * Daniel Bonniot for `Serialization' fixes.
   40183 
   40184    * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
   40185      and `DOM xml:id' support.
   40186 
   40187    * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
   40188 
   40189    * Archie Cobbs for build fixes, VM interface updates,
   40190      `URLClassLoader' updates.
   40191 
   40192    * Kelley Cook for build fixes.
   40193 
   40194    * Martin Cordova for Suggestions for better `SocketTimeoutException'.
   40195 
   40196    * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite
   40197      and improvements.
   40198 
   40199    * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
   40200      2D support. Lots of imageio framework additions, lots of AWT and
   40201      Free Swing bug fixes.
   40202 
   40203    * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
   40204      fixes, better `Proxy' support, bug fixes and IKVM integration.
   40205 
   40206    * Santiago Gala for `AccessControlContext' fixes.
   40207 
   40208    * Nicolas Geoffray for `VMClassLoader' and `AccessController'
   40209      improvements.
   40210 
   40211    * David Gilbert for `basic' and `metal' icon and plaf support and
   40212      lots of documenting, Lots of Free Swing and metal theme additions.
   40213      `MetalIconFactory' implementation.
   40214 
   40215    * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
   40216 
   40217    * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
   40218      build speedups.
   40219 
   40220    * Kim Ho for `JFileChooser' implementation.
   40221 
   40222    * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
   40223      updates, `Serialization' fixes, `Properties' XML support and
   40224      generic branch work, VMIntegration guide update.
   40225 
   40226    * Bastiaan Huisman for `TimeZone' bug fixing.
   40227 
   40228    * Andreas Jaeger for mprec updates.
   40229 
   40230    * Paul Jenner for better `-Werror' support.
   40231 
   40232    * Ito Kazumitsu for `NetworkInterface' implementation and updates.
   40233 
   40234    * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
   40235      bug fixes all over. Lots of Free Swing work including styled text.
   40236 
   40237    * Simon Kitching for `String' cleanups and optimization suggestions.
   40238 
   40239    * Michael Koch for configuration fixes, `Locale' updates, bug and
   40240      build fixes.
   40241 
   40242    * Guilhem Lavaux for configuration, thread and channel fixes and
   40243      Kaffe integration. JCL native `Pointer' updates. Logger bug fixes.
   40244 
   40245    * David Lichteblau for JCL support library global/local reference
   40246      cleanups.
   40247 
   40248    * Aaron Luchko for JDWP updates and documentation fixes.
   40249 
   40250    * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
   40251      features.
   40252 
   40253    * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
   40254      fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
   40255      and implementing the Qt4 peers.
   40256 
   40257    * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
   40258      `SystemLogger' and `FileHandler' rotate implementations, NIO
   40259      `FileChannel.map' support, security and policy updates.
   40260 
   40261    * Bryce McKinlay for RMI work.
   40262 
   40263    * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
   40264      testing and documenting.
   40265 
   40266    * Kalle Olavi Niemitalo for build fixes.
   40267 
   40268    * Rainer Orth for build fixes.
   40269 
   40270    * Andrew Overholt for `File' locking fixes.
   40271 
   40272    * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
   40273 
   40274    * Olga Rodimina for `MenuSelectionManager' implementation.
   40275 
   40276    * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
   40277 
   40278    * Julian Scheid for documentation updates and gjdoc support.
   40279 
   40280    * Christian Schlichtherle for zip fixes and cleanups.
   40281 
   40282    * Robert Schuster for documentation updates and beans fixes,
   40283      `TreeNode' enumerations and `ActionCommand' and various fixes, XML
   40284      and URL, AWT and Free Swing bug fixes.
   40285 
   40286    * Keith Seitz for lots of JDWP work.
   40287 
   40288    * Christian Thalinger for 64-bit cleanups, Configuration and VM
   40289      interface fixes and `CACAO' integration, `fdlibm' updates.
   40290 
   40291    * Gael Thomas for `VMClassLoader' boot packages support suggestions.
   40292 
   40293    * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
   40294      support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
   40295 
   40296    * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
   40297      integration. `Qt4' build infrastructure, `SHA1PRNG' and
   40298      `GdkPixbugDecoder' updates.
   40299 
   40300    * Tom Tromey for Eclipse integration, generics work, lots of bug
   40301      fixes and gcj integration including coordinating The Big Merge.
   40302 
   40303    * Mark Wielaard for bug fixes, packaging and release management,
   40304      `Clipboard' implementation, system call interrupts and network
   40305      timeouts and `GdkPixpufDecoder' fixes.
   40306 
   40307 
   40308  In addition to the above, all of which also contributed time and
   40309 energy in testing GCC, we would like to thank the following for their
   40310 contributions to testing:
   40311 
   40312    * Michael Abd-El-Malek
   40313 
   40314    * Thomas Arend
   40315 
   40316    * Bonzo Armstrong
   40317 
   40318    * Steven Ashe
   40319 
   40320    * Chris Baldwin
   40321 
   40322    * David Billinghurst
   40323 
   40324    * Jim Blandy
   40325 
   40326    * Stephane Bortzmeyer
   40327 
   40328    * Horst von Brand
   40329 
   40330    * Frank Braun
   40331 
   40332    * Rodney Brown
   40333 
   40334    * Sidney Cadot
   40335 
   40336    * Bradford Castalia
   40337 
   40338    * Robert Clark
   40339 
   40340    * Jonathan Corbet
   40341 
   40342    * Ralph Doncaster
   40343 
   40344    * Richard Emberson
   40345 
   40346    * Levente Farkas
   40347 
   40348    * Graham Fawcett
   40349 
   40350    * Mark Fernyhough
   40351 
   40352    * Robert A. French
   40353 
   40354    * Jo"rgen Freyh
   40355 
   40356    * Mark K. Gardner
   40357 
   40358    * Charles-Antoine Gauthier
   40359 
   40360    * Yung Shing Gene
   40361 
   40362    * David Gilbert
   40363 
   40364    * Simon Gornall
   40365 
   40366    * Fred Gray
   40367 
   40368    * John Griffin
   40369 
   40370    * Patrik Hagglund
   40371 
   40372    * Phil Hargett
   40373 
   40374    * Amancio Hasty
   40375 
   40376    * Takafumi Hayashi
   40377 
   40378    * Bryan W. Headley
   40379 
   40380    * Kevin B. Hendricks
   40381 
   40382    * Joep Jansen
   40383 
   40384    * Christian Joensson
   40385 
   40386    * Michel Kern
   40387 
   40388    * David Kidd
   40389 
   40390    * Tobias Kuipers
   40391 
   40392    * Anand Krishnaswamy
   40393 
   40394    * A. O. V. Le Blanc
   40395 
   40396    * llewelly
   40397 
   40398    * Damon Love
   40399 
   40400    * Brad Lucier
   40401 
   40402    * Matthias Klose
   40403 
   40404    * Martin Knoblauch
   40405 
   40406    * Rick Lutowski
   40407 
   40408    * Jesse Macnish
   40409 
   40410    * Stefan Morrell
   40411 
   40412    * Anon A. Mous
   40413 
   40414    * Matthias Mueller
   40415 
   40416    * Pekka Nikander
   40417 
   40418    * Rick Niles
   40419 
   40420    * Jon Olson
   40421 
   40422    * Magnus Persson
   40423 
   40424    * Chris Pollard
   40425 
   40426    * Richard Polton
   40427 
   40428    * Derk Reefman
   40429 
   40430    * David Rees
   40431 
   40432    * Paul Reilly
   40433 
   40434    * Tom Reilly
   40435 
   40436    * Torsten Rueger
   40437 
   40438    * Danny Sadinoff
   40439 
   40440    * Marc Schifer
   40441 
   40442    * Erik Schnetter
   40443 
   40444    * Wayne K. Schroll
   40445 
   40446    * David Schuler
   40447 
   40448    * Vin Shelton
   40449 
   40450    * Tim Souder
   40451 
   40452    * Adam Sulmicki
   40453 
   40454    * Bill Thorson
   40455 
   40456    * George Talbot
   40457 
   40458    * Pedro A. M. Vazquez
   40459 
   40460    * Gregory Warnes
   40461 
   40462    * Ian Watson
   40463 
   40464    * David E. Young
   40465 
   40466    * And many others
   40467 
   40468  And finally we'd like to thank everyone who uses the compiler, provides
   40469 feedback and generally reminds us why we're doing this work in the first
   40470 place.
   40471 
   40472 
   40473 File: gccint.info,  Node: Option Index,  Next: Concept Index,  Prev: Contributors,  Up: Top
   40474 
   40475 Option Index
   40476 ************
   40477 
   40478 GCC's command line options are indexed here without any initial `-' or
   40479 `--'.  Where an option has both positive and negative forms (such as
   40480 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
   40481 indexed under the most appropriate form; it may sometimes be useful to
   40482 look up both forms.
   40483 
   40484 [index]
   40485 * Menu:
   40486 
   40487 * fltrans:                               LTO.                 (line 499)
   40488 * fltrans-output-list:                   LTO.                 (line 504)
   40489 * fwpa:                                  LTO.                 (line 490)
   40490 * msoft-float:                           Soft float library routines.
   40491                                                               (line   6)
   40492 
   40493 
   40494 File: gccint.info,  Node: Concept Index,  Prev: Option Index,  Up: Top
   40495 
   40496 Concept Index
   40497 *************
   40498 
   40499 [index]
   40500 * Menu:
   40501 
   40502 * ! in constraint:                       Multi-Alternative.  (line   47)
   40503 * # in constraint:                       Modifiers.          (line   67)
   40504 * # in template:                         Output Template.    (line   66)
   40505 * #pragma:                               Misc.               (line  381)
   40506 * % in constraint:                       Modifiers.          (line   45)
   40507 * % in GTY option:                       GTY Options.        (line   18)
   40508 * % in template:                         Output Template.    (line    6)
   40509 * & in constraint:                       Modifiers.          (line   25)
   40510 * (nil):                                 RTL Objects.        (line   73)
   40511 * * in constraint:                       Modifiers.          (line   72)
   40512 * * in template:                         Output Statement.   (line   29)
   40513 * + in constraint:                       Modifiers.          (line   12)
   40514 * -fsection-anchors <1>:                 Anchored Addresses. (line    6)
   40515 * -fsection-anchors:                     Special Accessors.  (line  110)
   40516 * /c in RTL dump:                        Flags.              (line  239)
   40517 * /f in RTL dump:                        Flags.              (line  247)
   40518 * /i in RTL dump:                        Flags.              (line  299)
   40519 * /j in RTL dump:                        Flags.              (line  314)
   40520 * /s in RTL dump:                        Flags.              (line  263)
   40521 * /u in RTL dump:                        Flags.              (line  324)
   40522 * /v in RTL dump:                        Flags.              (line  356)
   40523 * 0 in constraint:                       Simple Constraints. (line  130)
   40524 * < in constraint:                       Simple Constraints. (line   48)
   40525 * = in constraint:                       Modifiers.          (line    8)
   40526 * > in constraint:                       Simple Constraints. (line   61)
   40527 * ? in constraint:                       Multi-Alternative.  (line   41)
   40528 * \:                                     Output Template.    (line   46)
   40529 * __absvdi2:                             Integer library routines.
   40530                                                              (line  107)
   40531 * __absvsi2:                             Integer library routines.
   40532                                                              (line  106)
   40533 * __addda3:                              Fixed-point fractional library routines.
   40534                                                              (line   45)
   40535 * __adddf3:                              Soft float library routines.
   40536                                                              (line   23)
   40537 * __adddq3:                              Fixed-point fractional library routines.
   40538                                                              (line   33)
   40539 * __addha3:                              Fixed-point fractional library routines.
   40540                                                              (line   43)
   40541 * __addhq3:                              Fixed-point fractional library routines.
   40542                                                              (line   30)
   40543 * __addqq3:                              Fixed-point fractional library routines.
   40544                                                              (line   29)
   40545 * __addsa3:                              Fixed-point fractional library routines.
   40546                                                              (line   44)
   40547 * __addsf3:                              Soft float library routines.
   40548                                                              (line   22)
   40549 * __addsq3:                              Fixed-point fractional library routines.
   40550                                                              (line   31)
   40551 * __addta3:                              Fixed-point fractional library routines.
   40552                                                              (line   47)
   40553 * __addtf3:                              Soft float library routines.
   40554                                                              (line   25)
   40555 * __adduda3:                             Fixed-point fractional library routines.
   40556                                                              (line   53)
   40557 * __addudq3:                             Fixed-point fractional library routines.
   40558                                                              (line   41)
   40559 * __adduha3:                             Fixed-point fractional library routines.
   40560                                                              (line   49)
   40561 * __adduhq3:                             Fixed-point fractional library routines.
   40562                                                              (line   37)
   40563 * __adduqq3:                             Fixed-point fractional library routines.
   40564                                                              (line   35)
   40565 * __addusa3:                             Fixed-point fractional library routines.
   40566                                                              (line   51)
   40567 * __addusq3:                             Fixed-point fractional library routines.
   40568                                                              (line   39)
   40569 * __adduta3:                             Fixed-point fractional library routines.
   40570                                                              (line   55)
   40571 * __addvdi3:                             Integer library routines.
   40572                                                              (line  111)
   40573 * __addvsi3:                             Integer library routines.
   40574                                                              (line  110)
   40575 * __addxf3:                              Soft float library routines.
   40576                                                              (line   27)
   40577 * __ashlda3:                             Fixed-point fractional library routines.
   40578                                                              (line  351)
   40579 * __ashldi3:                             Integer library routines.
   40580                                                              (line   14)
   40581 * __ashldq3:                             Fixed-point fractional library routines.
   40582                                                              (line  340)
   40583 * __ashlha3:                             Fixed-point fractional library routines.
   40584                                                              (line  349)
   40585 * __ashlhq3:                             Fixed-point fractional library routines.
   40586                                                              (line  337)
   40587 * __ashlqq3:                             Fixed-point fractional library routines.
   40588                                                              (line  336)
   40589 * __ashlsa3:                             Fixed-point fractional library routines.
   40590                                                              (line  350)
   40591 * __ashlsi3:                             Integer library routines.
   40592                                                              (line   13)
   40593 * __ashlsq3:                             Fixed-point fractional library routines.
   40594                                                              (line  338)
   40595 * __ashlta3:                             Fixed-point fractional library routines.
   40596                                                              (line  353)
   40597 * __ashlti3:                             Integer library routines.
   40598                                                              (line   15)
   40599 * __ashluda3:                            Fixed-point fractional library routines.
   40600                                                              (line  359)
   40601 * __ashludq3:                            Fixed-point fractional library routines.
   40602                                                              (line  348)
   40603 * __ashluha3:                            Fixed-point fractional library routines.
   40604                                                              (line  355)
   40605 * __ashluhq3:                            Fixed-point fractional library routines.
   40606                                                              (line  344)
   40607 * __ashluqq3:                            Fixed-point fractional library routines.
   40608                                                              (line  342)
   40609 * __ashlusa3:                            Fixed-point fractional library routines.
   40610                                                              (line  357)
   40611 * __ashlusq3:                            Fixed-point fractional library routines.
   40612                                                              (line  346)
   40613 * __ashluta3:                            Fixed-point fractional library routines.
   40614                                                              (line  361)
   40615 * __ashrda3:                             Fixed-point fractional library routines.
   40616                                                              (line  371)
   40617 * __ashrdi3:                             Integer library routines.
   40618                                                              (line   19)
   40619 * __ashrdq3:                             Fixed-point fractional library routines.
   40620                                                              (line  368)
   40621 * __ashrha3:                             Fixed-point fractional library routines.
   40622                                                              (line  369)
   40623 * __ashrhq3:                             Fixed-point fractional library routines.
   40624                                                              (line  365)
   40625 * __ashrqq3:                             Fixed-point fractional library routines.
   40626                                                              (line  364)
   40627 * __ashrsa3:                             Fixed-point fractional library routines.
   40628                                                              (line  370)
   40629 * __ashrsi3:                             Integer library routines.
   40630                                                              (line   18)
   40631 * __ashrsq3:                             Fixed-point fractional library routines.
   40632                                                              (line  366)
   40633 * __ashrta3:                             Fixed-point fractional library routines.
   40634                                                              (line  373)
   40635 * __ashrti3:                             Integer library routines.
   40636                                                              (line   20)
   40637 * __bid_adddd3:                          Decimal float library routines.
   40638                                                              (line   25)
   40639 * __bid_addsd3:                          Decimal float library routines.
   40640                                                              (line   21)
   40641 * __bid_addtd3:                          Decimal float library routines.
   40642                                                              (line   29)
   40643 * __bid_divdd3:                          Decimal float library routines.
   40644                                                              (line   68)
   40645 * __bid_divsd3:                          Decimal float library routines.
   40646                                                              (line   64)
   40647 * __bid_divtd3:                          Decimal float library routines.
   40648                                                              (line   72)
   40649 * __bid_eqdd2:                           Decimal float library routines.
   40650                                                              (line  259)
   40651 * __bid_eqsd2:                           Decimal float library routines.
   40652                                                              (line  257)
   40653 * __bid_eqtd2:                           Decimal float library routines.
   40654                                                              (line  261)
   40655 * __bid_extendddtd2:                     Decimal float library routines.
   40656                                                              (line   92)
   40657 * __bid_extendddtf:                      Decimal float library routines.
   40658                                                              (line  140)
   40659 * __bid_extendddxf:                      Decimal float library routines.
   40660                                                              (line  134)
   40661 * __bid_extenddfdd:                      Decimal float library routines.
   40662                                                              (line  147)
   40663 * __bid_extenddftd:                      Decimal float library routines.
   40664                                                              (line  107)
   40665 * __bid_extendsddd2:                     Decimal float library routines.
   40666                                                              (line   88)
   40667 * __bid_extendsddf:                      Decimal float library routines.
   40668                                                              (line  128)
   40669 * __bid_extendsdtd2:                     Decimal float library routines.
   40670                                                              (line   90)
   40671 * __bid_extendsdtf:                      Decimal float library routines.
   40672                                                              (line  138)
   40673 * __bid_extendsdxf:                      Decimal float library routines.
   40674                                                              (line  132)
   40675 * __bid_extendsfdd:                      Decimal float library routines.
   40676                                                              (line  103)
   40677 * __bid_extendsfsd:                      Decimal float library routines.
   40678                                                              (line  145)
   40679 * __bid_extendsftd:                      Decimal float library routines.
   40680                                                              (line  105)
   40681 * __bid_extendtftd:                      Decimal float library routines.
   40682                                                              (line  149)
   40683 * __bid_extendxftd:                      Decimal float library routines.
   40684                                                              (line  109)
   40685 * __bid_fixdddi:                         Decimal float library routines.
   40686                                                              (line  170)
   40687 * __bid_fixddsi:                         Decimal float library routines.
   40688                                                              (line  162)
   40689 * __bid_fixsddi:                         Decimal float library routines.
   40690                                                              (line  168)
   40691 * __bid_fixsdsi:                         Decimal float library routines.
   40692                                                              (line  160)
   40693 * __bid_fixtddi:                         Decimal float library routines.
   40694                                                              (line  172)
   40695 * __bid_fixtdsi:                         Decimal float library routines.
   40696                                                              (line  164)
   40697 * __bid_fixunsdddi:                      Decimal float library routines.
   40698                                                              (line  187)
   40699 * __bid_fixunsddsi:                      Decimal float library routines.
   40700                                                              (line  178)
   40701 * __bid_fixunssddi:                      Decimal float library routines.
   40702                                                              (line  185)
   40703 * __bid_fixunssdsi:                      Decimal float library routines.
   40704                                                              (line  176)
   40705 * __bid_fixunstddi:                      Decimal float library routines.
   40706                                                              (line  189)
   40707 * __bid_fixunstdsi:                      Decimal float library routines.
   40708                                                              (line  180)
   40709 * __bid_floatdidd:                       Decimal float library routines.
   40710                                                              (line  205)
   40711 * __bid_floatdisd:                       Decimal float library routines.
   40712                                                              (line  203)
   40713 * __bid_floatditd:                       Decimal float library routines.
   40714                                                              (line  207)
   40715 * __bid_floatsidd:                       Decimal float library routines.
   40716                                                              (line  196)
   40717 * __bid_floatsisd:                       Decimal float library routines.
   40718                                                              (line  194)
   40719 * __bid_floatsitd:                       Decimal float library routines.
   40720                                                              (line  198)
   40721 * __bid_floatunsdidd:                    Decimal float library routines.
   40722                                                              (line  223)
   40723 * __bid_floatunsdisd:                    Decimal float library routines.
   40724                                                              (line  221)
   40725 * __bid_floatunsditd:                    Decimal float library routines.
   40726                                                              (line  225)
   40727 * __bid_floatunssidd:                    Decimal float library routines.
   40728                                                              (line  214)
   40729 * __bid_floatunssisd:                    Decimal float library routines.
   40730                                                              (line  212)
   40731 * __bid_floatunssitd:                    Decimal float library routines.
   40732                                                              (line  216)
   40733 * __bid_gedd2:                           Decimal float library routines.
   40734                                                              (line  277)
   40735 * __bid_gesd2:                           Decimal float library routines.
   40736                                                              (line  275)
   40737 * __bid_getd2:                           Decimal float library routines.
   40738                                                              (line  279)
   40739 * __bid_gtdd2:                           Decimal float library routines.
   40740                                                              (line  304)
   40741 * __bid_gtsd2:                           Decimal float library routines.
   40742                                                              (line  302)
   40743 * __bid_gttd2:                           Decimal float library routines.
   40744                                                              (line  306)
   40745 * __bid_ledd2:                           Decimal float library routines.
   40746                                                              (line  295)
   40747 * __bid_lesd2:                           Decimal float library routines.
   40748                                                              (line  293)
   40749 * __bid_letd2:                           Decimal float library routines.
   40750                                                              (line  297)
   40751 * __bid_ltdd2:                           Decimal float library routines.
   40752                                                              (line  286)
   40753 * __bid_ltsd2:                           Decimal float library routines.
   40754                                                              (line  284)
   40755 * __bid_lttd2:                           Decimal float library routines.
   40756                                                              (line  288)
   40757 * __bid_muldd3:                          Decimal float library routines.
   40758                                                              (line   54)
   40759 * __bid_mulsd3:                          Decimal float library routines.
   40760                                                              (line   50)
   40761 * __bid_multd3:                          Decimal float library routines.
   40762                                                              (line   58)
   40763 * __bid_nedd2:                           Decimal float library routines.
   40764                                                              (line  268)
   40765 * __bid_negdd2:                          Decimal float library routines.
   40766                                                              (line   78)
   40767 * __bid_negsd2:                          Decimal float library routines.
   40768                                                              (line   76)
   40769 * __bid_negtd2:                          Decimal float library routines.
   40770                                                              (line   80)
   40771 * __bid_nesd2:                           Decimal float library routines.
   40772                                                              (line  266)
   40773 * __bid_netd2:                           Decimal float library routines.
   40774                                                              (line  270)
   40775 * __bid_subdd3:                          Decimal float library routines.
   40776                                                              (line   39)
   40777 * __bid_subsd3:                          Decimal float library routines.
   40778                                                              (line   35)
   40779 * __bid_subtd3:                          Decimal float library routines.
   40780                                                              (line   43)
   40781 * __bid_truncdddf:                       Decimal float library routines.
   40782                                                              (line  153)
   40783 * __bid_truncddsd2:                      Decimal float library routines.
   40784                                                              (line   94)
   40785 * __bid_truncddsf:                       Decimal float library routines.
   40786                                                              (line  124)
   40787 * __bid_truncdfsd:                       Decimal float library routines.
   40788                                                              (line  111)
   40789 * __bid_truncsdsf:                       Decimal float library routines.
   40790                                                              (line  151)
   40791 * __bid_trunctddd2:                      Decimal float library routines.
   40792                                                              (line   98)
   40793 * __bid_trunctddf:                       Decimal float library routines.
   40794                                                              (line  130)
   40795 * __bid_trunctdsd2:                      Decimal float library routines.
   40796                                                              (line   96)
   40797 * __bid_trunctdsf:                       Decimal float library routines.
   40798                                                              (line  126)
   40799 * __bid_trunctdtf:                       Decimal float library routines.
   40800                                                              (line  155)
   40801 * __bid_trunctdxf:                       Decimal float library routines.
   40802                                                              (line  136)
   40803 * __bid_trunctfdd:                       Decimal float library routines.
   40804                                                              (line  119)
   40805 * __bid_trunctfsd:                       Decimal float library routines.
   40806                                                              (line  115)
   40807 * __bid_truncxfdd:                       Decimal float library routines.
   40808                                                              (line  117)
   40809 * __bid_truncxfsd:                       Decimal float library routines.
   40810                                                              (line  113)
   40811 * __bid_unorddd2:                        Decimal float library routines.
   40812                                                              (line  235)
   40813 * __bid_unordsd2:                        Decimal float library routines.
   40814                                                              (line  233)
   40815 * __bid_unordtd2:                        Decimal float library routines.
   40816                                                              (line  237)
   40817 * __bswapdi2:                            Integer library routines.
   40818                                                              (line  162)
   40819 * __bswapsi2:                            Integer library routines.
   40820                                                              (line  161)
   40821 * __builtin_classify_type:               Varargs.            (line   51)
   40822 * __builtin_next_arg:                    Varargs.            (line   42)
   40823 * __builtin_saveregs:                    Varargs.            (line   24)
   40824 * __clear_cache:                         Miscellaneous routines.
   40825                                                              (line   10)
   40826 * __clzdi2:                              Integer library routines.
   40827                                                              (line  131)
   40828 * __clzsi2:                              Integer library routines.
   40829                                                              (line  130)
   40830 * __clzti2:                              Integer library routines.
   40831                                                              (line  132)
   40832 * __cmpda2:                              Fixed-point fractional library routines.
   40833                                                              (line  451)
   40834 * __cmpdf2:                              Soft float library routines.
   40835                                                              (line  164)
   40836 * __cmpdi2:                              Integer library routines.
   40837                                                              (line   87)
   40838 * __cmpdq2:                              Fixed-point fractional library routines.
   40839                                                              (line  441)
   40840 * __cmpha2:                              Fixed-point fractional library routines.
   40841                                                              (line  449)
   40842 * __cmphq2:                              Fixed-point fractional library routines.
   40843                                                              (line  438)
   40844 * __cmpqq2:                              Fixed-point fractional library routines.
   40845                                                              (line  437)
   40846 * __cmpsa2:                              Fixed-point fractional library routines.
   40847                                                              (line  450)
   40848 * __cmpsf2:                              Soft float library routines.
   40849                                                              (line  163)
   40850 * __cmpsq2:                              Fixed-point fractional library routines.
   40851                                                              (line  439)
   40852 * __cmpta2:                              Fixed-point fractional library routines.
   40853                                                              (line  453)
   40854 * __cmptf2:                              Soft float library routines.
   40855                                                              (line  165)
   40856 * __cmpti2:                              Integer library routines.
   40857                                                              (line   88)
   40858 * __cmpuda2:                             Fixed-point fractional library routines.
   40859                                                              (line  458)
   40860 * __cmpudq2:                             Fixed-point fractional library routines.
   40861                                                              (line  448)
   40862 * __cmpuha2:                             Fixed-point fractional library routines.
   40863                                                              (line  455)
   40864 * __cmpuhq2:                             Fixed-point fractional library routines.
   40865                                                              (line  444)
   40866 * __cmpuqq2:                             Fixed-point fractional library routines.
   40867                                                              (line  443)
   40868 * __cmpusa2:                             Fixed-point fractional library routines.
   40869                                                              (line  456)
   40870 * __cmpusq2:                             Fixed-point fractional library routines.
   40871                                                              (line  446)
   40872 * __cmputa2:                             Fixed-point fractional library routines.
   40873                                                              (line  460)
   40874 * __CTOR_LIST__:                         Initialization.     (line   25)
   40875 * __ctzdi2:                              Integer library routines.
   40876                                                              (line  138)
   40877 * __ctzsi2:                              Integer library routines.
   40878                                                              (line  137)
   40879 * __ctzti2:                              Integer library routines.
   40880                                                              (line  139)
   40881 * __divda3:                              Fixed-point fractional library routines.
   40882                                                              (line  227)
   40883 * __divdc3:                              Soft float library routines.
   40884                                                              (line  252)
   40885 * __divdf3:                              Soft float library routines.
   40886                                                              (line   48)
   40887 * __divdi3:                              Integer library routines.
   40888                                                              (line   25)
   40889 * __divdq3:                              Fixed-point fractional library routines.
   40890                                                              (line  223)
   40891 * __divha3:                              Fixed-point fractional library routines.
   40892                                                              (line  225)
   40893 * __divhq3:                              Fixed-point fractional library routines.
   40894                                                              (line  220)
   40895 * __divqq3:                              Fixed-point fractional library routines.
   40896                                                              (line  219)
   40897 * __divsa3:                              Fixed-point fractional library routines.
   40898                                                              (line  226)
   40899 * __divsc3:                              Soft float library routines.
   40900                                                              (line  250)
   40901 * __divsf3:                              Soft float library routines.
   40902                                                              (line   47)
   40903 * __divsi3:                              Integer library routines.
   40904                                                              (line   24)
   40905 * __divsq3:                              Fixed-point fractional library routines.
   40906                                                              (line  221)
   40907 * __divta3:                              Fixed-point fractional library routines.
   40908                                                              (line  229)
   40909 * __divtc3:                              Soft float library routines.
   40910                                                              (line  254)
   40911 * __divtf3:                              Soft float library routines.
   40912                                                              (line   50)
   40913 * __divti3:                              Integer library routines.
   40914                                                              (line   26)
   40915 * __divxc3:                              Soft float library routines.
   40916                                                              (line  256)
   40917 * __divxf3:                              Soft float library routines.
   40918                                                              (line   52)
   40919 * __dpd_adddd3:                          Decimal float library routines.
   40920                                                              (line   23)
   40921 * __dpd_addsd3:                          Decimal float library routines.
   40922                                                              (line   19)
   40923 * __dpd_addtd3:                          Decimal float library routines.
   40924                                                              (line   27)
   40925 * __dpd_divdd3:                          Decimal float library routines.
   40926                                                              (line   66)
   40927 * __dpd_divsd3:                          Decimal float library routines.
   40928                                                              (line   62)
   40929 * __dpd_divtd3:                          Decimal float library routines.
   40930                                                              (line   70)
   40931 * __dpd_eqdd2:                           Decimal float library routines.
   40932                                                              (line  258)
   40933 * __dpd_eqsd2:                           Decimal float library routines.
   40934                                                              (line  256)
   40935 * __dpd_eqtd2:                           Decimal float library routines.
   40936                                                              (line  260)
   40937 * __dpd_extendddtd2:                     Decimal float library routines.
   40938                                                              (line   91)
   40939 * __dpd_extendddtf:                      Decimal float library routines.
   40940                                                              (line  139)
   40941 * __dpd_extendddxf:                      Decimal float library routines.
   40942                                                              (line  133)
   40943 * __dpd_extenddfdd:                      Decimal float library routines.
   40944                                                              (line  146)
   40945 * __dpd_extenddftd:                      Decimal float library routines.
   40946                                                              (line  106)
   40947 * __dpd_extendsddd2:                     Decimal float library routines.
   40948                                                              (line   87)
   40949 * __dpd_extendsddf:                      Decimal float library routines.
   40950                                                              (line  127)
   40951 * __dpd_extendsdtd2:                     Decimal float library routines.
   40952                                                              (line   89)
   40953 * __dpd_extendsdtf:                      Decimal float library routines.
   40954                                                              (line  137)
   40955 * __dpd_extendsdxf:                      Decimal float library routines.
   40956                                                              (line  131)
   40957 * __dpd_extendsfdd:                      Decimal float library routines.
   40958                                                              (line  102)
   40959 * __dpd_extendsfsd:                      Decimal float library routines.
   40960                                                              (line  144)
   40961 * __dpd_extendsftd:                      Decimal float library routines.
   40962                                                              (line  104)
   40963 * __dpd_extendtftd:                      Decimal float library routines.
   40964                                                              (line  148)
   40965 * __dpd_extendxftd:                      Decimal float library routines.
   40966                                                              (line  108)
   40967 * __dpd_fixdddi:                         Decimal float library routines.
   40968                                                              (line  169)
   40969 * __dpd_fixddsi:                         Decimal float library routines.
   40970                                                              (line  161)
   40971 * __dpd_fixsddi:                         Decimal float library routines.
   40972                                                              (line  167)
   40973 * __dpd_fixsdsi:                         Decimal float library routines.
   40974                                                              (line  159)
   40975 * __dpd_fixtddi:                         Decimal float library routines.
   40976                                                              (line  171)
   40977 * __dpd_fixtdsi:                         Decimal float library routines.
   40978                                                              (line  163)
   40979 * __dpd_fixunsdddi:                      Decimal float library routines.
   40980                                                              (line  186)
   40981 * __dpd_fixunsddsi:                      Decimal float library routines.
   40982                                                              (line  177)
   40983 * __dpd_fixunssddi:                      Decimal float library routines.
   40984                                                              (line  184)
   40985 * __dpd_fixunssdsi:                      Decimal float library routines.
   40986                                                              (line  175)
   40987 * __dpd_fixunstddi:                      Decimal float library routines.
   40988                                                              (line  188)
   40989 * __dpd_fixunstdsi:                      Decimal float library routines.
   40990                                                              (line  179)
   40991 * __dpd_floatdidd:                       Decimal float library routines.
   40992                                                              (line  204)
   40993 * __dpd_floatdisd:                       Decimal float library routines.
   40994                                                              (line  202)
   40995 * __dpd_floatditd:                       Decimal float library routines.
   40996                                                              (line  206)
   40997 * __dpd_floatsidd:                       Decimal float library routines.
   40998                                                              (line  195)
   40999 * __dpd_floatsisd:                       Decimal float library routines.
   41000                                                              (line  193)
   41001 * __dpd_floatsitd:                       Decimal float library routines.
   41002                                                              (line  197)
   41003 * __dpd_floatunsdidd:                    Decimal float library routines.
   41004                                                              (line  222)
   41005 * __dpd_floatunsdisd:                    Decimal float library routines.
   41006                                                              (line  220)
   41007 * __dpd_floatunsditd:                    Decimal float library routines.
   41008                                                              (line  224)
   41009 * __dpd_floatunssidd:                    Decimal float library routines.
   41010                                                              (line  213)
   41011 * __dpd_floatunssisd:                    Decimal float library routines.
   41012                                                              (line  211)
   41013 * __dpd_floatunssitd:                    Decimal float library routines.
   41014                                                              (line  215)
   41015 * __dpd_gedd2:                           Decimal float library routines.
   41016                                                              (line  276)
   41017 * __dpd_gesd2:                           Decimal float library routines.
   41018                                                              (line  274)
   41019 * __dpd_getd2:                           Decimal float library routines.
   41020                                                              (line  278)
   41021 * __dpd_gtdd2:                           Decimal float library routines.
   41022                                                              (line  303)
   41023 * __dpd_gtsd2:                           Decimal float library routines.
   41024                                                              (line  301)
   41025 * __dpd_gttd2:                           Decimal float library routines.
   41026                                                              (line  305)
   41027 * __dpd_ledd2:                           Decimal float library routines.
   41028                                                              (line  294)
   41029 * __dpd_lesd2:                           Decimal float library routines.
   41030                                                              (line  292)
   41031 * __dpd_letd2:                           Decimal float library routines.
   41032                                                              (line  296)
   41033 * __dpd_ltdd2:                           Decimal float library routines.
   41034                                                              (line  285)
   41035 * __dpd_ltsd2:                           Decimal float library routines.
   41036                                                              (line  283)
   41037 * __dpd_lttd2:                           Decimal float library routines.
   41038                                                              (line  287)
   41039 * __dpd_muldd3:                          Decimal float library routines.
   41040                                                              (line   52)
   41041 * __dpd_mulsd3:                          Decimal float library routines.
   41042                                                              (line   48)
   41043 * __dpd_multd3:                          Decimal float library routines.
   41044                                                              (line   56)
   41045 * __dpd_nedd2:                           Decimal float library routines.
   41046                                                              (line  267)
   41047 * __dpd_negdd2:                          Decimal float library routines.
   41048                                                              (line   77)
   41049 * __dpd_negsd2:                          Decimal float library routines.
   41050                                                              (line   75)
   41051 * __dpd_negtd2:                          Decimal float library routines.
   41052                                                              (line   79)
   41053 * __dpd_nesd2:                           Decimal float library routines.
   41054                                                              (line  265)
   41055 * __dpd_netd2:                           Decimal float library routines.
   41056                                                              (line  269)
   41057 * __dpd_subdd3:                          Decimal float library routines.
   41058                                                              (line   37)
   41059 * __dpd_subsd3:                          Decimal float library routines.
   41060                                                              (line   33)
   41061 * __dpd_subtd3:                          Decimal float library routines.
   41062                                                              (line   41)
   41063 * __dpd_truncdddf:                       Decimal float library routines.
   41064                                                              (line  152)
   41065 * __dpd_truncddsd2:                      Decimal float library routines.
   41066                                                              (line   93)
   41067 * __dpd_truncddsf:                       Decimal float library routines.
   41068                                                              (line  123)
   41069 * __dpd_truncdfsd:                       Decimal float library routines.
   41070                                                              (line  110)
   41071 * __dpd_truncsdsf:                       Decimal float library routines.
   41072                                                              (line  150)
   41073 * __dpd_trunctddd2:                      Decimal float library routines.
   41074                                                              (line   97)
   41075 * __dpd_trunctddf:                       Decimal float library routines.
   41076                                                              (line  129)
   41077 * __dpd_trunctdsd2:                      Decimal float library routines.
   41078                                                              (line   95)
   41079 * __dpd_trunctdsf:                       Decimal float library routines.
   41080                                                              (line  125)
   41081 * __dpd_trunctdtf:                       Decimal float library routines.
   41082                                                              (line  154)
   41083 * __dpd_trunctdxf:                       Decimal float library routines.
   41084                                                              (line  135)
   41085 * __dpd_trunctfdd:                       Decimal float library routines.
   41086                                                              (line  118)
   41087 * __dpd_trunctfsd:                       Decimal float library routines.
   41088                                                              (line  114)
   41089 * __dpd_truncxfdd:                       Decimal float library routines.
   41090                                                              (line  116)
   41091 * __dpd_truncxfsd:                       Decimal float library routines.
   41092                                                              (line  112)
   41093 * __dpd_unorddd2:                        Decimal float library routines.
   41094                                                              (line  234)
   41095 * __dpd_unordsd2:                        Decimal float library routines.
   41096                                                              (line  232)
   41097 * __dpd_unordtd2:                        Decimal float library routines.
   41098                                                              (line  236)
   41099 * __DTOR_LIST__:                         Initialization.     (line   25)
   41100 * __eqdf2:                               Soft float library routines.
   41101                                                              (line  194)
   41102 * __eqsf2:                               Soft float library routines.
   41103                                                              (line  193)
   41104 * __eqtf2:                               Soft float library routines.
   41105                                                              (line  195)
   41106 * __extenddftf2:                         Soft float library routines.
   41107                                                              (line   68)
   41108 * __extenddfxf2:                         Soft float library routines.
   41109                                                              (line   69)
   41110 * __extendsfdf2:                         Soft float library routines.
   41111                                                              (line   65)
   41112 * __extendsftf2:                         Soft float library routines.
   41113                                                              (line   66)
   41114 * __extendsfxf2:                         Soft float library routines.
   41115                                                              (line   67)
   41116 * __ffsdi2:                              Integer library routines.
   41117                                                              (line  144)
   41118 * __ffsti2:                              Integer library routines.
   41119                                                              (line  145)
   41120 * __fixdfdi:                             Soft float library routines.
   41121                                                              (line   88)
   41122 * __fixdfsi:                             Soft float library routines.
   41123                                                              (line   81)
   41124 * __fixdfti:                             Soft float library routines.
   41125                                                              (line   94)
   41126 * __fixsfdi:                             Soft float library routines.
   41127                                                              (line   87)
   41128 * __fixsfsi:                             Soft float library routines.
   41129                                                              (line   80)
   41130 * __fixsfti:                             Soft float library routines.
   41131                                                              (line   93)
   41132 * __fixtfdi:                             Soft float library routines.
   41133                                                              (line   89)
   41134 * __fixtfsi:                             Soft float library routines.
   41135                                                              (line   82)
   41136 * __fixtfti:                             Soft float library routines.
   41137                                                              (line   95)
   41138 * __fixunsdfdi:                          Soft float library routines.
   41139                                                              (line  108)
   41140 * __fixunsdfsi:                          Soft float library routines.
   41141                                                              (line  101)
   41142 * __fixunsdfti:                          Soft float library routines.
   41143                                                              (line  115)
   41144 * __fixunssfdi:                          Soft float library routines.
   41145                                                              (line  107)
   41146 * __fixunssfsi:                          Soft float library routines.
   41147                                                              (line  100)
   41148 * __fixunssfti:                          Soft float library routines.
   41149                                                              (line  114)
   41150 * __fixunstfdi:                          Soft float library routines.
   41151                                                              (line  109)
   41152 * __fixunstfsi:                          Soft float library routines.
   41153                                                              (line  102)
   41154 * __fixunstfti:                          Soft float library routines.
   41155                                                              (line  116)
   41156 * __fixunsxfdi:                          Soft float library routines.
   41157                                                              (line  110)
   41158 * __fixunsxfsi:                          Soft float library routines.
   41159                                                              (line  103)
   41160 * __fixunsxfti:                          Soft float library routines.
   41161                                                              (line  117)
   41162 * __fixxfdi:                             Soft float library routines.
   41163                                                              (line   90)
   41164 * __fixxfsi:                             Soft float library routines.
   41165                                                              (line   83)
   41166 * __fixxfti:                             Soft float library routines.
   41167                                                              (line   96)
   41168 * __floatdidf:                           Soft float library routines.
   41169                                                              (line  128)
   41170 * __floatdisf:                           Soft float library routines.
   41171                                                              (line  127)
   41172 * __floatditf:                           Soft float library routines.
   41173                                                              (line  129)
   41174 * __floatdixf:                           Soft float library routines.
   41175                                                              (line  130)
   41176 * __floatsidf:                           Soft float library routines.
   41177                                                              (line  122)
   41178 * __floatsisf:                           Soft float library routines.
   41179                                                              (line  121)
   41180 * __floatsitf:                           Soft float library routines.
   41181                                                              (line  123)
   41182 * __floatsixf:                           Soft float library routines.
   41183                                                              (line  124)
   41184 * __floattidf:                           Soft float library routines.
   41185                                                              (line  134)
   41186 * __floattisf:                           Soft float library routines.
   41187                                                              (line  133)
   41188 * __floattitf:                           Soft float library routines.
   41189                                                              (line  135)
   41190 * __floattixf:                           Soft float library routines.
   41191                                                              (line  136)
   41192 * __floatundidf:                         Soft float library routines.
   41193                                                              (line  146)
   41194 * __floatundisf:                         Soft float library routines.
   41195                                                              (line  145)
   41196 * __floatunditf:                         Soft float library routines.
   41197                                                              (line  147)
   41198 * __floatundixf:                         Soft float library routines.
   41199                                                              (line  148)
   41200 * __floatunsidf:                         Soft float library routines.
   41201                                                              (line  140)
   41202 * __floatunsisf:                         Soft float library routines.
   41203                                                              (line  139)
   41204 * __floatunsitf:                         Soft float library routines.
   41205                                                              (line  141)
   41206 * __floatunsixf:                         Soft float library routines.
   41207                                                              (line  142)
   41208 * __floatuntidf:                         Soft float library routines.
   41209                                                              (line  152)
   41210 * __floatuntisf:                         Soft float library routines.
   41211                                                              (line  151)
   41212 * __floatuntitf:                         Soft float library routines.
   41213                                                              (line  153)
   41214 * __floatuntixf:                         Soft float library routines.
   41215                                                              (line  154)
   41216 * __fractdadf:                           Fixed-point fractional library routines.
   41217                                                              (line  636)
   41218 * __fractdadi:                           Fixed-point fractional library routines.
   41219                                                              (line  633)
   41220 * __fractdadq:                           Fixed-point fractional library routines.
   41221                                                              (line  616)
   41222 * __fractdaha2:                          Fixed-point fractional library routines.
   41223                                                              (line  617)
   41224 * __fractdahi:                           Fixed-point fractional library routines.
   41225                                                              (line  631)
   41226 * __fractdahq:                           Fixed-point fractional library routines.
   41227                                                              (line  614)
   41228 * __fractdaqi:                           Fixed-point fractional library routines.
   41229                                                              (line  630)
   41230 * __fractdaqq:                           Fixed-point fractional library routines.
   41231                                                              (line  613)
   41232 * __fractdasa2:                          Fixed-point fractional library routines.
   41233                                                              (line  618)
   41234 * __fractdasf:                           Fixed-point fractional library routines.
   41235                                                              (line  635)
   41236 * __fractdasi:                           Fixed-point fractional library routines.
   41237                                                              (line  632)
   41238 * __fractdasq:                           Fixed-point fractional library routines.
   41239                                                              (line  615)
   41240 * __fractdata2:                          Fixed-point fractional library routines.
   41241                                                              (line  619)
   41242 * __fractdati:                           Fixed-point fractional library routines.
   41243                                                              (line  634)
   41244 * __fractdauda:                          Fixed-point fractional library routines.
   41245                                                              (line  627)
   41246 * __fractdaudq:                          Fixed-point fractional library routines.
   41247                                                              (line  624)
   41248 * __fractdauha:                          Fixed-point fractional library routines.
   41249                                                              (line  625)
   41250 * __fractdauhq:                          Fixed-point fractional library routines.
   41251                                                              (line  621)
   41252 * __fractdauqq:                          Fixed-point fractional library routines.
   41253                                                              (line  620)
   41254 * __fractdausa:                          Fixed-point fractional library routines.
   41255                                                              (line  626)
   41256 * __fractdausq:                          Fixed-point fractional library routines.
   41257                                                              (line  622)
   41258 * __fractdauta:                          Fixed-point fractional library routines.
   41259                                                              (line  629)
   41260 * __fractdfda:                           Fixed-point fractional library routines.
   41261                                                              (line 1025)
   41262 * __fractdfdq:                           Fixed-point fractional library routines.
   41263                                                              (line 1022)
   41264 * __fractdfha:                           Fixed-point fractional library routines.
   41265                                                              (line 1023)
   41266 * __fractdfhq:                           Fixed-point fractional library routines.
   41267                                                              (line 1020)
   41268 * __fractdfqq:                           Fixed-point fractional library routines.
   41269                                                              (line 1019)
   41270 * __fractdfsa:                           Fixed-point fractional library routines.
   41271                                                              (line 1024)
   41272 * __fractdfsq:                           Fixed-point fractional library routines.
   41273                                                              (line 1021)
   41274 * __fractdfta:                           Fixed-point fractional library routines.
   41275                                                              (line 1026)
   41276 * __fractdfuda:                          Fixed-point fractional library routines.
   41277                                                              (line 1033)
   41278 * __fractdfudq:                          Fixed-point fractional library routines.
   41279                                                              (line 1030)
   41280 * __fractdfuha:                          Fixed-point fractional library routines.
   41281                                                              (line 1031)
   41282 * __fractdfuhq:                          Fixed-point fractional library routines.
   41283                                                              (line 1028)
   41284 * __fractdfuqq:                          Fixed-point fractional library routines.
   41285                                                              (line 1027)
   41286 * __fractdfusa:                          Fixed-point fractional library routines.
   41287                                                              (line 1032)
   41288 * __fractdfusq:                          Fixed-point fractional library routines.
   41289                                                              (line 1029)
   41290 * __fractdfuta:                          Fixed-point fractional library routines.
   41291                                                              (line 1034)
   41292 * __fractdida:                           Fixed-point fractional library routines.
   41293                                                              (line  975)
   41294 * __fractdidq:                           Fixed-point fractional library routines.
   41295                                                              (line  972)
   41296 * __fractdiha:                           Fixed-point fractional library routines.
   41297                                                              (line  973)
   41298 * __fractdihq:                           Fixed-point fractional library routines.
   41299                                                              (line  970)
   41300 * __fractdiqq:                           Fixed-point fractional library routines.
   41301                                                              (line  969)
   41302 * __fractdisa:                           Fixed-point fractional library routines.
   41303                                                              (line  974)
   41304 * __fractdisq:                           Fixed-point fractional library routines.
   41305                                                              (line  971)
   41306 * __fractdita:                           Fixed-point fractional library routines.
   41307                                                              (line  976)
   41308 * __fractdiuda:                          Fixed-point fractional library routines.
   41309                                                              (line  983)
   41310 * __fractdiudq:                          Fixed-point fractional library routines.
   41311                                                              (line  980)
   41312 * __fractdiuha:                          Fixed-point fractional library routines.
   41313                                                              (line  981)
   41314 * __fractdiuhq:                          Fixed-point fractional library routines.
   41315                                                              (line  978)
   41316 * __fractdiuqq:                          Fixed-point fractional library routines.
   41317                                                              (line  977)
   41318 * __fractdiusa:                          Fixed-point fractional library routines.
   41319                                                              (line  982)
   41320 * __fractdiusq:                          Fixed-point fractional library routines.
   41321                                                              (line  979)
   41322 * __fractdiuta:                          Fixed-point fractional library routines.
   41323                                                              (line  984)
   41324 * __fractdqda:                           Fixed-point fractional library routines.
   41325                                                              (line  544)
   41326 * __fractdqdf:                           Fixed-point fractional library routines.
   41327                                                              (line  566)
   41328 * __fractdqdi:                           Fixed-point fractional library routines.
   41329                                                              (line  563)
   41330 * __fractdqha:                           Fixed-point fractional library routines.
   41331                                                              (line  542)
   41332 * __fractdqhi:                           Fixed-point fractional library routines.
   41333                                                              (line  561)
   41334 * __fractdqhq2:                          Fixed-point fractional library routines.
   41335                                                              (line  540)
   41336 * __fractdqqi:                           Fixed-point fractional library routines.
   41337                                                              (line  560)
   41338 * __fractdqqq2:                          Fixed-point fractional library routines.
   41339                                                              (line  539)
   41340 * __fractdqsa:                           Fixed-point fractional library routines.
   41341                                                              (line  543)
   41342 * __fractdqsf:                           Fixed-point fractional library routines.
   41343                                                              (line  565)
   41344 * __fractdqsi:                           Fixed-point fractional library routines.
   41345                                                              (line  562)
   41346 * __fractdqsq2:                          Fixed-point fractional library routines.
   41347                                                              (line  541)
   41348 * __fractdqta:                           Fixed-point fractional library routines.
   41349                                                              (line  545)
   41350 * __fractdqti:                           Fixed-point fractional library routines.
   41351                                                              (line  564)
   41352 * __fractdquda:                          Fixed-point fractional library routines.
   41353                                                              (line  557)
   41354 * __fractdqudq:                          Fixed-point fractional library routines.
   41355                                                              (line  552)
   41356 * __fractdquha:                          Fixed-point fractional library routines.
   41357                                                              (line  554)
   41358 * __fractdquhq:                          Fixed-point fractional library routines.
   41359                                                              (line  548)
   41360 * __fractdquqq:                          Fixed-point fractional library routines.
   41361                                                              (line  547)
   41362 * __fractdqusa:                          Fixed-point fractional library routines.
   41363                                                              (line  555)
   41364 * __fractdqusq:                          Fixed-point fractional library routines.
   41365                                                              (line  550)
   41366 * __fractdquta:                          Fixed-point fractional library routines.
   41367                                                              (line  559)
   41368 * __fracthada2:                          Fixed-point fractional library routines.
   41369                                                              (line  572)
   41370 * __fracthadf:                           Fixed-point fractional library routines.
   41371                                                              (line  590)
   41372 * __fracthadi:                           Fixed-point fractional library routines.
   41373                                                              (line  587)
   41374 * __fracthadq:                           Fixed-point fractional library routines.
   41375                                                              (line  570)
   41376 * __fracthahi:                           Fixed-point fractional library routines.
   41377                                                              (line  585)
   41378 * __fracthahq:                           Fixed-point fractional library routines.
   41379                                                              (line  568)
   41380 * __fracthaqi:                           Fixed-point fractional library routines.
   41381                                                              (line  584)
   41382 * __fracthaqq:                           Fixed-point fractional library routines.
   41383                                                              (line  567)
   41384 * __fracthasa2:                          Fixed-point fractional library routines.
   41385                                                              (line  571)
   41386 * __fracthasf:                           Fixed-point fractional library routines.
   41387                                                              (line  589)
   41388 * __fracthasi:                           Fixed-point fractional library routines.
   41389                                                              (line  586)
   41390 * __fracthasq:                           Fixed-point fractional library routines.
   41391                                                              (line  569)
   41392 * __fracthata2:                          Fixed-point fractional library routines.
   41393                                                              (line  573)
   41394 * __fracthati:                           Fixed-point fractional library routines.
   41395                                                              (line  588)
   41396 * __fracthauda:                          Fixed-point fractional library routines.
   41397                                                              (line  581)
   41398 * __fracthaudq:                          Fixed-point fractional library routines.
   41399                                                              (line  578)
   41400 * __fracthauha:                          Fixed-point fractional library routines.
   41401                                                              (line  579)
   41402 * __fracthauhq:                          Fixed-point fractional library routines.
   41403                                                              (line  575)
   41404 * __fracthauqq:                          Fixed-point fractional library routines.
   41405                                                              (line  574)
   41406 * __fracthausa:                          Fixed-point fractional library routines.
   41407                                                              (line  580)
   41408 * __fracthausq:                          Fixed-point fractional library routines.
   41409                                                              (line  576)
   41410 * __fracthauta:                          Fixed-point fractional library routines.
   41411                                                              (line  583)
   41412 * __fracthida:                           Fixed-point fractional library routines.
   41413                                                              (line  943)
   41414 * __fracthidq:                           Fixed-point fractional library routines.
   41415                                                              (line  940)
   41416 * __fracthiha:                           Fixed-point fractional library routines.
   41417                                                              (line  941)
   41418 * __fracthihq:                           Fixed-point fractional library routines.
   41419                                                              (line  938)
   41420 * __fracthiqq:                           Fixed-point fractional library routines.
   41421                                                              (line  937)
   41422 * __fracthisa:                           Fixed-point fractional library routines.
   41423                                                              (line  942)
   41424 * __fracthisq:                           Fixed-point fractional library routines.
   41425                                                              (line  939)
   41426 * __fracthita:                           Fixed-point fractional library routines.
   41427                                                              (line  944)
   41428 * __fracthiuda:                          Fixed-point fractional library routines.
   41429                                                              (line  951)
   41430 * __fracthiudq:                          Fixed-point fractional library routines.
   41431                                                              (line  948)
   41432 * __fracthiuha:                          Fixed-point fractional library routines.
   41433                                                              (line  949)
   41434 * __fracthiuhq:                          Fixed-point fractional library routines.
   41435                                                              (line  946)
   41436 * __fracthiuqq:                          Fixed-point fractional library routines.
   41437                                                              (line  945)
   41438 * __fracthiusa:                          Fixed-point fractional library routines.
   41439                                                              (line  950)
   41440 * __fracthiusq:                          Fixed-point fractional library routines.
   41441                                                              (line  947)
   41442 * __fracthiuta:                          Fixed-point fractional library routines.
   41443                                                              (line  952)
   41444 * __fracthqda:                           Fixed-point fractional library routines.
   41445                                                              (line  498)
   41446 * __fracthqdf:                           Fixed-point fractional library routines.
   41447                                                              (line  514)
   41448 * __fracthqdi:                           Fixed-point fractional library routines.
   41449                                                              (line  511)
   41450 * __fracthqdq2:                          Fixed-point fractional library routines.
   41451                                                              (line  495)
   41452 * __fracthqha:                           Fixed-point fractional library routines.
   41453                                                              (line  496)
   41454 * __fracthqhi:                           Fixed-point fractional library routines.
   41455                                                              (line  509)
   41456 * __fracthqqi:                           Fixed-point fractional library routines.
   41457                                                              (line  508)
   41458 * __fracthqqq2:                          Fixed-point fractional library routines.
   41459                                                              (line  493)
   41460 * __fracthqsa:                           Fixed-point fractional library routines.
   41461                                                              (line  497)
   41462 * __fracthqsf:                           Fixed-point fractional library routines.
   41463                                                              (line  513)
   41464 * __fracthqsi:                           Fixed-point fractional library routines.
   41465                                                              (line  510)
   41466 * __fracthqsq2:                          Fixed-point fractional library routines.
   41467                                                              (line  494)
   41468 * __fracthqta:                           Fixed-point fractional library routines.
   41469                                                              (line  499)
   41470 * __fracthqti:                           Fixed-point fractional library routines.
   41471                                                              (line  512)
   41472 * __fracthquda:                          Fixed-point fractional library routines.
   41473                                                              (line  506)
   41474 * __fracthqudq:                          Fixed-point fractional library routines.
   41475                                                              (line  503)
   41476 * __fracthquha:                          Fixed-point fractional library routines.
   41477                                                              (line  504)
   41478 * __fracthquhq:                          Fixed-point fractional library routines.
   41479                                                              (line  501)
   41480 * __fracthquqq:                          Fixed-point fractional library routines.
   41481                                                              (line  500)
   41482 * __fracthqusa:                          Fixed-point fractional library routines.
   41483                                                              (line  505)
   41484 * __fracthqusq:                          Fixed-point fractional library routines.
   41485                                                              (line  502)
   41486 * __fracthquta:                          Fixed-point fractional library routines.
   41487                                                              (line  507)
   41488 * __fractqida:                           Fixed-point fractional library routines.
   41489                                                              (line  925)
   41490 * __fractqidq:                           Fixed-point fractional library routines.
   41491                                                              (line  922)
   41492 * __fractqiha:                           Fixed-point fractional library routines.
   41493                                                              (line  923)
   41494 * __fractqihq:                           Fixed-point fractional library routines.
   41495                                                              (line  920)
   41496 * __fractqiqq:                           Fixed-point fractional library routines.
   41497                                                              (line  919)
   41498 * __fractqisa:                           Fixed-point fractional library routines.
   41499                                                              (line  924)
   41500 * __fractqisq:                           Fixed-point fractional library routines.
   41501                                                              (line  921)
   41502 * __fractqita:                           Fixed-point fractional library routines.
   41503                                                              (line  926)
   41504 * __fractqiuda:                          Fixed-point fractional library routines.
   41505                                                              (line  934)
   41506 * __fractqiudq:                          Fixed-point fractional library routines.
   41507                                                              (line  931)
   41508 * __fractqiuha:                          Fixed-point fractional library routines.
   41509                                                              (line  932)
   41510 * __fractqiuhq:                          Fixed-point fractional library routines.
   41511                                                              (line  928)
   41512 * __fractqiuqq:                          Fixed-point fractional library routines.
   41513                                                              (line  927)
   41514 * __fractqiusa:                          Fixed-point fractional library routines.
   41515                                                              (line  933)
   41516 * __fractqiusq:                          Fixed-point fractional library routines.
   41517                                                              (line  929)
   41518 * __fractqiuta:                          Fixed-point fractional library routines.
   41519                                                              (line  936)
   41520 * __fractqqda:                           Fixed-point fractional library routines.
   41521                                                              (line  474)
   41522 * __fractqqdf:                           Fixed-point fractional library routines.
   41523                                                              (line  492)
   41524 * __fractqqdi:                           Fixed-point fractional library routines.
   41525                                                              (line  489)
   41526 * __fractqqdq2:                          Fixed-point fractional library routines.
   41527                                                              (line  471)
   41528 * __fractqqha:                           Fixed-point fractional library routines.
   41529                                                              (line  472)
   41530 * __fractqqhi:                           Fixed-point fractional library routines.
   41531                                                              (line  487)
   41532 * __fractqqhq2:                          Fixed-point fractional library routines.
   41533                                                              (line  469)
   41534 * __fractqqqi:                           Fixed-point fractional library routines.
   41535                                                              (line  486)
   41536 * __fractqqsa:                           Fixed-point fractional library routines.
   41537                                                              (line  473)
   41538 * __fractqqsf:                           Fixed-point fractional library routines.
   41539                                                              (line  491)
   41540 * __fractqqsi:                           Fixed-point fractional library routines.
   41541                                                              (line  488)
   41542 * __fractqqsq2:                          Fixed-point fractional library routines.
   41543                                                              (line  470)
   41544 * __fractqqta:                           Fixed-point fractional library routines.
   41545                                                              (line  475)
   41546 * __fractqqti:                           Fixed-point fractional library routines.
   41547                                                              (line  490)
   41548 * __fractqquda:                          Fixed-point fractional library routines.
   41549                                                              (line  483)
   41550 * __fractqqudq:                          Fixed-point fractional library routines.
   41551                                                              (line  480)
   41552 * __fractqquha:                          Fixed-point fractional library routines.
   41553                                                              (line  481)
   41554 * __fractqquhq:                          Fixed-point fractional library routines.
   41555                                                              (line  477)
   41556 * __fractqquqq:                          Fixed-point fractional library routines.
   41557                                                              (line  476)
   41558 * __fractqqusa:                          Fixed-point fractional library routines.
   41559                                                              (line  482)
   41560 * __fractqqusq:                          Fixed-point fractional library routines.
   41561                                                              (line  478)
   41562 * __fractqquta:                          Fixed-point fractional library routines.
   41563                                                              (line  485)
   41564 * __fractsada2:                          Fixed-point fractional library routines.
   41565                                                              (line  596)
   41566 * __fractsadf:                           Fixed-point fractional library routines.
   41567                                                              (line  612)
   41568 * __fractsadi:                           Fixed-point fractional library routines.
   41569                                                              (line  609)
   41570 * __fractsadq:                           Fixed-point fractional library routines.
   41571                                                              (line  594)
   41572 * __fractsaha2:                          Fixed-point fractional library routines.
   41573                                                              (line  595)
   41574 * __fractsahi:                           Fixed-point fractional library routines.
   41575                                                              (line  607)
   41576 * __fractsahq:                           Fixed-point fractional library routines.
   41577                                                              (line  592)
   41578 * __fractsaqi:                           Fixed-point fractional library routines.
   41579                                                              (line  606)
   41580 * __fractsaqq:                           Fixed-point fractional library routines.
   41581                                                              (line  591)
   41582 * __fractsasf:                           Fixed-point fractional library routines.
   41583                                                              (line  611)
   41584 * __fractsasi:                           Fixed-point fractional library routines.
   41585                                                              (line  608)
   41586 * __fractsasq:                           Fixed-point fractional library routines.
   41587                                                              (line  593)
   41588 * __fractsata2:                          Fixed-point fractional library routines.
   41589                                                              (line  597)
   41590 * __fractsati:                           Fixed-point fractional library routines.
   41591                                                              (line  610)
   41592 * __fractsauda:                          Fixed-point fractional library routines.
   41593                                                              (line  604)
   41594 * __fractsaudq:                          Fixed-point fractional library routines.
   41595                                                              (line  601)
   41596 * __fractsauha:                          Fixed-point fractional library routines.
   41597                                                              (line  602)
   41598 * __fractsauhq:                          Fixed-point fractional library routines.
   41599                                                              (line  599)
   41600 * __fractsauqq:                          Fixed-point fractional library routines.
   41601                                                              (line  598)
   41602 * __fractsausa:                          Fixed-point fractional library routines.
   41603                                                              (line  603)
   41604 * __fractsausq:                          Fixed-point fractional library routines.
   41605                                                              (line  600)
   41606 * __fractsauta:                          Fixed-point fractional library routines.
   41607                                                              (line  605)
   41608 * __fractsfda:                           Fixed-point fractional library routines.
   41609                                                              (line 1009)
   41610 * __fractsfdq:                           Fixed-point fractional library routines.
   41611                                                              (line 1006)
   41612 * __fractsfha:                           Fixed-point fractional library routines.
   41613                                                              (line 1007)
   41614 * __fractsfhq:                           Fixed-point fractional library routines.
   41615                                                              (line 1004)
   41616 * __fractsfqq:                           Fixed-point fractional library routines.
   41617                                                              (line 1003)
   41618 * __fractsfsa:                           Fixed-point fractional library routines.
   41619                                                              (line 1008)
   41620 * __fractsfsq:                           Fixed-point fractional library routines.
   41621                                                              (line 1005)
   41622 * __fractsfta:                           Fixed-point fractional library routines.
   41623                                                              (line 1010)
   41624 * __fractsfuda:                          Fixed-point fractional library routines.
   41625                                                              (line 1017)
   41626 * __fractsfudq:                          Fixed-point fractional library routines.
   41627                                                              (line 1014)
   41628 * __fractsfuha:                          Fixed-point fractional library routines.
   41629                                                              (line 1015)
   41630 * __fractsfuhq:                          Fixed-point fractional library routines.
   41631                                                              (line 1012)
   41632 * __fractsfuqq:                          Fixed-point fractional library routines.
   41633                                                              (line 1011)
   41634 * __fractsfusa:                          Fixed-point fractional library routines.
   41635                                                              (line 1016)
   41636 * __fractsfusq:                          Fixed-point fractional library routines.
   41637                                                              (line 1013)
   41638 * __fractsfuta:                          Fixed-point fractional library routines.
   41639                                                              (line 1018)
   41640 * __fractsida:                           Fixed-point fractional library routines.
   41641                                                              (line  959)
   41642 * __fractsidq:                           Fixed-point fractional library routines.
   41643                                                              (line  956)
   41644 * __fractsiha:                           Fixed-point fractional library routines.
   41645                                                              (line  957)
   41646 * __fractsihq:                           Fixed-point fractional library routines.
   41647                                                              (line  954)
   41648 * __fractsiqq:                           Fixed-point fractional library routines.
   41649                                                              (line  953)
   41650 * __fractsisa:                           Fixed-point fractional library routines.
   41651                                                              (line  958)
   41652 * __fractsisq:                           Fixed-point fractional library routines.
   41653                                                              (line  955)
   41654 * __fractsita:                           Fixed-point fractional library routines.
   41655                                                              (line  960)
   41656 * __fractsiuda:                          Fixed-point fractional library routines.
   41657                                                              (line  967)
   41658 * __fractsiudq:                          Fixed-point fractional library routines.
   41659                                                              (line  964)
   41660 * __fractsiuha:                          Fixed-point fractional library routines.
   41661                                                              (line  965)
   41662 * __fractsiuhq:                          Fixed-point fractional library routines.
   41663                                                              (line  962)
   41664 * __fractsiuqq:                          Fixed-point fractional library routines.
   41665                                                              (line  961)
   41666 * __fractsiusa:                          Fixed-point fractional library routines.
   41667                                                              (line  966)
   41668 * __fractsiusq:                          Fixed-point fractional library routines.
   41669                                                              (line  963)
   41670 * __fractsiuta:                          Fixed-point fractional library routines.
   41671                                                              (line  968)
   41672 * __fractsqda:                           Fixed-point fractional library routines.
   41673                                                              (line  520)
   41674 * __fractsqdf:                           Fixed-point fractional library routines.
   41675                                                              (line  538)
   41676 * __fractsqdi:                           Fixed-point fractional library routines.
   41677                                                              (line  535)
   41678 * __fractsqdq2:                          Fixed-point fractional library routines.
   41679                                                              (line  517)
   41680 * __fractsqha:                           Fixed-point fractional library routines.
   41681                                                              (line  518)
   41682 * __fractsqhi:                           Fixed-point fractional library routines.
   41683                                                              (line  533)
   41684 * __fractsqhq2:                          Fixed-point fractional library routines.
   41685                                                              (line  516)
   41686 * __fractsqqi:                           Fixed-point fractional library routines.
   41687                                                              (line  532)
   41688 * __fractsqqq2:                          Fixed-point fractional library routines.
   41689                                                              (line  515)
   41690 * __fractsqsa:                           Fixed-point fractional library routines.
   41691                                                              (line  519)
   41692 * __fractsqsf:                           Fixed-point fractional library routines.
   41693                                                              (line  537)
   41694 * __fractsqsi:                           Fixed-point fractional library routines.
   41695                                                              (line  534)
   41696 * __fractsqta:                           Fixed-point fractional library routines.
   41697                                                              (line  521)
   41698 * __fractsqti:                           Fixed-point fractional library routines.
   41699                                                              (line  536)
   41700 * __fractsquda:                          Fixed-point fractional library routines.
   41701                                                              (line  529)
   41702 * __fractsqudq:                          Fixed-point fractional library routines.
   41703                                                              (line  526)
   41704 * __fractsquha:                          Fixed-point fractional library routines.
   41705                                                              (line  527)
   41706 * __fractsquhq:                          Fixed-point fractional library routines.
   41707                                                              (line  523)
   41708 * __fractsquqq:                          Fixed-point fractional library routines.
   41709                                                              (line  522)
   41710 * __fractsqusa:                          Fixed-point fractional library routines.
   41711                                                              (line  528)
   41712 * __fractsqusq:                          Fixed-point fractional library routines.
   41713                                                              (line  524)
   41714 * __fractsquta:                          Fixed-point fractional library routines.
   41715                                                              (line  531)
   41716 * __fracttada2:                          Fixed-point fractional library routines.
   41717                                                              (line  643)
   41718 * __fracttadf:                           Fixed-point fractional library routines.
   41719                                                              (line  664)
   41720 * __fracttadi:                           Fixed-point fractional library routines.
   41721                                                              (line  661)
   41722 * __fracttadq:                           Fixed-point fractional library routines.
   41723                                                              (line  640)
   41724 * __fracttaha2:                          Fixed-point fractional library routines.
   41725                                                              (line  641)
   41726 * __fracttahi:                           Fixed-point fractional library routines.
   41727                                                              (line  659)
   41728 * __fracttahq:                           Fixed-point fractional library routines.
   41729                                                              (line  638)
   41730 * __fracttaqi:                           Fixed-point fractional library routines.
   41731                                                              (line  658)
   41732 * __fracttaqq:                           Fixed-point fractional library routines.
   41733                                                              (line  637)
   41734 * __fracttasa2:                          Fixed-point fractional library routines.
   41735                                                              (line  642)
   41736 * __fracttasf:                           Fixed-point fractional library routines.
   41737                                                              (line  663)
   41738 * __fracttasi:                           Fixed-point fractional library routines.
   41739                                                              (line  660)
   41740 * __fracttasq:                           Fixed-point fractional library routines.
   41741                                                              (line  639)
   41742 * __fracttati:                           Fixed-point fractional library routines.
   41743                                                              (line  662)
   41744 * __fracttauda:                          Fixed-point fractional library routines.
   41745                                                              (line  655)
   41746 * __fracttaudq:                          Fixed-point fractional library routines.
   41747                                                              (line  650)
   41748 * __fracttauha:                          Fixed-point fractional library routines.
   41749                                                              (line  652)
   41750 * __fracttauhq:                          Fixed-point fractional library routines.
   41751                                                              (line  646)
   41752 * __fracttauqq:                          Fixed-point fractional library routines.
   41753                                                              (line  645)
   41754 * __fracttausa:                          Fixed-point fractional library routines.
   41755                                                              (line  653)
   41756 * __fracttausq:                          Fixed-point fractional library routines.
   41757                                                              (line  648)
   41758 * __fracttauta:                          Fixed-point fractional library routines.
   41759                                                              (line  657)
   41760 * __fracttida:                           Fixed-point fractional library routines.
   41761                                                              (line  991)
   41762 * __fracttidq:                           Fixed-point fractional library routines.
   41763                                                              (line  988)
   41764 * __fracttiha:                           Fixed-point fractional library routines.
   41765                                                              (line  989)
   41766 * __fracttihq:                           Fixed-point fractional library routines.
   41767                                                              (line  986)
   41768 * __fracttiqq:                           Fixed-point fractional library routines.
   41769                                                              (line  985)
   41770 * __fracttisa:                           Fixed-point fractional library routines.
   41771                                                              (line  990)
   41772 * __fracttisq:                           Fixed-point fractional library routines.
   41773                                                              (line  987)
   41774 * __fracttita:                           Fixed-point fractional library routines.
   41775                                                              (line  992)
   41776 * __fracttiuda:                          Fixed-point fractional library routines.
   41777                                                              (line 1000)
   41778 * __fracttiudq:                          Fixed-point fractional library routines.
   41779                                                              (line  997)
   41780 * __fracttiuha:                          Fixed-point fractional library routines.
   41781                                                              (line  998)
   41782 * __fracttiuhq:                          Fixed-point fractional library routines.
   41783                                                              (line  994)
   41784 * __fracttiuqq:                          Fixed-point fractional library routines.
   41785                                                              (line  993)
   41786 * __fracttiusa:                          Fixed-point fractional library routines.
   41787                                                              (line  999)
   41788 * __fracttiusq:                          Fixed-point fractional library routines.
   41789                                                              (line  995)
   41790 * __fracttiuta:                          Fixed-point fractional library routines.
   41791                                                              (line 1002)
   41792 * __fractudada:                          Fixed-point fractional library routines.
   41793                                                              (line  858)
   41794 * __fractudadf:                          Fixed-point fractional library routines.
   41795                                                              (line  881)
   41796 * __fractudadi:                          Fixed-point fractional library routines.
   41797                                                              (line  878)
   41798 * __fractudadq:                          Fixed-point fractional library routines.
   41799                                                              (line  855)
   41800 * __fractudaha:                          Fixed-point fractional library routines.
   41801                                                              (line  856)
   41802 * __fractudahi:                          Fixed-point fractional library routines.
   41803                                                              (line  876)
   41804 * __fractudahq:                          Fixed-point fractional library routines.
   41805                                                              (line  852)
   41806 * __fractudaqi:                          Fixed-point fractional library routines.
   41807                                                              (line  875)
   41808 * __fractudaqq:                          Fixed-point fractional library routines.
   41809                                                              (line  851)
   41810 * __fractudasa:                          Fixed-point fractional library routines.
   41811                                                              (line  857)
   41812 * __fractudasf:                          Fixed-point fractional library routines.
   41813                                                              (line  880)
   41814 * __fractudasi:                          Fixed-point fractional library routines.
   41815                                                              (line  877)
   41816 * __fractudasq:                          Fixed-point fractional library routines.
   41817                                                              (line  853)
   41818 * __fractudata:                          Fixed-point fractional library routines.
   41819                                                              (line  860)
   41820 * __fractudati:                          Fixed-point fractional library routines.
   41821                                                              (line  879)
   41822 * __fractudaudq:                         Fixed-point fractional library routines.
   41823                                                              (line  868)
   41824 * __fractudauha2:                        Fixed-point fractional library routines.
   41825                                                              (line  870)
   41826 * __fractudauhq:                         Fixed-point fractional library routines.
   41827                                                              (line  864)
   41828 * __fractudauqq:                         Fixed-point fractional library routines.
   41829                                                              (line  862)
   41830 * __fractudausa2:                        Fixed-point fractional library routines.
   41831                                                              (line  872)
   41832 * __fractudausq:                         Fixed-point fractional library routines.
   41833                                                              (line  866)
   41834 * __fractudauta2:                        Fixed-point fractional library routines.
   41835                                                              (line  874)
   41836 * __fractudqda:                          Fixed-point fractional library routines.
   41837                                                              (line  766)
   41838 * __fractudqdf:                          Fixed-point fractional library routines.
   41839                                                              (line  791)
   41840 * __fractudqdi:                          Fixed-point fractional library routines.
   41841                                                              (line  787)
   41842 * __fractudqdq:                          Fixed-point fractional library routines.
   41843                                                              (line  761)
   41844 * __fractudqha:                          Fixed-point fractional library routines.
   41845                                                              (line  763)
   41846 * __fractudqhi:                          Fixed-point fractional library routines.
   41847                                                              (line  785)
   41848 * __fractudqhq:                          Fixed-point fractional library routines.
   41849                                                              (line  757)
   41850 * __fractudqqi:                          Fixed-point fractional library routines.
   41851                                                              (line  784)
   41852 * __fractudqqq:                          Fixed-point fractional library routines.
   41853                                                              (line  756)
   41854 * __fractudqsa:                          Fixed-point fractional library routines.
   41855                                                              (line  764)
   41856 * __fractudqsf:                          Fixed-point fractional library routines.
   41857                                                              (line  790)
   41858 * __fractudqsi:                          Fixed-point fractional library routines.
   41859                                                              (line  786)
   41860 * __fractudqsq:                          Fixed-point fractional library routines.
   41861                                                              (line  759)
   41862 * __fractudqta:                          Fixed-point fractional library routines.
   41863                                                              (line  768)
   41864 * __fractudqti:                          Fixed-point fractional library routines.
   41865                                                              (line  789)
   41866 * __fractudquda:                         Fixed-point fractional library routines.
   41867                                                              (line  780)
   41868 * __fractudquha:                         Fixed-point fractional library routines.
   41869                                                              (line  776)
   41870 * __fractudquhq2:                        Fixed-point fractional library routines.
   41871                                                              (line  772)
   41872 * __fractudquqq2:                        Fixed-point fractional library routines.
   41873                                                              (line  770)
   41874 * __fractudqusa:                         Fixed-point fractional library routines.
   41875                                                              (line  778)
   41876 * __fractudqusq2:                        Fixed-point fractional library routines.
   41877                                                              (line  774)
   41878 * __fractudquta:                         Fixed-point fractional library routines.
   41879                                                              (line  782)
   41880 * __fractuhada:                          Fixed-point fractional library routines.
   41881                                                              (line  799)
   41882 * __fractuhadf:                          Fixed-point fractional library routines.
   41883                                                              (line  822)
   41884 * __fractuhadi:                          Fixed-point fractional library routines.
   41885                                                              (line  819)
   41886 * __fractuhadq:                          Fixed-point fractional library routines.
   41887                                                              (line  796)
   41888 * __fractuhaha:                          Fixed-point fractional library routines.
   41889                                                              (line  797)
   41890 * __fractuhahi:                          Fixed-point fractional library routines.
   41891                                                              (line  817)
   41892 * __fractuhahq:                          Fixed-point fractional library routines.
   41893                                                              (line  793)
   41894 * __fractuhaqi:                          Fixed-point fractional library routines.
   41895                                                              (line  816)
   41896 * __fractuhaqq:                          Fixed-point fractional library routines.
   41897                                                              (line  792)
   41898 * __fractuhasa:                          Fixed-point fractional library routines.
   41899                                                              (line  798)
   41900 * __fractuhasf:                          Fixed-point fractional library routines.
   41901                                                              (line  821)
   41902 * __fractuhasi:                          Fixed-point fractional library routines.
   41903                                                              (line  818)
   41904 * __fractuhasq:                          Fixed-point fractional library routines.
   41905                                                              (line  794)
   41906 * __fractuhata:                          Fixed-point fractional library routines.
   41907                                                              (line  801)
   41908 * __fractuhati:                          Fixed-point fractional library routines.
   41909                                                              (line  820)
   41910 * __fractuhauda2:                        Fixed-point fractional library routines.
   41911                                                              (line  813)
   41912 * __fractuhaudq:                         Fixed-point fractional library routines.
   41913                                                              (line  809)
   41914 * __fractuhauhq:                         Fixed-point fractional library routines.
   41915                                                              (line  805)
   41916 * __fractuhauqq:                         Fixed-point fractional library routines.
   41917                                                              (line  803)
   41918 * __fractuhausa2:                        Fixed-point fractional library routines.
   41919                                                              (line  811)
   41920 * __fractuhausq:                         Fixed-point fractional library routines.
   41921                                                              (line  807)
   41922 * __fractuhauta2:                        Fixed-point fractional library routines.
   41923                                                              (line  815)
   41924 * __fractuhqda:                          Fixed-point fractional library routines.
   41925                                                              (line  702)
   41926 * __fractuhqdf:                          Fixed-point fractional library routines.
   41927                                                              (line  723)
   41928 * __fractuhqdi:                          Fixed-point fractional library routines.
   41929                                                              (line  720)
   41930 * __fractuhqdq:                          Fixed-point fractional library routines.
   41931                                                              (line  699)
   41932 * __fractuhqha:                          Fixed-point fractional library routines.
   41933                                                              (line  700)
   41934 * __fractuhqhi:                          Fixed-point fractional library routines.
   41935                                                              (line  718)
   41936 * __fractuhqhq:                          Fixed-point fractional library routines.
   41937                                                              (line  697)
   41938 * __fractuhqqi:                          Fixed-point fractional library routines.
   41939                                                              (line  717)
   41940 * __fractuhqqq:                          Fixed-point fractional library routines.
   41941                                                              (line  696)
   41942 * __fractuhqsa:                          Fixed-point fractional library routines.
   41943                                                              (line  701)
   41944 * __fractuhqsf:                          Fixed-point fractional library routines.
   41945                                                              (line  722)
   41946 * __fractuhqsi:                          Fixed-point fractional library routines.
   41947                                                              (line  719)
   41948 * __fractuhqsq:                          Fixed-point fractional library routines.
   41949                                                              (line  698)
   41950 * __fractuhqta:                          Fixed-point fractional library routines.
   41951                                                              (line  703)
   41952 * __fractuhqti:                          Fixed-point fractional library routines.
   41953                                                              (line  721)
   41954 * __fractuhquda:                         Fixed-point fractional library routines.
   41955                                                              (line  714)
   41956 * __fractuhqudq2:                        Fixed-point fractional library routines.
   41957                                                              (line  709)
   41958 * __fractuhquha:                         Fixed-point fractional library routines.
   41959                                                              (line  711)
   41960 * __fractuhquqq2:                        Fixed-point fractional library routines.
   41961                                                              (line  705)
   41962 * __fractuhqusa:                         Fixed-point fractional library routines.
   41963                                                              (line  712)
   41964 * __fractuhqusq2:                        Fixed-point fractional library routines.
   41965                                                              (line  707)
   41966 * __fractuhquta:                         Fixed-point fractional library routines.
   41967                                                              (line  716)
   41968 * __fractunsdadi:                        Fixed-point fractional library routines.
   41969                                                              (line 1555)
   41970 * __fractunsdahi:                        Fixed-point fractional library routines.
   41971                                                              (line 1553)
   41972 * __fractunsdaqi:                        Fixed-point fractional library routines.
   41973                                                              (line 1552)
   41974 * __fractunsdasi:                        Fixed-point fractional library routines.
   41975                                                              (line 1554)
   41976 * __fractunsdati:                        Fixed-point fractional library routines.
   41977                                                              (line 1556)
   41978 * __fractunsdida:                        Fixed-point fractional library routines.
   41979                                                              (line 1707)
   41980 * __fractunsdidq:                        Fixed-point fractional library routines.
   41981                                                              (line 1704)
   41982 * __fractunsdiha:                        Fixed-point fractional library routines.
   41983                                                              (line 1705)
   41984 * __fractunsdihq:                        Fixed-point fractional library routines.
   41985                                                              (line 1702)
   41986 * __fractunsdiqq:                        Fixed-point fractional library routines.
   41987                                                              (line 1701)
   41988 * __fractunsdisa:                        Fixed-point fractional library routines.
   41989                                                              (line 1706)
   41990 * __fractunsdisq:                        Fixed-point fractional library routines.
   41991                                                              (line 1703)
   41992 * __fractunsdita:                        Fixed-point fractional library routines.
   41993                                                              (line 1708)
   41994 * __fractunsdiuda:                       Fixed-point fractional library routines.
   41995                                                              (line 1720)
   41996 * __fractunsdiudq:                       Fixed-point fractional library routines.
   41997                                                              (line 1715)
   41998 * __fractunsdiuha:                       Fixed-point fractional library routines.
   41999                                                              (line 1717)
   42000 * __fractunsdiuhq:                       Fixed-point fractional library routines.
   42001                                                              (line 1711)
   42002 * __fractunsdiuqq:                       Fixed-point fractional library routines.
   42003                                                              (line 1710)
   42004 * __fractunsdiusa:                       Fixed-point fractional library routines.
   42005                                                              (line 1718)
   42006 * __fractunsdiusq:                       Fixed-point fractional library routines.
   42007                                                              (line 1713)
   42008 * __fractunsdiuta:                       Fixed-point fractional library routines.
   42009                                                              (line 1722)
   42010 * __fractunsdqdi:                        Fixed-point fractional library routines.
   42011                                                              (line 1539)
   42012 * __fractunsdqhi:                        Fixed-point fractional library routines.
   42013                                                              (line 1537)
   42014 * __fractunsdqqi:                        Fixed-point fractional library routines.
   42015                                                              (line 1536)
   42016 * __fractunsdqsi:                        Fixed-point fractional library routines.
   42017                                                              (line 1538)
   42018 * __fractunsdqti:                        Fixed-point fractional library routines.
   42019                                                              (line 1541)
   42020 * __fractunshadi:                        Fixed-point fractional library routines.
   42021                                                              (line 1545)
   42022 * __fractunshahi:                        Fixed-point fractional library routines.
   42023                                                              (line 1543)
   42024 * __fractunshaqi:                        Fixed-point fractional library routines.
   42025                                                              (line 1542)
   42026 * __fractunshasi:                        Fixed-point fractional library routines.
   42027                                                              (line 1544)
   42028 * __fractunshati:                        Fixed-point fractional library routines.
   42029                                                              (line 1546)
   42030 * __fractunshida:                        Fixed-point fractional library routines.
   42031                                                              (line 1663)
   42032 * __fractunshidq:                        Fixed-point fractional library routines.
   42033                                                              (line 1660)
   42034 * __fractunshiha:                        Fixed-point fractional library routines.
   42035                                                              (line 1661)
   42036 * __fractunshihq:                        Fixed-point fractional library routines.
   42037                                                              (line 1658)
   42038 * __fractunshiqq:                        Fixed-point fractional library routines.
   42039                                                              (line 1657)
   42040 * __fractunshisa:                        Fixed-point fractional library routines.
   42041                                                              (line 1662)
   42042 * __fractunshisq:                        Fixed-point fractional library routines.
   42043                                                              (line 1659)
   42044 * __fractunshita:                        Fixed-point fractional library routines.
   42045                                                              (line 1664)
   42046 * __fractunshiuda:                       Fixed-point fractional library routines.
   42047                                                              (line 1676)
   42048 * __fractunshiudq:                       Fixed-point fractional library routines.
   42049                                                              (line 1671)
   42050 * __fractunshiuha:                       Fixed-point fractional library routines.
   42051                                                              (line 1673)
   42052 * __fractunshiuhq:                       Fixed-point fractional library routines.
   42053                                                              (line 1667)
   42054 * __fractunshiuqq:                       Fixed-point fractional library routines.
   42055                                                              (line 1666)
   42056 * __fractunshiusa:                       Fixed-point fractional library routines.
   42057                                                              (line 1674)
   42058 * __fractunshiusq:                       Fixed-point fractional library routines.
   42059                                                              (line 1669)
   42060 * __fractunshiuta:                       Fixed-point fractional library routines.
   42061                                                              (line 1678)
   42062 * __fractunshqdi:                        Fixed-point fractional library routines.
   42063                                                              (line 1529)
   42064 * __fractunshqhi:                        Fixed-point fractional library routines.
   42065                                                              (line 1527)
   42066 * __fractunshqqi:                        Fixed-point fractional library routines.
   42067                                                              (line 1526)
   42068 * __fractunshqsi:                        Fixed-point fractional library routines.
   42069                                                              (line 1528)
   42070 * __fractunshqti:                        Fixed-point fractional library routines.
   42071                                                              (line 1530)
   42072 * __fractunsqida:                        Fixed-point fractional library routines.
   42073                                                              (line 1641)
   42074 * __fractunsqidq:                        Fixed-point fractional library routines.
   42075                                                              (line 1638)
   42076 * __fractunsqiha:                        Fixed-point fractional library routines.
   42077                                                              (line 1639)
   42078 * __fractunsqihq:                        Fixed-point fractional library routines.
   42079                                                              (line 1636)
   42080 * __fractunsqiqq:                        Fixed-point fractional library routines.
   42081                                                              (line 1635)
   42082 * __fractunsqisa:                        Fixed-point fractional library routines.
   42083                                                              (line 1640)
   42084 * __fractunsqisq:                        Fixed-point fractional library routines.
   42085                                                              (line 1637)
   42086 * __fractunsqita:                        Fixed-point fractional library routines.
   42087                                                              (line 1642)
   42088 * __fractunsqiuda:                       Fixed-point fractional library routines.
   42089                                                              (line 1654)
   42090 * __fractunsqiudq:                       Fixed-point fractional library routines.
   42091                                                              (line 1649)
   42092 * __fractunsqiuha:                       Fixed-point fractional library routines.
   42093                                                              (line 1651)
   42094 * __fractunsqiuhq:                       Fixed-point fractional library routines.
   42095                                                              (line 1645)
   42096 * __fractunsqiuqq:                       Fixed-point fractional library routines.
   42097                                                              (line 1644)
   42098 * __fractunsqiusa:                       Fixed-point fractional library routines.
   42099                                                              (line 1652)
   42100 * __fractunsqiusq:                       Fixed-point fractional library routines.
   42101                                                              (line 1647)
   42102 * __fractunsqiuta:                       Fixed-point fractional library routines.
   42103                                                              (line 1656)
   42104 * __fractunsqqdi:                        Fixed-point fractional library routines.
   42105                                                              (line 1524)
   42106 * __fractunsqqhi:                        Fixed-point fractional library routines.
   42107                                                              (line 1522)
   42108 * __fractunsqqqi:                        Fixed-point fractional library routines.
   42109                                                              (line 1521)
   42110 * __fractunsqqsi:                        Fixed-point fractional library routines.
   42111                                                              (line 1523)
   42112 * __fractunsqqti:                        Fixed-point fractional library routines.
   42113                                                              (line 1525)
   42114 * __fractunssadi:                        Fixed-point fractional library routines.
   42115                                                              (line 1550)
   42116 * __fractunssahi:                        Fixed-point fractional library routines.
   42117                                                              (line 1548)
   42118 * __fractunssaqi:                        Fixed-point fractional library routines.
   42119                                                              (line 1547)
   42120 * __fractunssasi:                        Fixed-point fractional library routines.
   42121                                                              (line 1549)
   42122 * __fractunssati:                        Fixed-point fractional library routines.
   42123                                                              (line 1551)
   42124 * __fractunssida:                        Fixed-point fractional library routines.
   42125                                                              (line 1685)
   42126 * __fractunssidq:                        Fixed-point fractional library routines.
   42127                                                              (line 1682)
   42128 * __fractunssiha:                        Fixed-point fractional library routines.
   42129                                                              (line 1683)
   42130 * __fractunssihq:                        Fixed-point fractional library routines.
   42131                                                              (line 1680)
   42132 * __fractunssiqq:                        Fixed-point fractional library routines.
   42133                                                              (line 1679)
   42134 * __fractunssisa:                        Fixed-point fractional library routines.
   42135                                                              (line 1684)
   42136 * __fractunssisq:                        Fixed-point fractional library routines.
   42137                                                              (line 1681)
   42138 * __fractunssita:                        Fixed-point fractional library routines.
   42139                                                              (line 1686)
   42140 * __fractunssiuda:                       Fixed-point fractional library routines.
   42141                                                              (line 1698)
   42142 * __fractunssiudq:                       Fixed-point fractional library routines.
   42143                                                              (line 1693)
   42144 * __fractunssiuha:                       Fixed-point fractional library routines.
   42145                                                              (line 1695)
   42146 * __fractunssiuhq:                       Fixed-point fractional library routines.
   42147                                                              (line 1689)
   42148 * __fractunssiuqq:                       Fixed-point fractional library routines.
   42149                                                              (line 1688)
   42150 * __fractunssiusa:                       Fixed-point fractional library routines.
   42151                                                              (line 1696)
   42152 * __fractunssiusq:                       Fixed-point fractional library routines.
   42153                                                              (line 1691)
   42154 * __fractunssiuta:                       Fixed-point fractional library routines.
   42155                                                              (line 1700)
   42156 * __fractunssqdi:                        Fixed-point fractional library routines.
   42157                                                              (line 1534)
   42158 * __fractunssqhi:                        Fixed-point fractional library routines.
   42159                                                              (line 1532)
   42160 * __fractunssqqi:                        Fixed-point fractional library routines.
   42161                                                              (line 1531)
   42162 * __fractunssqsi:                        Fixed-point fractional library routines.
   42163                                                              (line 1533)
   42164 * __fractunssqti:                        Fixed-point fractional library routines.
   42165                                                              (line 1535)
   42166 * __fractunstadi:                        Fixed-point fractional library routines.
   42167                                                              (line 1560)
   42168 * __fractunstahi:                        Fixed-point fractional library routines.
   42169                                                              (line 1558)
   42170 * __fractunstaqi:                        Fixed-point fractional library routines.
   42171                                                              (line 1557)
   42172 * __fractunstasi:                        Fixed-point fractional library routines.
   42173                                                              (line 1559)
   42174 * __fractunstati:                        Fixed-point fractional library routines.
   42175                                                              (line 1562)
   42176 * __fractunstida:                        Fixed-point fractional library routines.
   42177                                                              (line 1730)
   42178 * __fractunstidq:                        Fixed-point fractional library routines.
   42179                                                              (line 1727)
   42180 * __fractunstiha:                        Fixed-point fractional library routines.
   42181                                                              (line 1728)
   42182 * __fractunstihq:                        Fixed-point fractional library routines.
   42183                                                              (line 1724)
   42184 * __fractunstiqq:                        Fixed-point fractional library routines.
   42185                                                              (line 1723)
   42186 * __fractunstisa:                        Fixed-point fractional library routines.
   42187                                                              (line 1729)
   42188 * __fractunstisq:                        Fixed-point fractional library routines.
   42189                                                              (line 1725)
   42190 * __fractunstita:                        Fixed-point fractional library routines.
   42191                                                              (line 1732)
   42192 * __fractunstiuda:                       Fixed-point fractional library routines.
   42193                                                              (line 1746)
   42194 * __fractunstiudq:                       Fixed-point fractional library routines.
   42195                                                              (line 1740)
   42196 * __fractunstiuha:                       Fixed-point fractional library routines.
   42197                                                              (line 1742)
   42198 * __fractunstiuhq:                       Fixed-point fractional library routines.
   42199                                                              (line 1736)
   42200 * __fractunstiuqq:                       Fixed-point fractional library routines.
   42201                                                              (line 1734)
   42202 * __fractunstiusa:                       Fixed-point fractional library routines.
   42203                                                              (line 1744)
   42204 * __fractunstiusq:                       Fixed-point fractional library routines.
   42205                                                              (line 1738)
   42206 * __fractunstiuta:                       Fixed-point fractional library routines.
   42207                                                              (line 1748)
   42208 * __fractunsudadi:                       Fixed-point fractional library routines.
   42209                                                              (line 1622)
   42210 * __fractunsudahi:                       Fixed-point fractional library routines.
   42211                                                              (line 1618)
   42212 * __fractunsudaqi:                       Fixed-point fractional library routines.
   42213                                                              (line 1616)
   42214 * __fractunsudasi:                       Fixed-point fractional library routines.
   42215                                                              (line 1620)
   42216 * __fractunsudati:                       Fixed-point fractional library routines.
   42217                                                              (line 1624)
   42218 * __fractunsudqdi:                       Fixed-point fractional library routines.
   42219                                                              (line 1596)
   42220 * __fractunsudqhi:                       Fixed-point fractional library routines.
   42221                                                              (line 1592)
   42222 * __fractunsudqqi:                       Fixed-point fractional library routines.
   42223                                                              (line 1590)
   42224 * __fractunsudqsi:                       Fixed-point fractional library routines.
   42225                                                              (line 1594)
   42226 * __fractunsudqti:                       Fixed-point fractional library routines.
   42227                                                              (line 1598)
   42228 * __fractunsuhadi:                       Fixed-point fractional library routines.
   42229                                                              (line 1606)
   42230 * __fractunsuhahi:                       Fixed-point fractional library routines.
   42231                                                              (line 1602)
   42232 * __fractunsuhaqi:                       Fixed-point fractional library routines.
   42233                                                              (line 1600)
   42234 * __fractunsuhasi:                       Fixed-point fractional library routines.
   42235                                                              (line 1604)
   42236 * __fractunsuhati:                       Fixed-point fractional library routines.
   42237                                                              (line 1608)
   42238 * __fractunsuhqdi:                       Fixed-point fractional library routines.
   42239                                                              (line 1576)
   42240 * __fractunsuhqhi:                       Fixed-point fractional library routines.
   42241                                                              (line 1574)
   42242 * __fractunsuhqqi:                       Fixed-point fractional library routines.
   42243                                                              (line 1573)
   42244 * __fractunsuhqsi:                       Fixed-point fractional library routines.
   42245                                                              (line 1575)
   42246 * __fractunsuhqti:                       Fixed-point fractional library routines.
   42247                                                              (line 1578)
   42248 * __fractunsuqqdi:                       Fixed-point fractional library routines.
   42249                                                              (line 1570)
   42250 * __fractunsuqqhi:                       Fixed-point fractional library routines.
   42251                                                              (line 1566)
   42252 * __fractunsuqqqi:                       Fixed-point fractional library routines.
   42253                                                              (line 1564)
   42254 * __fractunsuqqsi:                       Fixed-point fractional library routines.
   42255                                                              (line 1568)
   42256 * __fractunsuqqti:                       Fixed-point fractional library routines.
   42257                                                              (line 1572)
   42258 * __fractunsusadi:                       Fixed-point fractional library routines.
   42259                                                              (line 1612)
   42260 * __fractunsusahi:                       Fixed-point fractional library routines.
   42261                                                              (line 1610)
   42262 * __fractunsusaqi:                       Fixed-point fractional library routines.
   42263                                                              (line 1609)
   42264 * __fractunsusasi:                       Fixed-point fractional library routines.
   42265                                                              (line 1611)
   42266 * __fractunsusati:                       Fixed-point fractional library routines.
   42267                                                              (line 1614)
   42268 * __fractunsusqdi:                       Fixed-point fractional library routines.
   42269                                                              (line 1586)
   42270 * __fractunsusqhi:                       Fixed-point fractional library routines.
   42271                                                              (line 1582)
   42272 * __fractunsusqqi:                       Fixed-point fractional library routines.
   42273                                                              (line 1580)
   42274 * __fractunsusqsi:                       Fixed-point fractional library routines.
   42275                                                              (line 1584)
   42276 * __fractunsusqti:                       Fixed-point fractional library routines.
   42277                                                              (line 1588)
   42278 * __fractunsutadi:                       Fixed-point fractional library routines.
   42279                                                              (line 1632)
   42280 * __fractunsutahi:                       Fixed-point fractional library routines.
   42281                                                              (line 1628)
   42282 * __fractunsutaqi:                       Fixed-point fractional library routines.
   42283                                                              (line 1626)
   42284 * __fractunsutasi:                       Fixed-point fractional library routines.
   42285                                                              (line 1630)
   42286 * __fractunsutati:                       Fixed-point fractional library routines.
   42287                                                              (line 1634)
   42288 * __fractuqqda:                          Fixed-point fractional library routines.
   42289                                                              (line  672)
   42290 * __fractuqqdf:                          Fixed-point fractional library routines.
   42291                                                              (line  695)
   42292 * __fractuqqdi:                          Fixed-point fractional library routines.
   42293                                                              (line  692)
   42294 * __fractuqqdq:                          Fixed-point fractional library routines.
   42295                                                              (line  669)
   42296 * __fractuqqha:                          Fixed-point fractional library routines.
   42297                                                              (line  670)
   42298 * __fractuqqhi:                          Fixed-point fractional library routines.
   42299                                                              (line  690)
   42300 * __fractuqqhq:                          Fixed-point fractional library routines.
   42301                                                              (line  666)
   42302 * __fractuqqqi:                          Fixed-point fractional library routines.
   42303                                                              (line  689)
   42304 * __fractuqqqq:                          Fixed-point fractional library routines.
   42305                                                              (line  665)
   42306 * __fractuqqsa:                          Fixed-point fractional library routines.
   42307                                                              (line  671)
   42308 * __fractuqqsf:                          Fixed-point fractional library routines.
   42309                                                              (line  694)
   42310 * __fractuqqsi:                          Fixed-point fractional library routines.
   42311                                                              (line  691)
   42312 * __fractuqqsq:                          Fixed-point fractional library routines.
   42313                                                              (line  667)
   42314 * __fractuqqta:                          Fixed-point fractional library routines.
   42315                                                              (line  674)
   42316 * __fractuqqti:                          Fixed-point fractional library routines.
   42317                                                              (line  693)
   42318 * __fractuqquda:                         Fixed-point fractional library routines.
   42319                                                              (line  686)
   42320 * __fractuqqudq2:                        Fixed-point fractional library routines.
   42321                                                              (line  680)
   42322 * __fractuqquha:                         Fixed-point fractional library routines.
   42323                                                              (line  682)
   42324 * __fractuqquhq2:                        Fixed-point fractional library routines.
   42325                                                              (line  676)
   42326 * __fractuqqusa:                         Fixed-point fractional library routines.
   42327                                                              (line  684)
   42328 * __fractuqqusq2:                        Fixed-point fractional library routines.
   42329                                                              (line  678)
   42330 * __fractuqquta:                         Fixed-point fractional library routines.
   42331                                                              (line  688)
   42332 * __fractusada:                          Fixed-point fractional library routines.
   42333                                                              (line  829)
   42334 * __fractusadf:                          Fixed-point fractional library routines.
   42335                                                              (line  850)
   42336 * __fractusadi:                          Fixed-point fractional library routines.
   42337                                                              (line  847)
   42338 * __fractusadq:                          Fixed-point fractional library routines.
   42339                                                              (line  826)
   42340 * __fractusaha:                          Fixed-point fractional library routines.
   42341                                                              (line  827)
   42342 * __fractusahi:                          Fixed-point fractional library routines.
   42343                                                              (line  845)
   42344 * __fractusahq:                          Fixed-point fractional library routines.
   42345                                                              (line  824)
   42346 * __fractusaqi:                          Fixed-point fractional library routines.
   42347                                                              (line  844)
   42348 * __fractusaqq:                          Fixed-point fractional library routines.
   42349                                                              (line  823)
   42350 * __fractusasa:                          Fixed-point fractional library routines.
   42351                                                              (line  828)
   42352 * __fractusasf:                          Fixed-point fractional library routines.
   42353                                                              (line  849)
   42354 * __fractusasi:                          Fixed-point fractional library routines.
   42355                                                              (line  846)
   42356 * __fractusasq:                          Fixed-point fractional library routines.
   42357                                                              (line  825)
   42358 * __fractusata:                          Fixed-point fractional library routines.
   42359                                                              (line  830)
   42360 * __fractusati:                          Fixed-point fractional library routines.
   42361                                                              (line  848)
   42362 * __fractusauda2:                        Fixed-point fractional library routines.
   42363                                                              (line  841)
   42364 * __fractusaudq:                         Fixed-point fractional library routines.
   42365                                                              (line  837)
   42366 * __fractusauha2:                        Fixed-point fractional library routines.
   42367                                                              (line  839)
   42368 * __fractusauhq:                         Fixed-point fractional library routines.
   42369                                                              (line  833)
   42370 * __fractusauqq:                         Fixed-point fractional library routines.
   42371                                                              (line  832)
   42372 * __fractusausq:                         Fixed-point fractional library routines.
   42373                                                              (line  835)
   42374 * __fractusauta2:                        Fixed-point fractional library routines.
   42375                                                              (line  843)
   42376 * __fractusqda:                          Fixed-point fractional library routines.
   42377                                                              (line  731)
   42378 * __fractusqdf:                          Fixed-point fractional library routines.
   42379                                                              (line  754)
   42380 * __fractusqdi:                          Fixed-point fractional library routines.
   42381                                                              (line  751)
   42382 * __fractusqdq:                          Fixed-point fractional library routines.
   42383                                                              (line  728)
   42384 * __fractusqha:                          Fixed-point fractional library routines.
   42385                                                              (line  729)
   42386 * __fractusqhi:                          Fixed-point fractional library routines.
   42387                                                              (line  749)
   42388 * __fractusqhq:                          Fixed-point fractional library routines.
   42389                                                              (line  725)
   42390 * __fractusqqi:                          Fixed-point fractional library routines.
   42391                                                              (line  748)
   42392 * __fractusqqq:                          Fixed-point fractional library routines.
   42393                                                              (line  724)
   42394 * __fractusqsa:                          Fixed-point fractional library routines.
   42395                                                              (line  730)
   42396 * __fractusqsf:                          Fixed-point fractional library routines.
   42397                                                              (line  753)
   42398 * __fractusqsi:                          Fixed-point fractional library routines.
   42399                                                              (line  750)
   42400 * __fractusqsq:                          Fixed-point fractional library routines.
   42401                                                              (line  726)
   42402 * __fractusqta:                          Fixed-point fractional library routines.
   42403                                                              (line  733)
   42404 * __fractusqti:                          Fixed-point fractional library routines.
   42405                                                              (line  752)
   42406 * __fractusquda:                         Fixed-point fractional library routines.
   42407                                                              (line  745)
   42408 * __fractusqudq2:                        Fixed-point fractional library routines.
   42409                                                              (line  739)
   42410 * __fractusquha:                         Fixed-point fractional library routines.
   42411                                                              (line  741)
   42412 * __fractusquhq2:                        Fixed-point fractional library routines.
   42413                                                              (line  737)
   42414 * __fractusquqq2:                        Fixed-point fractional library routines.
   42415                                                              (line  735)
   42416 * __fractusqusa:                         Fixed-point fractional library routines.
   42417                                                              (line  743)
   42418 * __fractusquta:                         Fixed-point fractional library routines.
   42419                                                              (line  747)
   42420 * __fractutada:                          Fixed-point fractional library routines.
   42421                                                              (line  893)
   42422 * __fractutadf:                          Fixed-point fractional library routines.
   42423                                                              (line  918)
   42424 * __fractutadi:                          Fixed-point fractional library routines.
   42425                                                              (line  914)
   42426 * __fractutadq:                          Fixed-point fractional library routines.
   42427                                                              (line  888)
   42428 * __fractutaha:                          Fixed-point fractional library routines.
   42429                                                              (line  890)
   42430 * __fractutahi:                          Fixed-point fractional library routines.
   42431                                                              (line  912)
   42432 * __fractutahq:                          Fixed-point fractional library routines.
   42433                                                              (line  884)
   42434 * __fractutaqi:                          Fixed-point fractional library routines.
   42435                                                              (line  911)
   42436 * __fractutaqq:                          Fixed-point fractional library routines.
   42437                                                              (line  883)
   42438 * __fractutasa:                          Fixed-point fractional library routines.
   42439                                                              (line  891)
   42440 * __fractutasf:                          Fixed-point fractional library routines.
   42441                                                              (line  917)
   42442 * __fractutasi:                          Fixed-point fractional library routines.
   42443                                                              (line  913)
   42444 * __fractutasq:                          Fixed-point fractional library routines.
   42445                                                              (line  886)
   42446 * __fractutata:                          Fixed-point fractional library routines.
   42447                                                              (line  895)
   42448 * __fractutati:                          Fixed-point fractional library routines.
   42449                                                              (line  916)
   42450 * __fractutauda2:                        Fixed-point fractional library routines.
   42451                                                              (line  909)
   42452 * __fractutaudq:                         Fixed-point fractional library routines.
   42453                                                              (line  903)
   42454 * __fractutauha2:                        Fixed-point fractional library routines.
   42455                                                              (line  905)
   42456 * __fractutauhq:                         Fixed-point fractional library routines.
   42457                                                              (line  899)
   42458 * __fractutauqq:                         Fixed-point fractional library routines.
   42459                                                              (line  897)
   42460 * __fractutausa2:                        Fixed-point fractional library routines.
   42461                                                              (line  907)
   42462 * __fractutausq:                         Fixed-point fractional library routines.
   42463                                                              (line  901)
   42464 * __gedf2:                               Soft float library routines.
   42465                                                              (line  206)
   42466 * __gesf2:                               Soft float library routines.
   42467                                                              (line  205)
   42468 * __getf2:                               Soft float library routines.
   42469                                                              (line  207)
   42470 * __gtdf2:                               Soft float library routines.
   42471                                                              (line  224)
   42472 * __gtsf2:                               Soft float library routines.
   42473                                                              (line  223)
   42474 * __gttf2:                               Soft float library routines.
   42475                                                              (line  225)
   42476 * __ledf2:                               Soft float library routines.
   42477                                                              (line  218)
   42478 * __lesf2:                               Soft float library routines.
   42479                                                              (line  217)
   42480 * __letf2:                               Soft float library routines.
   42481                                                              (line  219)
   42482 * __lshrdi3:                             Integer library routines.
   42483                                                              (line   31)
   42484 * __lshrsi3:                             Integer library routines.
   42485                                                              (line   30)
   42486 * __lshrti3:                             Integer library routines.
   42487                                                              (line   32)
   42488 * __lshruda3:                            Fixed-point fractional library routines.
   42489                                                              (line  390)
   42490 * __lshrudq3:                            Fixed-point fractional library routines.
   42491                                                              (line  384)
   42492 * __lshruha3:                            Fixed-point fractional library routines.
   42493                                                              (line  386)
   42494 * __lshruhq3:                            Fixed-point fractional library routines.
   42495                                                              (line  380)
   42496 * __lshruqq3:                            Fixed-point fractional library routines.
   42497                                                              (line  378)
   42498 * __lshrusa3:                            Fixed-point fractional library routines.
   42499                                                              (line  388)
   42500 * __lshrusq3:                            Fixed-point fractional library routines.
   42501                                                              (line  382)
   42502 * __lshruta3:                            Fixed-point fractional library routines.
   42503                                                              (line  392)
   42504 * __ltdf2:                               Soft float library routines.
   42505                                                              (line  212)
   42506 * __ltsf2:                               Soft float library routines.
   42507                                                              (line  211)
   42508 * __lttf2:                               Soft float library routines.
   42509                                                              (line  213)
   42510 * __main:                                Collect2.           (line   15)
   42511 * __moddi3:                              Integer library routines.
   42512                                                              (line   37)
   42513 * __modsi3:                              Integer library routines.
   42514                                                              (line   36)
   42515 * __modti3:                              Integer library routines.
   42516                                                              (line   38)
   42517 * __morestack_current_segment:           Miscellaneous routines.
   42518                                                              (line   46)
   42519 * __morestack_initial_sp:                Miscellaneous routines.
   42520                                                              (line   47)
   42521 * __morestack_segments:                  Miscellaneous routines.
   42522                                                              (line   45)
   42523 * __mulda3:                              Fixed-point fractional library routines.
   42524                                                              (line  171)
   42525 * __muldc3:                              Soft float library routines.
   42526                                                              (line  241)
   42527 * __muldf3:                              Soft float library routines.
   42528                                                              (line   40)
   42529 * __muldi3:                              Integer library routines.
   42530                                                              (line   43)
   42531 * __muldq3:                              Fixed-point fractional library routines.
   42532                                                              (line  159)
   42533 * __mulha3:                              Fixed-point fractional library routines.
   42534                                                              (line  169)
   42535 * __mulhq3:                              Fixed-point fractional library routines.
   42536                                                              (line  156)
   42537 * __mulqq3:                              Fixed-point fractional library routines.
   42538                                                              (line  155)
   42539 * __mulsa3:                              Fixed-point fractional library routines.
   42540                                                              (line  170)
   42541 * __mulsc3:                              Soft float library routines.
   42542                                                              (line  239)
   42543 * __mulsf3:                              Soft float library routines.
   42544                                                              (line   39)
   42545 * __mulsi3:                              Integer library routines.
   42546                                                              (line   42)
   42547 * __mulsq3:                              Fixed-point fractional library routines.
   42548                                                              (line  157)
   42549 * __multa3:                              Fixed-point fractional library routines.
   42550                                                              (line  173)
   42551 * __multc3:                              Soft float library routines.
   42552                                                              (line  243)
   42553 * __multf3:                              Soft float library routines.
   42554                                                              (line   42)
   42555 * __multi3:                              Integer library routines.
   42556                                                              (line   44)
   42557 * __muluda3:                             Fixed-point fractional library routines.
   42558                                                              (line  179)
   42559 * __muludq3:                             Fixed-point fractional library routines.
   42560                                                              (line  167)
   42561 * __muluha3:                             Fixed-point fractional library routines.
   42562                                                              (line  175)
   42563 * __muluhq3:                             Fixed-point fractional library routines.
   42564                                                              (line  163)
   42565 * __muluqq3:                             Fixed-point fractional library routines.
   42566                                                              (line  161)
   42567 * __mulusa3:                             Fixed-point fractional library routines.
   42568                                                              (line  177)
   42569 * __mulusq3:                             Fixed-point fractional library routines.
   42570                                                              (line  165)
   42571 * __muluta3:                             Fixed-point fractional library routines.
   42572                                                              (line  181)
   42573 * __mulvdi3:                             Integer library routines.
   42574                                                              (line  115)
   42575 * __mulvsi3:                             Integer library routines.
   42576                                                              (line  114)
   42577 * __mulxc3:                              Soft float library routines.
   42578                                                              (line  245)
   42579 * __mulxf3:                              Soft float library routines.
   42580                                                              (line   44)
   42581 * __nedf2:                               Soft float library routines.
   42582                                                              (line  200)
   42583 * __negda2:                              Fixed-point fractional library routines.
   42584                                                              (line  299)
   42585 * __negdf2:                              Soft float library routines.
   42586                                                              (line   56)
   42587 * __negdi2:                              Integer library routines.
   42588                                                              (line   47)
   42589 * __negdq2:                              Fixed-point fractional library routines.
   42590                                                              (line  289)
   42591 * __negha2:                              Fixed-point fractional library routines.
   42592                                                              (line  297)
   42593 * __neghq2:                              Fixed-point fractional library routines.
   42594                                                              (line  287)
   42595 * __negqq2:                              Fixed-point fractional library routines.
   42596                                                              (line  286)
   42597 * __negsa2:                              Fixed-point fractional library routines.
   42598                                                              (line  298)
   42599 * __negsf2:                              Soft float library routines.
   42600                                                              (line   55)
   42601 * __negsq2:                              Fixed-point fractional library routines.
   42602                                                              (line  288)
   42603 * __negta2:                              Fixed-point fractional library routines.
   42604                                                              (line  300)
   42605 * __negtf2:                              Soft float library routines.
   42606                                                              (line   57)
   42607 * __negti2:                              Integer library routines.
   42608                                                              (line   48)
   42609 * __neguda2:                             Fixed-point fractional library routines.
   42610                                                              (line  305)
   42611 * __negudq2:                             Fixed-point fractional library routines.
   42612                                                              (line  296)
   42613 * __neguha2:                             Fixed-point fractional library routines.
   42614                                                              (line  302)
   42615 * __neguhq2:                             Fixed-point fractional library routines.
   42616                                                              (line  292)
   42617 * __neguqq2:                             Fixed-point fractional library routines.
   42618                                                              (line  291)
   42619 * __negusa2:                             Fixed-point fractional library routines.
   42620                                                              (line  303)
   42621 * __negusq2:                             Fixed-point fractional library routines.
   42622                                                              (line  294)
   42623 * __neguta2:                             Fixed-point fractional library routines.
   42624                                                              (line  307)
   42625 * __negvdi2:                             Integer library routines.
   42626                                                              (line  119)
   42627 * __negvsi2:                             Integer library routines.
   42628                                                              (line  118)
   42629 * __negxf2:                              Soft float library routines.
   42630                                                              (line   58)
   42631 * __nesf2:                               Soft float library routines.
   42632                                                              (line  199)
   42633 * __netf2:                               Soft float library routines.
   42634                                                              (line  201)
   42635 * __paritydi2:                           Integer library routines.
   42636                                                              (line  151)
   42637 * __paritysi2:                           Integer library routines.
   42638                                                              (line  150)
   42639 * __parityti2:                           Integer library routines.
   42640                                                              (line  152)
   42641 * __popcountdi2:                         Integer library routines.
   42642                                                              (line  157)
   42643 * __popcountsi2:                         Integer library routines.
   42644                                                              (line  156)
   42645 * __popcountti2:                         Integer library routines.
   42646                                                              (line  158)
   42647 * __powidf2:                             Soft float library routines.
   42648                                                              (line  233)
   42649 * __powisf2:                             Soft float library routines.
   42650                                                              (line  232)
   42651 * __powitf2:                             Soft float library routines.
   42652                                                              (line  234)
   42653 * __powixf2:                             Soft float library routines.
   42654                                                              (line  235)
   42655 * __satfractdadq:                        Fixed-point fractional library routines.
   42656                                                              (line 1153)
   42657 * __satfractdaha2:                       Fixed-point fractional library routines.
   42658                                                              (line 1154)
   42659 * __satfractdahq:                        Fixed-point fractional library routines.
   42660                                                              (line 1151)
   42661 * __satfractdaqq:                        Fixed-point fractional library routines.
   42662                                                              (line 1150)
   42663 * __satfractdasa2:                       Fixed-point fractional library routines.
   42664                                                              (line 1155)
   42665 * __satfractdasq:                        Fixed-point fractional library routines.
   42666                                                              (line 1152)
   42667 * __satfractdata2:                       Fixed-point fractional library routines.
   42668                                                              (line 1156)
   42669 * __satfractdauda:                       Fixed-point fractional library routines.
   42670                                                              (line 1166)
   42671 * __satfractdaudq:                       Fixed-point fractional library routines.
   42672                                                              (line 1162)
   42673 * __satfractdauha:                       Fixed-point fractional library routines.
   42674                                                              (line 1164)
   42675 * __satfractdauhq:                       Fixed-point fractional library routines.
   42676                                                              (line 1159)
   42677 * __satfractdauqq:                       Fixed-point fractional library routines.
   42678                                                              (line 1158)
   42679 * __satfractdausa:                       Fixed-point fractional library routines.
   42680                                                              (line 1165)
   42681 * __satfractdausq:                       Fixed-point fractional library routines.
   42682                                                              (line 1160)
   42683 * __satfractdauta:                       Fixed-point fractional library routines.
   42684                                                              (line 1168)
   42685 * __satfractdfda:                        Fixed-point fractional library routines.
   42686                                                              (line 1506)
   42687 * __satfractdfdq:                        Fixed-point fractional library routines.
   42688                                                              (line 1503)
   42689 * __satfractdfha:                        Fixed-point fractional library routines.
   42690                                                              (line 1504)
   42691 * __satfractdfhq:                        Fixed-point fractional library routines.
   42692                                                              (line 1501)
   42693 * __satfractdfqq:                        Fixed-point fractional library routines.
   42694                                                              (line 1500)
   42695 * __satfractdfsa:                        Fixed-point fractional library routines.
   42696                                                              (line 1505)
   42697 * __satfractdfsq:                        Fixed-point fractional library routines.
   42698                                                              (line 1502)
   42699 * __satfractdfta:                        Fixed-point fractional library routines.
   42700                                                              (line 1507)
   42701 * __satfractdfuda:                       Fixed-point fractional library routines.
   42702                                                              (line 1515)
   42703 * __satfractdfudq:                       Fixed-point fractional library routines.
   42704                                                              (line 1512)
   42705 * __satfractdfuha:                       Fixed-point fractional library routines.
   42706                                                              (line 1513)
   42707 * __satfractdfuhq:                       Fixed-point fractional library routines.
   42708                                                              (line 1509)
   42709 * __satfractdfuqq:                       Fixed-point fractional library routines.
   42710                                                              (line 1508)
   42711 * __satfractdfusa:                       Fixed-point fractional library routines.
   42712                                                              (line 1514)
   42713 * __satfractdfusq:                       Fixed-point fractional library routines.
   42714                                                              (line 1510)
   42715 * __satfractdfuta:                       Fixed-point fractional library routines.
   42716                                                              (line 1517)
   42717 * __satfractdida:                        Fixed-point fractional library routines.
   42718                                                              (line 1456)
   42719 * __satfractdidq:                        Fixed-point fractional library routines.
   42720                                                              (line 1453)
   42721 * __satfractdiha:                        Fixed-point fractional library routines.
   42722                                                              (line 1454)
   42723 * __satfractdihq:                        Fixed-point fractional library routines.
   42724                                                              (line 1451)
   42725 * __satfractdiqq:                        Fixed-point fractional library routines.
   42726                                                              (line 1450)
   42727 * __satfractdisa:                        Fixed-point fractional library routines.
   42728                                                              (line 1455)
   42729 * __satfractdisq:                        Fixed-point fractional library routines.
   42730                                                              (line 1452)
   42731 * __satfractdita:                        Fixed-point fractional library routines.
   42732                                                              (line 1457)
   42733 * __satfractdiuda:                       Fixed-point fractional library routines.
   42734                                                              (line 1464)
   42735 * __satfractdiudq:                       Fixed-point fractional library routines.
   42736                                                              (line 1461)
   42737 * __satfractdiuha:                       Fixed-point fractional library routines.
   42738                                                              (line 1462)
   42739 * __satfractdiuhq:                       Fixed-point fractional library routines.
   42740                                                              (line 1459)
   42741 * __satfractdiuqq:                       Fixed-point fractional library routines.
   42742                                                              (line 1458)
   42743 * __satfractdiusa:                       Fixed-point fractional library routines.
   42744                                                              (line 1463)
   42745 * __satfractdiusq:                       Fixed-point fractional library routines.
   42746                                                              (line 1460)
   42747 * __satfractdiuta:                       Fixed-point fractional library routines.
   42748                                                              (line 1465)
   42749 * __satfractdqda:                        Fixed-point fractional library routines.
   42750                                                              (line 1098)
   42751 * __satfractdqha:                        Fixed-point fractional library routines.
   42752                                                              (line 1096)
   42753 * __satfractdqhq2:                       Fixed-point fractional library routines.
   42754                                                              (line 1094)
   42755 * __satfractdqqq2:                       Fixed-point fractional library routines.
   42756                                                              (line 1093)
   42757 * __satfractdqsa:                        Fixed-point fractional library routines.
   42758                                                              (line 1097)
   42759 * __satfractdqsq2:                       Fixed-point fractional library routines.
   42760                                                              (line 1095)
   42761 * __satfractdqta:                        Fixed-point fractional library routines.
   42762                                                              (line 1099)
   42763 * __satfractdquda:                       Fixed-point fractional library routines.
   42764                                                              (line 1111)
   42765 * __satfractdqudq:                       Fixed-point fractional library routines.
   42766                                                              (line 1106)
   42767 * __satfractdquha:                       Fixed-point fractional library routines.
   42768                                                              (line 1108)
   42769 * __satfractdquhq:                       Fixed-point fractional library routines.
   42770                                                              (line 1102)
   42771 * __satfractdquqq:                       Fixed-point fractional library routines.
   42772                                                              (line 1101)
   42773 * __satfractdqusa:                       Fixed-point fractional library routines.
   42774                                                              (line 1109)
   42775 * __satfractdqusq:                       Fixed-point fractional library routines.
   42776                                                              (line 1104)
   42777 * __satfractdquta:                       Fixed-point fractional library routines.
   42778                                                              (line 1113)
   42779 * __satfracthada2:                       Fixed-point fractional library routines.
   42780                                                              (line 1119)
   42781 * __satfracthadq:                        Fixed-point fractional library routines.
   42782                                                              (line 1117)
   42783 * __satfracthahq:                        Fixed-point fractional library routines.
   42784                                                              (line 1115)
   42785 * __satfracthaqq:                        Fixed-point fractional library routines.
   42786                                                              (line 1114)
   42787 * __satfracthasa2:                       Fixed-point fractional library routines.
   42788                                                              (line 1118)
   42789 * __satfracthasq:                        Fixed-point fractional library routines.
   42790                                                              (line 1116)
   42791 * __satfracthata2:                       Fixed-point fractional library routines.
   42792                                                              (line 1120)
   42793 * __satfracthauda:                       Fixed-point fractional library routines.
   42794                                                              (line 1132)
   42795 * __satfracthaudq:                       Fixed-point fractional library routines.
   42796                                                              (line 1127)
   42797 * __satfracthauha:                       Fixed-point fractional library routines.
   42798                                                              (line 1129)
   42799 * __satfracthauhq:                       Fixed-point fractional library routines.
   42800                                                              (line 1123)
   42801 * __satfracthauqq:                       Fixed-point fractional library routines.
   42802                                                              (line 1122)
   42803 * __satfracthausa:                       Fixed-point fractional library routines.
   42804                                                              (line 1130)
   42805 * __satfracthausq:                       Fixed-point fractional library routines.
   42806                                                              (line 1125)
   42807 * __satfracthauta:                       Fixed-point fractional library routines.
   42808                                                              (line 1134)
   42809 * __satfracthida:                        Fixed-point fractional library routines.
   42810                                                              (line 1424)
   42811 * __satfracthidq:                        Fixed-point fractional library routines.
   42812                                                              (line 1421)
   42813 * __satfracthiha:                        Fixed-point fractional library routines.
   42814                                                              (line 1422)
   42815 * __satfracthihq:                        Fixed-point fractional library routines.
   42816                                                              (line 1419)
   42817 * __satfracthiqq:                        Fixed-point fractional library routines.
   42818                                                              (line 1418)
   42819 * __satfracthisa:                        Fixed-point fractional library routines.
   42820                                                              (line 1423)
   42821 * __satfracthisq:                        Fixed-point fractional library routines.
   42822                                                              (line 1420)
   42823 * __satfracthita:                        Fixed-point fractional library routines.
   42824                                                              (line 1425)
   42825 * __satfracthiuda:                       Fixed-point fractional library routines.
   42826                                                              (line 1432)
   42827 * __satfracthiudq:                       Fixed-point fractional library routines.
   42828                                                              (line 1429)
   42829 * __satfracthiuha:                       Fixed-point fractional library routines.
   42830                                                              (line 1430)
   42831 * __satfracthiuhq:                       Fixed-point fractional library routines.
   42832                                                              (line 1427)
   42833 * __satfracthiuqq:                       Fixed-point fractional library routines.
   42834                                                              (line 1426)
   42835 * __satfracthiusa:                       Fixed-point fractional library routines.
   42836                                                              (line 1431)
   42837 * __satfracthiusq:                       Fixed-point fractional library routines.
   42838                                                              (line 1428)
   42839 * __satfracthiuta:                       Fixed-point fractional library routines.
   42840                                                              (line 1433)
   42841 * __satfracthqda:                        Fixed-point fractional library routines.
   42842                                                              (line 1064)
   42843 * __satfracthqdq2:                       Fixed-point fractional library routines.
   42844                                                              (line 1061)
   42845 * __satfracthqha:                        Fixed-point fractional library routines.
   42846                                                              (line 1062)
   42847 * __satfracthqqq2:                       Fixed-point fractional library routines.
   42848                                                              (line 1059)
   42849 * __satfracthqsa:                        Fixed-point fractional library routines.
   42850                                                              (line 1063)
   42851 * __satfracthqsq2:                       Fixed-point fractional library routines.
   42852                                                              (line 1060)
   42853 * __satfracthqta:                        Fixed-point fractional library routines.
   42854                                                              (line 1065)
   42855 * __satfracthquda:                       Fixed-point fractional library routines.
   42856                                                              (line 1072)
   42857 * __satfracthqudq:                       Fixed-point fractional library routines.
   42858                                                              (line 1069)
   42859 * __satfracthquha:                       Fixed-point fractional library routines.
   42860                                                              (line 1070)
   42861 * __satfracthquhq:                       Fixed-point fractional library routines.
   42862                                                              (line 1067)
   42863 * __satfracthquqq:                       Fixed-point fractional library routines.
   42864                                                              (line 1066)
   42865 * __satfracthqusa:                       Fixed-point fractional library routines.
   42866                                                              (line 1071)
   42867 * __satfracthqusq:                       Fixed-point fractional library routines.
   42868                                                              (line 1068)
   42869 * __satfracthquta:                       Fixed-point fractional library routines.
   42870                                                              (line 1073)
   42871 * __satfractqida:                        Fixed-point fractional library routines.
   42872                                                              (line 1402)
   42873 * __satfractqidq:                        Fixed-point fractional library routines.
   42874                                                              (line 1399)
   42875 * __satfractqiha:                        Fixed-point fractional library routines.
   42876                                                              (line 1400)
   42877 * __satfractqihq:                        Fixed-point fractional library routines.
   42878                                                              (line 1397)
   42879 * __satfractqiqq:                        Fixed-point fractional library routines.
   42880                                                              (line 1396)
   42881 * __satfractqisa:                        Fixed-point fractional library routines.
   42882                                                              (line 1401)
   42883 * __satfractqisq:                        Fixed-point fractional library routines.
   42884                                                              (line 1398)
   42885 * __satfractqita:                        Fixed-point fractional library routines.
   42886                                                              (line 1403)
   42887 * __satfractqiuda:                       Fixed-point fractional library routines.
   42888                                                              (line 1415)
   42889 * __satfractqiudq:                       Fixed-point fractional library routines.
   42890                                                              (line 1410)
   42891 * __satfractqiuha:                       Fixed-point fractional library routines.
   42892                                                              (line 1412)
   42893 * __satfractqiuhq:                       Fixed-point fractional library routines.
   42894                                                              (line 1406)
   42895 * __satfractqiuqq:                       Fixed-point fractional library routines.
   42896                                                              (line 1405)
   42897 * __satfractqiusa:                       Fixed-point fractional library routines.
   42898                                                              (line 1413)
   42899 * __satfractqiusq:                       Fixed-point fractional library routines.
   42900                                                              (line 1408)
   42901 * __satfractqiuta:                       Fixed-point fractional library routines.
   42902                                                              (line 1417)
   42903 * __satfractqqda:                        Fixed-point fractional library routines.
   42904                                                              (line 1043)
   42905 * __satfractqqdq2:                       Fixed-point fractional library routines.
   42906                                                              (line 1040)
   42907 * __satfractqqha:                        Fixed-point fractional library routines.
   42908                                                              (line 1041)
   42909 * __satfractqqhq2:                       Fixed-point fractional library routines.
   42910                                                              (line 1038)
   42911 * __satfractqqsa:                        Fixed-point fractional library routines.
   42912                                                              (line 1042)
   42913 * __satfractqqsq2:                       Fixed-point fractional library routines.
   42914                                                              (line 1039)
   42915 * __satfractqqta:                        Fixed-point fractional library routines.
   42916                                                              (line 1044)
   42917 * __satfractqquda:                       Fixed-point fractional library routines.
   42918                                                              (line 1056)
   42919 * __satfractqqudq:                       Fixed-point fractional library routines.
   42920                                                              (line 1051)
   42921 * __satfractqquha:                       Fixed-point fractional library routines.
   42922                                                              (line 1053)
   42923 * __satfractqquhq:                       Fixed-point fractional library routines.
   42924                                                              (line 1047)
   42925 * __satfractqquqq:                       Fixed-point fractional library routines.
   42926                                                              (line 1046)
   42927 * __satfractqqusa:                       Fixed-point fractional library routines.
   42928                                                              (line 1054)
   42929 * __satfractqqusq:                       Fixed-point fractional library routines.
   42930                                                              (line 1049)
   42931 * __satfractqquta:                       Fixed-point fractional library routines.
   42932                                                              (line 1058)
   42933 * __satfractsada2:                       Fixed-point fractional library routines.
   42934                                                              (line 1140)
   42935 * __satfractsadq:                        Fixed-point fractional library routines.
   42936                                                              (line 1138)
   42937 * __satfractsaha2:                       Fixed-point fractional library routines.
   42938                                                              (line 1139)
   42939 * __satfractsahq:                        Fixed-point fractional library routines.
   42940                                                              (line 1136)
   42941 * __satfractsaqq:                        Fixed-point fractional library routines.
   42942                                                              (line 1135)
   42943 * __satfractsasq:                        Fixed-point fractional library routines.
   42944                                                              (line 1137)
   42945 * __satfractsata2:                       Fixed-point fractional library routines.
   42946                                                              (line 1141)
   42947 * __satfractsauda:                       Fixed-point fractional library routines.
   42948                                                              (line 1148)
   42949 * __satfractsaudq:                       Fixed-point fractional library routines.
   42950                                                              (line 1145)
   42951 * __satfractsauha:                       Fixed-point fractional library routines.
   42952                                                              (line 1146)
   42953 * __satfractsauhq:                       Fixed-point fractional library routines.
   42954                                                              (line 1143)
   42955 * __satfractsauqq:                       Fixed-point fractional library routines.
   42956                                                              (line 1142)
   42957 * __satfractsausa:                       Fixed-point fractional library routines.
   42958                                                              (line 1147)
   42959 * __satfractsausq:                       Fixed-point fractional library routines.
   42960                                                              (line 1144)
   42961 * __satfractsauta:                       Fixed-point fractional library routines.
   42962                                                              (line 1149)
   42963 * __satfractsfda:                        Fixed-point fractional library routines.
   42964                                                              (line 1490)
   42965 * __satfractsfdq:                        Fixed-point fractional library routines.
   42966                                                              (line 1487)
   42967 * __satfractsfha:                        Fixed-point fractional library routines.
   42968                                                              (line 1488)
   42969 * __satfractsfhq:                        Fixed-point fractional library routines.
   42970                                                              (line 1485)
   42971 * __satfractsfqq:                        Fixed-point fractional library routines.
   42972                                                              (line 1484)
   42973 * __satfractsfsa:                        Fixed-point fractional library routines.
   42974                                                              (line 1489)
   42975 * __satfractsfsq:                        Fixed-point fractional library routines.
   42976                                                              (line 1486)
   42977 * __satfractsfta:                        Fixed-point fractional library routines.
   42978                                                              (line 1491)
   42979 * __satfractsfuda:                       Fixed-point fractional library routines.
   42980                                                              (line 1498)
   42981 * __satfractsfudq:                       Fixed-point fractional library routines.
   42982                                                              (line 1495)
   42983 * __satfractsfuha:                       Fixed-point fractional library routines.
   42984                                                              (line 1496)
   42985 * __satfractsfuhq:                       Fixed-point fractional library routines.
   42986                                                              (line 1493)
   42987 * __satfractsfuqq:                       Fixed-point fractional library routines.
   42988                                                              (line 1492)
   42989 * __satfractsfusa:                       Fixed-point fractional library routines.
   42990                                                              (line 1497)
   42991 * __satfractsfusq:                       Fixed-point fractional library routines.
   42992                                                              (line 1494)
   42993 * __satfractsfuta:                       Fixed-point fractional library routines.
   42994                                                              (line 1499)
   42995 * __satfractsida:                        Fixed-point fractional library routines.
   42996                                                              (line 1440)
   42997 * __satfractsidq:                        Fixed-point fractional library routines.
   42998                                                              (line 1437)
   42999 * __satfractsiha:                        Fixed-point fractional library routines.
   43000                                                              (line 1438)
   43001 * __satfractsihq:                        Fixed-point fractional library routines.
   43002                                                              (line 1435)
   43003 * __satfractsiqq:                        Fixed-point fractional library routines.
   43004                                                              (line 1434)
   43005 * __satfractsisa:                        Fixed-point fractional library routines.
   43006                                                              (line 1439)
   43007 * __satfractsisq:                        Fixed-point fractional library routines.
   43008                                                              (line 1436)
   43009 * __satfractsita:                        Fixed-point fractional library routines.
   43010                                                              (line 1441)
   43011 * __satfractsiuda:                       Fixed-point fractional library routines.
   43012                                                              (line 1448)
   43013 * __satfractsiudq:                       Fixed-point fractional library routines.
   43014                                                              (line 1445)
   43015 * __satfractsiuha:                       Fixed-point fractional library routines.
   43016                                                              (line 1446)
   43017 * __satfractsiuhq:                       Fixed-point fractional library routines.
   43018                                                              (line 1443)
   43019 * __satfractsiuqq:                       Fixed-point fractional library routines.
   43020                                                              (line 1442)
   43021 * __satfractsiusa:                       Fixed-point fractional library routines.
   43022                                                              (line 1447)
   43023 * __satfractsiusq:                       Fixed-point fractional library routines.
   43024                                                              (line 1444)
   43025 * __satfractsiuta:                       Fixed-point fractional library routines.
   43026                                                              (line 1449)
   43027 * __satfractsqda:                        Fixed-point fractional library routines.
   43028                                                              (line 1079)
   43029 * __satfractsqdq2:                       Fixed-point fractional library routines.
   43030                                                              (line 1076)
   43031 * __satfractsqha:                        Fixed-point fractional library routines.
   43032                                                              (line 1077)
   43033 * __satfractsqhq2:                       Fixed-point fractional library routines.
   43034                                                              (line 1075)
   43035 * __satfractsqqq2:                       Fixed-point fractional library routines.
   43036                                                              (line 1074)
   43037 * __satfractsqsa:                        Fixed-point fractional library routines.
   43038                                                              (line 1078)
   43039 * __satfractsqta:                        Fixed-point fractional library routines.
   43040                                                              (line 1080)
   43041 * __satfractsquda:                       Fixed-point fractional library routines.
   43042                                                              (line 1090)
   43043 * __satfractsqudq:                       Fixed-point fractional library routines.
   43044                                                              (line 1086)
   43045 * __satfractsquha:                       Fixed-point fractional library routines.
   43046                                                              (line 1088)
   43047 * __satfractsquhq:                       Fixed-point fractional library routines.
   43048                                                              (line 1083)
   43049 * __satfractsquqq:                       Fixed-point fractional library routines.
   43050                                                              (line 1082)
   43051 * __satfractsqusa:                       Fixed-point fractional library routines.
   43052                                                              (line 1089)
   43053 * __satfractsqusq:                       Fixed-point fractional library routines.
   43054                                                              (line 1084)
   43055 * __satfractsquta:                       Fixed-point fractional library routines.
   43056                                                              (line 1092)
   43057 * __satfracttada2:                       Fixed-point fractional library routines.
   43058                                                              (line 1175)
   43059 * __satfracttadq:                        Fixed-point fractional library routines.
   43060                                                              (line 1172)
   43061 * __satfracttaha2:                       Fixed-point fractional library routines.
   43062                                                              (line 1173)
   43063 * __satfracttahq:                        Fixed-point fractional library routines.
   43064                                                              (line 1170)
   43065 * __satfracttaqq:                        Fixed-point fractional library routines.
   43066                                                              (line 1169)
   43067 * __satfracttasa2:                       Fixed-point fractional library routines.
   43068                                                              (line 1174)
   43069 * __satfracttasq:                        Fixed-point fractional library routines.
   43070                                                              (line 1171)
   43071 * __satfracttauda:                       Fixed-point fractional library routines.
   43072                                                              (line 1187)
   43073 * __satfracttaudq:                       Fixed-point fractional library routines.
   43074                                                              (line 1182)
   43075 * __satfracttauha:                       Fixed-point fractional library routines.
   43076                                                              (line 1184)
   43077 * __satfracttauhq:                       Fixed-point fractional library routines.
   43078                                                              (line 1178)
   43079 * __satfracttauqq:                       Fixed-point fractional library routines.
   43080                                                              (line 1177)
   43081 * __satfracttausa:                       Fixed-point fractional library routines.
   43082                                                              (line 1185)
   43083 * __satfracttausq:                       Fixed-point fractional library routines.
   43084                                                              (line 1180)
   43085 * __satfracttauta:                       Fixed-point fractional library routines.
   43086                                                              (line 1189)
   43087 * __satfracttida:                        Fixed-point fractional library routines.
   43088                                                              (line 1472)
   43089 * __satfracttidq:                        Fixed-point fractional library routines.
   43090                                                              (line 1469)
   43091 * __satfracttiha:                        Fixed-point fractional library routines.
   43092                                                              (line 1470)
   43093 * __satfracttihq:                        Fixed-point fractional library routines.
   43094                                                              (line 1467)
   43095 * __satfracttiqq:                        Fixed-point fractional library routines.
   43096                                                              (line 1466)
   43097 * __satfracttisa:                        Fixed-point fractional library routines.
   43098                                                              (line 1471)
   43099 * __satfracttisq:                        Fixed-point fractional library routines.
   43100                                                              (line 1468)
   43101 * __satfracttita:                        Fixed-point fractional library routines.
   43102                                                              (line 1473)
   43103 * __satfracttiuda:                       Fixed-point fractional library routines.
   43104                                                              (line 1481)
   43105 * __satfracttiudq:                       Fixed-point fractional library routines.
   43106                                                              (line 1478)
   43107 * __satfracttiuha:                       Fixed-point fractional library routines.
   43108                                                              (line 1479)
   43109 * __satfracttiuhq:                       Fixed-point fractional library routines.
   43110                                                              (line 1475)
   43111 * __satfracttiuqq:                       Fixed-point fractional library routines.
   43112                                                              (line 1474)
   43113 * __satfracttiusa:                       Fixed-point fractional library routines.
   43114                                                              (line 1480)
   43115 * __satfracttiusq:                       Fixed-point fractional library routines.
   43116                                                              (line 1476)
   43117 * __satfracttiuta:                       Fixed-point fractional library routines.
   43118                                                              (line 1483)
   43119 * __satfractudada:                       Fixed-point fractional library routines.
   43120                                                              (line 1351)
   43121 * __satfractudadq:                       Fixed-point fractional library routines.
   43122                                                              (line 1347)
   43123 * __satfractudaha:                       Fixed-point fractional library routines.
   43124                                                              (line 1349)
   43125 * __satfractudahq:                       Fixed-point fractional library routines.
   43126                                                              (line 1344)
   43127 * __satfractudaqq:                       Fixed-point fractional library routines.
   43128                                                              (line 1343)
   43129 * __satfractudasa:                       Fixed-point fractional library routines.
   43130                                                              (line 1350)
   43131 * __satfractudasq:                       Fixed-point fractional library routines.
   43132                                                              (line 1345)
   43133 * __satfractudata:                       Fixed-point fractional library routines.
   43134                                                              (line 1353)
   43135 * __satfractudaudq:                      Fixed-point fractional library routines.
   43136                                                              (line 1361)
   43137 * __satfractudauha2:                     Fixed-point fractional library routines.
   43138                                                              (line 1363)
   43139 * __satfractudauhq:                      Fixed-point fractional library routines.
   43140                                                              (line 1357)
   43141 * __satfractudauqq:                      Fixed-point fractional library routines.
   43142                                                              (line 1355)
   43143 * __satfractudausa2:                     Fixed-point fractional library routines.
   43144                                                              (line 1365)
   43145 * __satfractudausq:                      Fixed-point fractional library routines.
   43146                                                              (line 1359)
   43147 * __satfractudauta2:                     Fixed-point fractional library routines.
   43148                                                              (line 1367)
   43149 * __satfractudqda:                       Fixed-point fractional library routines.
   43150                                                              (line 1276)
   43151 * __satfractudqdq:                       Fixed-point fractional library routines.
   43152                                                              (line 1271)
   43153 * __satfractudqha:                       Fixed-point fractional library routines.
   43154                                                              (line 1273)
   43155 * __satfractudqhq:                       Fixed-point fractional library routines.
   43156                                                              (line 1267)
   43157 * __satfractudqqq:                       Fixed-point fractional library routines.
   43158                                                              (line 1266)
   43159 * __satfractudqsa:                       Fixed-point fractional library routines.
   43160                                                              (line 1274)
   43161 * __satfractudqsq:                       Fixed-point fractional library routines.
   43162                                                              (line 1269)
   43163 * __satfractudqta:                       Fixed-point fractional library routines.
   43164                                                              (line 1278)
   43165 * __satfractudquda:                      Fixed-point fractional library routines.
   43166                                                              (line 1290)
   43167 * __satfractudquha:                      Fixed-point fractional library routines.
   43168                                                              (line 1286)
   43169 * __satfractudquhq2:                     Fixed-point fractional library routines.
   43170                                                              (line 1282)
   43171 * __satfractudquqq2:                     Fixed-point fractional library routines.
   43172                                                              (line 1280)
   43173 * __satfractudqusa:                      Fixed-point fractional library routines.
   43174                                                              (line 1288)
   43175 * __satfractudqusq2:                     Fixed-point fractional library routines.
   43176                                                              (line 1284)
   43177 * __satfractudquta:                      Fixed-point fractional library routines.
   43178                                                              (line 1292)
   43179 * __satfractuhada:                       Fixed-point fractional library routines.
   43180                                                              (line 1304)
   43181 * __satfractuhadq:                       Fixed-point fractional library routines.
   43182                                                              (line 1299)
   43183 * __satfractuhaha:                       Fixed-point fractional library routines.
   43184                                                              (line 1301)
   43185 * __satfractuhahq:                       Fixed-point fractional library routines.
   43186                                                              (line 1295)
   43187 * __satfractuhaqq:                       Fixed-point fractional library routines.
   43188                                                              (line 1294)
   43189 * __satfractuhasa:                       Fixed-point fractional library routines.
   43190                                                              (line 1302)
   43191 * __satfractuhasq:                       Fixed-point fractional library routines.
   43192                                                              (line 1297)
   43193 * __satfractuhata:                       Fixed-point fractional library routines.
   43194                                                              (line 1306)
   43195 * __satfractuhauda2:                     Fixed-point fractional library routines.
   43196                                                              (line 1318)
   43197 * __satfractuhaudq:                      Fixed-point fractional library routines.
   43198                                                              (line 1314)
   43199 * __satfractuhauhq:                      Fixed-point fractional library routines.
   43200                                                              (line 1310)
   43201 * __satfractuhauqq:                      Fixed-point fractional library routines.
   43202                                                              (line 1308)
   43203 * __satfractuhausa2:                     Fixed-point fractional library routines.
   43204                                                              (line 1316)
   43205 * __satfractuhausq:                      Fixed-point fractional library routines.
   43206                                                              (line 1312)
   43207 * __satfractuhauta2:                     Fixed-point fractional library routines.
   43208                                                              (line 1320)
   43209 * __satfractuhqda:                       Fixed-point fractional library routines.
   43210                                                              (line 1224)
   43211 * __satfractuhqdq:                       Fixed-point fractional library routines.
   43212                                                              (line 1221)
   43213 * __satfractuhqha:                       Fixed-point fractional library routines.
   43214                                                              (line 1222)
   43215 * __satfractuhqhq:                       Fixed-point fractional library routines.
   43216                                                              (line 1219)
   43217 * __satfractuhqqq:                       Fixed-point fractional library routines.
   43218                                                              (line 1218)
   43219 * __satfractuhqsa:                       Fixed-point fractional library routines.
   43220                                                              (line 1223)
   43221 * __satfractuhqsq:                       Fixed-point fractional library routines.
   43222                                                              (line 1220)
   43223 * __satfractuhqta:                       Fixed-point fractional library routines.
   43224                                                              (line 1225)
   43225 * __satfractuhquda:                      Fixed-point fractional library routines.
   43226                                                              (line 1236)
   43227 * __satfractuhqudq2:                     Fixed-point fractional library routines.
   43228                                                              (line 1231)
   43229 * __satfractuhquha:                      Fixed-point fractional library routines.
   43230                                                              (line 1233)
   43231 * __satfractuhquqq2:                     Fixed-point fractional library routines.
   43232                                                              (line 1227)
   43233 * __satfractuhqusa:                      Fixed-point fractional library routines.
   43234                                                              (line 1234)
   43235 * __satfractuhqusq2:                     Fixed-point fractional library routines.
   43236                                                              (line 1229)
   43237 * __satfractuhquta:                      Fixed-point fractional library routines.
   43238                                                              (line 1238)
   43239 * __satfractunsdida:                     Fixed-point fractional library routines.
   43240                                                              (line 1834)
   43241 * __satfractunsdidq:                     Fixed-point fractional library routines.
   43242                                                              (line 1831)
   43243 * __satfractunsdiha:                     Fixed-point fractional library routines.
   43244                                                              (line 1832)
   43245 * __satfractunsdihq:                     Fixed-point fractional library routines.
   43246                                                              (line 1828)
   43247 * __satfractunsdiqq:                     Fixed-point fractional library routines.
   43248                                                              (line 1827)
   43249 * __satfractunsdisa:                     Fixed-point fractional library routines.
   43250                                                              (line 1833)
   43251 * __satfractunsdisq:                     Fixed-point fractional library routines.
   43252                                                              (line 1829)
   43253 * __satfractunsdita:                     Fixed-point fractional library routines.
   43254                                                              (line 1836)
   43255 * __satfractunsdiuda:                    Fixed-point fractional library routines.
   43256                                                              (line 1850)
   43257 * __satfractunsdiudq:                    Fixed-point fractional library routines.
   43258                                                              (line 1844)
   43259 * __satfractunsdiuha:                    Fixed-point fractional library routines.
   43260                                                              (line 1846)
   43261 * __satfractunsdiuhq:                    Fixed-point fractional library routines.
   43262                                                              (line 1840)
   43263 * __satfractunsdiuqq:                    Fixed-point fractional library routines.
   43264                                                              (line 1838)
   43265 * __satfractunsdiusa:                    Fixed-point fractional library routines.
   43266                                                              (line 1848)
   43267 * __satfractunsdiusq:                    Fixed-point fractional library routines.
   43268                                                              (line 1842)
   43269 * __satfractunsdiuta:                    Fixed-point fractional library routines.
   43270                                                              (line 1852)
   43271 * __satfractunshida:                     Fixed-point fractional library routines.
   43272                                                              (line 1786)
   43273 * __satfractunshidq:                     Fixed-point fractional library routines.
   43274                                                              (line 1783)
   43275 * __satfractunshiha:                     Fixed-point fractional library routines.
   43276                                                              (line 1784)
   43277 * __satfractunshihq:                     Fixed-point fractional library routines.
   43278                                                              (line 1780)
   43279 * __satfractunshiqq:                     Fixed-point fractional library routines.
   43280                                                              (line 1779)
   43281 * __satfractunshisa:                     Fixed-point fractional library routines.
   43282                                                              (line 1785)
   43283 * __satfractunshisq:                     Fixed-point fractional library routines.
   43284                                                              (line 1781)
   43285 * __satfractunshita:                     Fixed-point fractional library routines.
   43286                                                              (line 1788)
   43287 * __satfractunshiuda:                    Fixed-point fractional library routines.
   43288                                                              (line 1802)
   43289 * __satfractunshiudq:                    Fixed-point fractional library routines.
   43290                                                              (line 1796)
   43291 * __satfractunshiuha:                    Fixed-point fractional library routines.
   43292                                                              (line 1798)
   43293 * __satfractunshiuhq:                    Fixed-point fractional library routines.
   43294                                                              (line 1792)
   43295 * __satfractunshiuqq:                    Fixed-point fractional library routines.
   43296                                                              (line 1790)
   43297 * __satfractunshiusa:                    Fixed-point fractional library routines.
   43298                                                              (line 1800)
   43299 * __satfractunshiusq:                    Fixed-point fractional library routines.
   43300                                                              (line 1794)
   43301 * __satfractunshiuta:                    Fixed-point fractional library routines.
   43302                                                              (line 1804)
   43303 * __satfractunsqida:                     Fixed-point fractional library routines.
   43304                                                              (line 1760)
   43305 * __satfractunsqidq:                     Fixed-point fractional library routines.
   43306                                                              (line 1757)
   43307 * __satfractunsqiha:                     Fixed-point fractional library routines.
   43308                                                              (line 1758)
   43309 * __satfractunsqihq:                     Fixed-point fractional library routines.
   43310                                                              (line 1754)
   43311 * __satfractunsqiqq:                     Fixed-point fractional library routines.
   43312                                                              (line 1753)
   43313 * __satfractunsqisa:                     Fixed-point fractional library routines.
   43314                                                              (line 1759)
   43315 * __satfractunsqisq:                     Fixed-point fractional library routines.
   43316                                                              (line 1755)
   43317 * __satfractunsqita:                     Fixed-point fractional library routines.
   43318                                                              (line 1762)
   43319 * __satfractunsqiuda:                    Fixed-point fractional library routines.
   43320                                                              (line 1776)
   43321 * __satfractunsqiudq:                    Fixed-point fractional library routines.
   43322                                                              (line 1770)
   43323 * __satfractunsqiuha:                    Fixed-point fractional library routines.
   43324                                                              (line 1772)
   43325 * __satfractunsqiuhq:                    Fixed-point fractional library routines.
   43326                                                              (line 1766)
   43327 * __satfractunsqiuqq:                    Fixed-point fractional library routines.
   43328                                                              (line 1764)
   43329 * __satfractunsqiusa:                    Fixed-point fractional library routines.
   43330                                                              (line 1774)
   43331 * __satfractunsqiusq:                    Fixed-point fractional library routines.
   43332                                                              (line 1768)
   43333 * __satfractunsqiuta:                    Fixed-point fractional library routines.
   43334                                                              (line 1778)
   43335 * __satfractunssida:                     Fixed-point fractional library routines.
   43336                                                              (line 1811)
   43337 * __satfractunssidq:                     Fixed-point fractional library routines.
   43338                                                              (line 1808)
   43339 * __satfractunssiha:                     Fixed-point fractional library routines.
   43340                                                              (line 1809)
   43341 * __satfractunssihq:                     Fixed-point fractional library routines.
   43342                                                              (line 1806)
   43343 * __satfractunssiqq:                     Fixed-point fractional library routines.
   43344                                                              (line 1805)
   43345 * __satfractunssisa:                     Fixed-point fractional library routines.
   43346                                                              (line 1810)
   43347 * __satfractunssisq:                     Fixed-point fractional library routines.
   43348                                                              (line 1807)
   43349 * __satfractunssita:                     Fixed-point fractional library routines.
   43350                                                              (line 1812)
   43351 * __satfractunssiuda:                    Fixed-point fractional library routines.
   43352                                                              (line 1824)
   43353 * __satfractunssiudq:                    Fixed-point fractional library routines.
   43354                                                              (line 1819)
   43355 * __satfractunssiuha:                    Fixed-point fractional library routines.
   43356                                                              (line 1821)
   43357 * __satfractunssiuhq:                    Fixed-point fractional library routines.
   43358                                                              (line 1815)
   43359 * __satfractunssiuqq:                    Fixed-point fractional library routines.
   43360                                                              (line 1814)
   43361 * __satfractunssiusa:                    Fixed-point fractional library routines.
   43362                                                              (line 1822)
   43363 * __satfractunssiusq:                    Fixed-point fractional library routines.
   43364                                                              (line 1817)
   43365 * __satfractunssiuta:                    Fixed-point fractional library routines.
   43366                                                              (line 1826)
   43367 * __satfractunstida:                     Fixed-point fractional library routines.
   43368                                                              (line 1864)
   43369 * __satfractunstidq:                     Fixed-point fractional library routines.
   43370                                                              (line 1859)
   43371 * __satfractunstiha:                     Fixed-point fractional library routines.
   43372                                                              (line 1861)
   43373 * __satfractunstihq:                     Fixed-point fractional library routines.
   43374                                                              (line 1855)
   43375 * __satfractunstiqq:                     Fixed-point fractional library routines.
   43376                                                              (line 1854)
   43377 * __satfractunstisa:                     Fixed-point fractional library routines.
   43378                                                              (line 1862)
   43379 * __satfractunstisq:                     Fixed-point fractional library routines.
   43380                                                              (line 1857)
   43381 * __satfractunstita:                     Fixed-point fractional library routines.
   43382                                                              (line 1866)
   43383 * __satfractunstiuda:                    Fixed-point fractional library routines.
   43384                                                              (line 1880)
   43385 * __satfractunstiudq:                    Fixed-point fractional library routines.
   43386                                                              (line 1874)
   43387 * __satfractunstiuha:                    Fixed-point fractional library routines.
   43388                                                              (line 1876)
   43389 * __satfractunstiuhq:                    Fixed-point fractional library routines.
   43390                                                              (line 1870)
   43391 * __satfractunstiuqq:                    Fixed-point fractional library routines.
   43392                                                              (line 1868)
   43393 * __satfractunstiusa:                    Fixed-point fractional library routines.
   43394                                                              (line 1878)
   43395 * __satfractunstiusq:                    Fixed-point fractional library routines.
   43396                                                              (line 1872)
   43397 * __satfractunstiuta:                    Fixed-point fractional library routines.
   43398                                                              (line 1882)
   43399 * __satfractuqqda:                       Fixed-point fractional library routines.
   43400                                                              (line 1201)
   43401 * __satfractuqqdq:                       Fixed-point fractional library routines.
   43402                                                              (line 1196)
   43403 * __satfractuqqha:                       Fixed-point fractional library routines.
   43404                                                              (line 1198)
   43405 * __satfractuqqhq:                       Fixed-point fractional library routines.
   43406                                                              (line 1192)
   43407 * __satfractuqqqq:                       Fixed-point fractional library routines.
   43408                                                              (line 1191)
   43409 * __satfractuqqsa:                       Fixed-point fractional library routines.
   43410                                                              (line 1199)
   43411 * __satfractuqqsq:                       Fixed-point fractional library routines.
   43412                                                              (line 1194)
   43413 * __satfractuqqta:                       Fixed-point fractional library routines.
   43414                                                              (line 1203)
   43415 * __satfractuqquda:                      Fixed-point fractional library routines.
   43416                                                              (line 1215)
   43417 * __satfractuqqudq2:                     Fixed-point fractional library routines.
   43418                                                              (line 1209)
   43419 * __satfractuqquha:                      Fixed-point fractional library routines.
   43420                                                              (line 1211)
   43421 * __satfractuqquhq2:                     Fixed-point fractional library routines.
   43422                                                              (line 1205)
   43423 * __satfractuqqusa:                      Fixed-point fractional library routines.
   43424                                                              (line 1213)
   43425 * __satfractuqqusq2:                     Fixed-point fractional library routines.
   43426                                                              (line 1207)
   43427 * __satfractuqquta:                      Fixed-point fractional library routines.
   43428                                                              (line 1217)
   43429 * __satfractusada:                       Fixed-point fractional library routines.
   43430                                                              (line 1327)
   43431 * __satfractusadq:                       Fixed-point fractional library routines.
   43432                                                              (line 1324)
   43433 * __satfractusaha:                       Fixed-point fractional library routines.
   43434                                                              (line 1325)
   43435 * __satfractusahq:                       Fixed-point fractional library routines.
   43436                                                              (line 1322)
   43437 * __satfractusaqq:                       Fixed-point fractional library routines.
   43438                                                              (line 1321)
   43439 * __satfractusasa:                       Fixed-point fractional library routines.
   43440                                                              (line 1326)
   43441 * __satfractusasq:                       Fixed-point fractional library routines.
   43442                                                              (line 1323)
   43443 * __satfractusata:                       Fixed-point fractional library routines.
   43444                                                              (line 1328)
   43445 * __satfractusauda2:                     Fixed-point fractional library routines.
   43446                                                              (line 1339)
   43447 * __satfractusaudq:                      Fixed-point fractional library routines.
   43448                                                              (line 1335)
   43449 * __satfractusauha2:                     Fixed-point fractional library routines.
   43450                                                              (line 1337)
   43451 * __satfractusauhq:                      Fixed-point fractional library routines.
   43452                                                              (line 1331)
   43453 * __satfractusauqq:                      Fixed-point fractional library routines.
   43454                                                              (line 1330)
   43455 * __satfractusausq:                      Fixed-point fractional library routines.
   43456                                                              (line 1333)
   43457 * __satfractusauta2:                     Fixed-point fractional library routines.
   43458                                                              (line 1341)
   43459 * __satfractusqda:                       Fixed-point fractional library routines.
   43460                                                              (line 1248)
   43461 * __satfractusqdq:                       Fixed-point fractional library routines.
   43462                                                              (line 1244)
   43463 * __satfractusqha:                       Fixed-point fractional library routines.
   43464                                                              (line 1246)
   43465 * __satfractusqhq:                       Fixed-point fractional library routines.
   43466                                                              (line 1241)
   43467 * __satfractusqqq:                       Fixed-point fractional library routines.
   43468                                                              (line 1240)
   43469 * __satfractusqsa:                       Fixed-point fractional library routines.
   43470                                                              (line 1247)
   43471 * __satfractusqsq:                       Fixed-point fractional library routines.
   43472                                                              (line 1242)
   43473 * __satfractusqta:                       Fixed-point fractional library routines.
   43474                                                              (line 1250)
   43475 * __satfractusquda:                      Fixed-point fractional library routines.
   43476                                                              (line 1262)
   43477 * __satfractusqudq2:                     Fixed-point fractional library routines.
   43478                                                              (line 1256)
   43479 * __satfractusquha:                      Fixed-point fractional library routines.
   43480                                                              (line 1258)
   43481 * __satfractusquhq2:                     Fixed-point fractional library routines.
   43482                                                              (line 1254)
   43483 * __satfractusquqq2:                     Fixed-point fractional library routines.
   43484                                                              (line 1252)
   43485 * __satfractusqusa:                      Fixed-point fractional library routines.
   43486                                                              (line 1260)
   43487 * __satfractusquta:                      Fixed-point fractional library routines.
   43488                                                              (line 1264)
   43489 * __satfractutada:                       Fixed-point fractional library routines.
   43490                                                              (line 1379)
   43491 * __satfractutadq:                       Fixed-point fractional library routines.
   43492                                                              (line 1374)
   43493 * __satfractutaha:                       Fixed-point fractional library routines.
   43494                                                              (line 1376)
   43495 * __satfractutahq:                       Fixed-point fractional library routines.
   43496                                                              (line 1370)
   43497 * __satfractutaqq:                       Fixed-point fractional library routines.
   43498                                                              (line 1369)
   43499 * __satfractutasa:                       Fixed-point fractional library routines.
   43500                                                              (line 1377)
   43501 * __satfractutasq:                       Fixed-point fractional library routines.
   43502                                                              (line 1372)
   43503 * __satfractutata:                       Fixed-point fractional library routines.
   43504                                                              (line 1381)
   43505 * __satfractutauda2:                     Fixed-point fractional library routines.
   43506                                                              (line 1395)
   43507 * __satfractutaudq:                      Fixed-point fractional library routines.
   43508                                                              (line 1389)
   43509 * __satfractutauha2:                     Fixed-point fractional library routines.
   43510                                                              (line 1391)
   43511 * __satfractutauhq:                      Fixed-point fractional library routines.
   43512                                                              (line 1385)
   43513 * __satfractutauqq:                      Fixed-point fractional library routines.
   43514                                                              (line 1383)
   43515 * __satfractutausa2:                     Fixed-point fractional library routines.
   43516                                                              (line 1393)
   43517 * __satfractutausq:                      Fixed-point fractional library routines.
   43518                                                              (line 1387)
   43519 * __splitstack_find:                     Miscellaneous routines.
   43520                                                              (line   18)
   43521 * __ssaddda3:                            Fixed-point fractional library routines.
   43522                                                              (line   67)
   43523 * __ssadddq3:                            Fixed-point fractional library routines.
   43524                                                              (line   63)
   43525 * __ssaddha3:                            Fixed-point fractional library routines.
   43526                                                              (line   65)
   43527 * __ssaddhq3:                            Fixed-point fractional library routines.
   43528                                                              (line   60)
   43529 * __ssaddqq3:                            Fixed-point fractional library routines.
   43530                                                              (line   59)
   43531 * __ssaddsa3:                            Fixed-point fractional library routines.
   43532                                                              (line   66)
   43533 * __ssaddsq3:                            Fixed-point fractional library routines.
   43534                                                              (line   61)
   43535 * __ssaddta3:                            Fixed-point fractional library routines.
   43536                                                              (line   69)
   43537 * __ssashlda3:                           Fixed-point fractional library routines.
   43538                                                              (line  402)
   43539 * __ssashldq3:                           Fixed-point fractional library routines.
   43540                                                              (line  399)
   43541 * __ssashlha3:                           Fixed-point fractional library routines.
   43542                                                              (line  400)
   43543 * __ssashlhq3:                           Fixed-point fractional library routines.
   43544                                                              (line  396)
   43545 * __ssashlsa3:                           Fixed-point fractional library routines.
   43546                                                              (line  401)
   43547 * __ssashlsq3:                           Fixed-point fractional library routines.
   43548                                                              (line  397)
   43549 * __ssashlta3:                           Fixed-point fractional library routines.
   43550                                                              (line  404)
   43551 * __ssdivda3:                            Fixed-point fractional library routines.
   43552                                                              (line  261)
   43553 * __ssdivdq3:                            Fixed-point fractional library routines.
   43554                                                              (line  257)
   43555 * __ssdivha3:                            Fixed-point fractional library routines.
   43556                                                              (line  259)
   43557 * __ssdivhq3:                            Fixed-point fractional library routines.
   43558                                                              (line  254)
   43559 * __ssdivqq3:                            Fixed-point fractional library routines.
   43560                                                              (line  253)
   43561 * __ssdivsa3:                            Fixed-point fractional library routines.
   43562                                                              (line  260)
   43563 * __ssdivsq3:                            Fixed-point fractional library routines.
   43564                                                              (line  255)
   43565 * __ssdivta3:                            Fixed-point fractional library routines.
   43566                                                              (line  263)
   43567 * __ssmulda3:                            Fixed-point fractional library routines.
   43568                                                              (line  193)
   43569 * __ssmuldq3:                            Fixed-point fractional library routines.
   43570                                                              (line  189)
   43571 * __ssmulha3:                            Fixed-point fractional library routines.
   43572                                                              (line  191)
   43573 * __ssmulhq3:                            Fixed-point fractional library routines.
   43574                                                              (line  186)
   43575 * __ssmulqq3:                            Fixed-point fractional library routines.
   43576                                                              (line  185)
   43577 * __ssmulsa3:                            Fixed-point fractional library routines.
   43578                                                              (line  192)
   43579 * __ssmulsq3:                            Fixed-point fractional library routines.
   43580                                                              (line  187)
   43581 * __ssmulta3:                            Fixed-point fractional library routines.
   43582                                                              (line  195)
   43583 * __ssnegda2:                            Fixed-point fractional library routines.
   43584                                                              (line  316)
   43585 * __ssnegdq2:                            Fixed-point fractional library routines.
   43586                                                              (line  313)
   43587 * __ssnegha2:                            Fixed-point fractional library routines.
   43588                                                              (line  314)
   43589 * __ssneghq2:                            Fixed-point fractional library routines.
   43590                                                              (line  311)
   43591 * __ssnegqq2:                            Fixed-point fractional library routines.
   43592                                                              (line  310)
   43593 * __ssnegsa2:                            Fixed-point fractional library routines.
   43594                                                              (line  315)
   43595 * __ssnegsq2:                            Fixed-point fractional library routines.
   43596                                                              (line  312)
   43597 * __ssnegta2:                            Fixed-point fractional library routines.
   43598                                                              (line  317)
   43599 * __sssubda3:                            Fixed-point fractional library routines.
   43600                                                              (line  129)
   43601 * __sssubdq3:                            Fixed-point fractional library routines.
   43602                                                              (line  125)
   43603 * __sssubha3:                            Fixed-point fractional library routines.
   43604                                                              (line  127)
   43605 * __sssubhq3:                            Fixed-point fractional library routines.
   43606                                                              (line  122)
   43607 * __sssubqq3:                            Fixed-point fractional library routines.
   43608                                                              (line  121)
   43609 * __sssubsa3:                            Fixed-point fractional library routines.
   43610                                                              (line  128)
   43611 * __sssubsq3:                            Fixed-point fractional library routines.
   43612                                                              (line  123)
   43613 * __sssubta3:                            Fixed-point fractional library routines.
   43614                                                              (line  131)
   43615 * __subda3:                              Fixed-point fractional library routines.
   43616                                                              (line  107)
   43617 * __subdf3:                              Soft float library routines.
   43618                                                              (line   31)
   43619 * __subdq3:                              Fixed-point fractional library routines.
   43620                                                              (line   95)
   43621 * __subha3:                              Fixed-point fractional library routines.
   43622                                                              (line  105)
   43623 * __subhq3:                              Fixed-point fractional library routines.
   43624                                                              (line   92)
   43625 * __subqq3:                              Fixed-point fractional library routines.
   43626                                                              (line   91)
   43627 * __subsa3:                              Fixed-point fractional library routines.
   43628                                                              (line  106)
   43629 * __subsf3:                              Soft float library routines.
   43630                                                              (line   30)
   43631 * __subsq3:                              Fixed-point fractional library routines.
   43632                                                              (line   93)
   43633 * __subta3:                              Fixed-point fractional library routines.
   43634                                                              (line  109)
   43635 * __subtf3:                              Soft float library routines.
   43636                                                              (line   33)
   43637 * __subuda3:                             Fixed-point fractional library routines.
   43638                                                              (line  115)
   43639 * __subudq3:                             Fixed-point fractional library routines.
   43640                                                              (line  103)
   43641 * __subuha3:                             Fixed-point fractional library routines.
   43642                                                              (line  111)
   43643 * __subuhq3:                             Fixed-point fractional library routines.
   43644                                                              (line   99)
   43645 * __subuqq3:                             Fixed-point fractional library routines.
   43646                                                              (line   97)
   43647 * __subusa3:                             Fixed-point fractional library routines.
   43648                                                              (line  113)
   43649 * __subusq3:                             Fixed-point fractional library routines.
   43650                                                              (line  101)
   43651 * __subuta3:                             Fixed-point fractional library routines.
   43652                                                              (line  117)
   43653 * __subvdi3:                             Integer library routines.
   43654                                                              (line  123)
   43655 * __subvsi3:                             Integer library routines.
   43656                                                              (line  122)
   43657 * __subxf3:                              Soft float library routines.
   43658                                                              (line   35)
   43659 * __truncdfsf2:                          Soft float library routines.
   43660                                                              (line   76)
   43661 * __trunctfdf2:                          Soft float library routines.
   43662                                                              (line   73)
   43663 * __trunctfsf2:                          Soft float library routines.
   43664                                                              (line   75)
   43665 * __truncxfdf2:                          Soft float library routines.
   43666                                                              (line   72)
   43667 * __truncxfsf2:                          Soft float library routines.
   43668                                                              (line   74)
   43669 * __ucmpdi2:                             Integer library routines.
   43670                                                              (line   93)
   43671 * __ucmpti2:                             Integer library routines.
   43672                                                              (line   95)
   43673 * __udivdi3:                             Integer library routines.
   43674                                                              (line   54)
   43675 * __udivmoddi3:                          Integer library routines.
   43676                                                              (line   61)
   43677 * __udivsi3:                             Integer library routines.
   43678                                                              (line   52)
   43679 * __udivti3:                             Integer library routines.
   43680                                                              (line   56)
   43681 * __udivuda3:                            Fixed-point fractional library routines.
   43682                                                              (line  246)
   43683 * __udivudq3:                            Fixed-point fractional library routines.
   43684                                                              (line  240)
   43685 * __udivuha3:                            Fixed-point fractional library routines.
   43686                                                              (line  242)
   43687 * __udivuhq3:                            Fixed-point fractional library routines.
   43688                                                              (line  236)
   43689 * __udivuqq3:                            Fixed-point fractional library routines.
   43690                                                              (line  234)
   43691 * __udivusa3:                            Fixed-point fractional library routines.
   43692                                                              (line  244)
   43693 * __udivusq3:                            Fixed-point fractional library routines.
   43694                                                              (line  238)
   43695 * __udivuta3:                            Fixed-point fractional library routines.
   43696                                                              (line  248)
   43697 * __umoddi3:                             Integer library routines.
   43698                                                              (line   71)
   43699 * __umodsi3:                             Integer library routines.
   43700                                                              (line   69)
   43701 * __umodti3:                             Integer library routines.
   43702                                                              (line   73)
   43703 * __unorddf2:                            Soft float library routines.
   43704                                                              (line  173)
   43705 * __unordsf2:                            Soft float library routines.
   43706                                                              (line  172)
   43707 * __unordtf2:                            Soft float library routines.
   43708                                                              (line  174)
   43709 * __usadduda3:                           Fixed-point fractional library routines.
   43710                                                              (line   85)
   43711 * __usaddudq3:                           Fixed-point fractional library routines.
   43712                                                              (line   79)
   43713 * __usadduha3:                           Fixed-point fractional library routines.
   43714                                                              (line   81)
   43715 * __usadduhq3:                           Fixed-point fractional library routines.
   43716                                                              (line   75)
   43717 * __usadduqq3:                           Fixed-point fractional library routines.
   43718                                                              (line   73)
   43719 * __usaddusa3:                           Fixed-point fractional library routines.
   43720                                                              (line   83)
   43721 * __usaddusq3:                           Fixed-point fractional library routines.
   43722                                                              (line   77)
   43723 * __usadduta3:                           Fixed-point fractional library routines.
   43724                                                              (line   87)
   43725 * __usashluda3:                          Fixed-point fractional library routines.
   43726                                                              (line  421)
   43727 * __usashludq3:                          Fixed-point fractional library routines.
   43728                                                              (line  415)
   43729 * __usashluha3:                          Fixed-point fractional library routines.
   43730                                                              (line  417)
   43731 * __usashluhq3:                          Fixed-point fractional library routines.
   43732                                                              (line  411)
   43733 * __usashluqq3:                          Fixed-point fractional library routines.
   43734                                                              (line  409)
   43735 * __usashlusa3:                          Fixed-point fractional library routines.
   43736                                                              (line  419)
   43737 * __usashlusq3:                          Fixed-point fractional library routines.
   43738                                                              (line  413)
   43739 * __usashluta3:                          Fixed-point fractional library routines.
   43740                                                              (line  423)
   43741 * __usdivuda3:                           Fixed-point fractional library routines.
   43742                                                              (line  280)
   43743 * __usdivudq3:                           Fixed-point fractional library routines.
   43744                                                              (line  274)
   43745 * __usdivuha3:                           Fixed-point fractional library routines.
   43746                                                              (line  276)
   43747 * __usdivuhq3:                           Fixed-point fractional library routines.
   43748                                                              (line  270)
   43749 * __usdivuqq3:                           Fixed-point fractional library routines.
   43750                                                              (line  268)
   43751 * __usdivusa3:                           Fixed-point fractional library routines.
   43752                                                              (line  278)
   43753 * __usdivusq3:                           Fixed-point fractional library routines.
   43754                                                              (line  272)
   43755 * __usdivuta3:                           Fixed-point fractional library routines.
   43756                                                              (line  282)
   43757 * __usmuluda3:                           Fixed-point fractional library routines.
   43758                                                              (line  212)
   43759 * __usmuludq3:                           Fixed-point fractional library routines.
   43760                                                              (line  206)
   43761 * __usmuluha3:                           Fixed-point fractional library routines.
   43762                                                              (line  208)
   43763 * __usmuluhq3:                           Fixed-point fractional library routines.
   43764                                                              (line  202)
   43765 * __usmuluqq3:                           Fixed-point fractional library routines.
   43766                                                              (line  200)
   43767 * __usmulusa3:                           Fixed-point fractional library routines.
   43768                                                              (line  210)
   43769 * __usmulusq3:                           Fixed-point fractional library routines.
   43770                                                              (line  204)
   43771 * __usmuluta3:                           Fixed-point fractional library routines.
   43772                                                              (line  214)
   43773 * __usneguda2:                           Fixed-point fractional library routines.
   43774                                                              (line  331)
   43775 * __usnegudq2:                           Fixed-point fractional library routines.
   43776                                                              (line  326)
   43777 * __usneguha2:                           Fixed-point fractional library routines.
   43778                                                              (line  328)
   43779 * __usneguhq2:                           Fixed-point fractional library routines.
   43780                                                              (line  322)
   43781 * __usneguqq2:                           Fixed-point fractional library routines.
   43782                                                              (line  321)
   43783 * __usnegusa2:                           Fixed-point fractional library routines.
   43784                                                              (line  329)
   43785 * __usnegusq2:                           Fixed-point fractional library routines.
   43786                                                              (line  324)
   43787 * __usneguta2:                           Fixed-point fractional library routines.
   43788                                                              (line  333)
   43789 * __ussubuda3:                           Fixed-point fractional library routines.
   43790                                                              (line  148)
   43791 * __ussubudq3:                           Fixed-point fractional library routines.
   43792                                                              (line  142)
   43793 * __ussubuha3:                           Fixed-point fractional library routines.
   43794                                                              (line  144)
   43795 * __ussubuhq3:                           Fixed-point fractional library routines.
   43796                                                              (line  138)
   43797 * __ussubuqq3:                           Fixed-point fractional library routines.
   43798                                                              (line  136)
   43799 * __ussubusa3:                           Fixed-point fractional library routines.
   43800                                                              (line  146)
   43801 * __ussubusq3:                           Fixed-point fractional library routines.
   43802                                                              (line  140)
   43803 * __ussubuta3:                           Fixed-point fractional library routines.
   43804                                                              (line  150)
   43805 * abort:                                 Portability.        (line   21)
   43806 * abs:                                   Arithmetic.         (line  200)
   43807 * abs and attributes:                    Expressions.        (line   64)
   43808 * ABS_EXPR:                              Unary and Binary Expressions.
   43809                                                              (line    6)
   43810 * absence_set:                           Processor pipeline description.
   43811                                                              (line  220)
   43812 * absM2 instruction pattern:             Standard Names.     (line  479)
   43813 * absolute value:                        Arithmetic.         (line  200)
   43814 * access to operands:                    Accessors.          (line    6)
   43815 * access to special operands:            Special Accessors.  (line    6)
   43816 * accessors:                             Accessors.          (line    6)
   43817 * ACCUM_TYPE_SIZE:                       Type Layout.        (line   88)
   43818 * ACCUMULATE_OUTGOING_ARGS:              Stack Arguments.    (line   49)
   43819 * ACCUMULATE_OUTGOING_ARGS and stack frames: Function Entry. (line  135)
   43820 * ADA_LONG_TYPE_SIZE:                    Type Layout.        (line   26)
   43821 * Adding a new GIMPLE statement code:    Adding a new GIMPLE statement code.
   43822                                                              (line    6)
   43823 * ADDITIONAL_REGISTER_NAMES:             Instruction Output. (line   15)
   43824 * addM3 instruction pattern:             Standard Names.     (line  216)
   43825 * addMODEcc instruction pattern:         Standard Names.     (line  917)
   43826 * addr_diff_vec:                         Side Effects.       (line  302)
   43827 * addr_diff_vec, length of:              Insn Lengths.       (line   26)
   43828 * ADDR_EXPR:                             Storage References. (line    6)
   43829 * addr_vec:                              Side Effects.       (line  297)
   43830 * addr_vec, length of:                   Insn Lengths.       (line   26)
   43831 * address constraints:                   Simple Constraints. (line  164)
   43832 * address_operand <1>:                   Simple Constraints. (line  168)
   43833 * address_operand:                       Machine-Independent Predicates.
   43834                                                              (line   63)
   43835 * addressing modes:                      Addressing Modes.   (line    6)
   43836 * ADJUST_FIELD_ALIGN:                    Storage Layout.     (line  189)
   43837 * ADJUST_INSN_LENGTH:                    Insn Lengths.       (line   35)
   43838 * ADJUST_REG_ALLOC_ORDER:                Allocation Order.   (line   23)
   43839 * aggregates as return values:           Aggregate Return.   (line    6)
   43840 * alias:                                 Alias analysis.     (line    6)
   43841 * ALL_COP_ADDITIONAL_REGISTER_NAMES:     MIPS Coprocessors.  (line   32)
   43842 * ALL_REGS:                              Register Classes.   (line   17)
   43843 * allocate_stack instruction pattern:    Standard Names.     (line 1227)
   43844 * alternate entry points:                Insns.              (line  140)
   43845 * anchored addresses:                    Anchored Addresses. (line    6)
   43846 * and:                                   Arithmetic.         (line  158)
   43847 * and and attributes:                    Expressions.        (line   50)
   43848 * and, canonicalization of:              Insn Canonicalizations.
   43849                                                              (line   52)
   43850 * andM3 instruction pattern:             Standard Names.     (line  222)
   43851 * annotations:                           Annotations.        (line    6)
   43852 * APPLY_RESULT_SIZE:                     Scalar Return.      (line  112)
   43853 * ARG_POINTER_CFA_OFFSET:                Frame Layout.       (line  194)
   43854 * ARG_POINTER_REGNUM:                    Frame Registers.    (line   41)
   43855 * ARG_POINTER_REGNUM and virtual registers: Regs and Memory. (line   65)
   43856 * arg_pointer_rtx:                       Frame Registers.    (line  104)
   43857 * ARGS_GROW_DOWNWARD:                    Frame Layout.       (line   35)
   43858 * argument passing:                      Interface.          (line   36)
   43859 * arguments in registers:                Register Arguments. (line    6)
   43860 * arguments on stack:                    Stack Arguments.    (line    6)
   43861 * arithmetic library:                    Soft float library routines.
   43862                                                              (line    6)
   43863 * arithmetic shift:                      Arithmetic.         (line  173)
   43864 * arithmetic shift with signed saturation: Arithmetic.       (line  173)
   43865 * arithmetic shift with unsigned saturation: Arithmetic.     (line  173)
   43866 * arithmetic, in RTL:                    Arithmetic.         (line    6)
   43867 * ARITHMETIC_TYPE_P:                     Types for C++.      (line   61)
   43868 * array:                                 Types.              (line    6)
   43869 * ARRAY_RANGE_REF:                       Storage References. (line    6)
   43870 * ARRAY_REF:                             Storage References. (line    6)
   43871 * ARRAY_TYPE:                            Types.              (line    6)
   43872 * AS_NEEDS_DASH_FOR_PIPED_INPUT:         Driver.             (line   89)
   43873 * ashift:                                Arithmetic.         (line  173)
   43874 * ashift and attributes:                 Expressions.        (line   64)
   43875 * ashiftrt:                              Arithmetic.         (line  190)
   43876 * ashiftrt and attributes:               Expressions.        (line   64)
   43877 * ashlM3 instruction pattern:            Standard Names.     (line  458)
   43878 * ashrM3 instruction pattern:            Standard Names.     (line  468)
   43879 * ASM_APP_OFF:                           File Framework.     (line   78)
   43880 * ASM_APP_ON:                            File Framework.     (line   71)
   43881 * ASM_COMMENT_START:                     File Framework.     (line   66)
   43882 * ASM_DECLARE_CLASS_REFERENCE:           Label Output.       (line  465)
   43883 * ASM_DECLARE_FUNCTION_NAME:             Label Output.       (line   99)
   43884 * ASM_DECLARE_FUNCTION_SIZE:             Label Output.       (line  114)
   43885 * ASM_DECLARE_OBJECT_NAME:               Label Output.       (line  127)
   43886 * ASM_DECLARE_REGISTER_GLOBAL:           Label Output.       (line  156)
   43887 * ASM_DECLARE_UNRESOLVED_REFERENCE:      Label Output.       (line  471)
   43888 * ASM_FINAL_SPEC:                        Driver.             (line   82)
   43889 * ASM_FINISH_DECLARE_OBJECT:             Label Output.       (line  164)
   43890 * ASM_FORMAT_PRIVATE_NAME:               Label Output.       (line  383)
   43891 * asm_fprintf:                           Instruction Output. (line  151)
   43892 * ASM_FPRINTF_EXTENSIONS:                Instruction Output. (line  162)
   43893 * ASM_GENERATE_INTERNAL_LABEL:           Label Output.       (line  367)
   43894 * asm_input:                             Side Effects.       (line  284)
   43895 * asm_input and /v:                      Flags.              (line   94)
   43896 * ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX:     Exception Handling. (line   82)
   43897 * ASM_NO_SKIP_IN_TEXT:                   Alignment Output.   (line   79)
   43898 * asm_noperands:                         Insns.              (line  307)
   43899 * asm_operands and /v:                   Flags.              (line   94)
   43900 * asm_operands, RTL sharing:             Sharing.            (line   45)
   43901 * asm_operands, usage:                   Assembler.          (line    6)
   43902 * ASM_OUTPUT_ADDR_DIFF_ELT:              Dispatch Tables.    (line    9)
   43903 * ASM_OUTPUT_ADDR_VEC_ELT:               Dispatch Tables.    (line   26)
   43904 * ASM_OUTPUT_ALIGN:                      Alignment Output.   (line   86)
   43905 * ASM_OUTPUT_ALIGN_WITH_NOP:             Alignment Output.   (line   91)
   43906 * ASM_OUTPUT_ALIGNED_BSS:                Uninitialized Data. (line   71)
   43907 * ASM_OUTPUT_ALIGNED_COMMON:             Uninitialized Data. (line   30)
   43908 * ASM_OUTPUT_ALIGNED_DECL_COMMON:        Uninitialized Data. (line   38)
   43909 * ASM_OUTPUT_ALIGNED_DECL_LOCAL:         Uninitialized Data. (line  102)
   43910 * ASM_OUTPUT_ALIGNED_LOCAL:              Uninitialized Data. (line   94)
   43911 * ASM_OUTPUT_ASCII:                      Data Output.        (line   62)
   43912 * ASM_OUTPUT_BSS:                        Uninitialized Data. (line   46)
   43913 * ASM_OUTPUT_CASE_END:                   Dispatch Tables.    (line   51)
   43914 * ASM_OUTPUT_CASE_LABEL:                 Dispatch Tables.    (line   38)
   43915 * ASM_OUTPUT_COMMON:                     Uninitialized Data. (line   10)
   43916 * ASM_OUTPUT_DEBUG_LABEL:                Label Output.       (line  355)
   43917 * ASM_OUTPUT_DEF:                        Label Output.       (line  404)
   43918 * ASM_OUTPUT_DEF_FROM_DECLS:             Label Output.       (line  412)
   43919 * ASM_OUTPUT_DWARF_DELTA:                SDB and DWARF.      (line   69)
   43920 * ASM_OUTPUT_DWARF_OFFSET:               SDB and DWARF.      (line   78)
   43921 * ASM_OUTPUT_DWARF_PCREL:                SDB and DWARF.      (line   84)
   43922 * ASM_OUTPUT_DWARF_TABLE_REF:            SDB and DWARF.      (line   89)
   43923 * ASM_OUTPUT_DWARF_VMS_DELTA:            SDB and DWARF.      (line   73)
   43924 * ASM_OUTPUT_EXTERNAL:                   Label Output.       (line  284)
   43925 * ASM_OUTPUT_FDESC:                      Data Output.        (line   71)
   43926 * ASM_OUTPUT_FUNCTION_LABEL:             Label Output.       (line   17)
   43927 * ASM_OUTPUT_IDENT:                      File Framework.     (line  109)
   43928 * ASM_OUTPUT_INTERNAL_LABEL:             Label Output.       (line   29)
   43929 * ASM_OUTPUT_LABEL:                      Label Output.       (line    9)
   43930 * ASM_OUTPUT_LABEL_REF:                  Label Output.       (line  328)
   43931 * ASM_OUTPUT_LABELREF:                   Label Output.       (line  306)
   43932 * ASM_OUTPUT_LOCAL:                      Uninitialized Data. (line   81)
   43933 * ASM_OUTPUT_MAX_SKIP_ALIGN:             Alignment Output.   (line   95)
   43934 * ASM_OUTPUT_MEASURED_SIZE:              Label Output.       (line   53)
   43935 * ASM_OUTPUT_OPCODE:                     Instruction Output. (line   36)
   43936 * ASM_OUTPUT_POOL_EPILOGUE:              Data Output.        (line  121)
   43937 * ASM_OUTPUT_POOL_PROLOGUE:              Data Output.        (line   84)
   43938 * ASM_OUTPUT_REG_POP:                    Instruction Output. (line  206)
   43939 * ASM_OUTPUT_REG_PUSH:                   Instruction Output. (line  201)
   43940 * ASM_OUTPUT_SIZE_DIRECTIVE:             Label Output.       (line   47)
   43941 * ASM_OUTPUT_SKIP:                       Alignment Output.   (line   73)
   43942 * ASM_OUTPUT_SOURCE_FILENAME:            File Framework.     (line   85)
   43943 * ASM_OUTPUT_SPECIAL_POOL_ENTRY:         Data Output.        (line   96)
   43944 * ASM_OUTPUT_SYMBOL_REF:                 Label Output.       (line  321)
   43945 * ASM_OUTPUT_TYPE_DIRECTIVE:             Label Output.       (line   89)
   43946 * ASM_OUTPUT_WEAK_ALIAS:                 Label Output.       (line  430)
   43947 * ASM_OUTPUT_WEAKREF:                    Label Output.       (line  216)
   43948 * ASM_PREFERRED_EH_DATA_FORMAT:          Exception Handling. (line   67)
   43949 * ASM_SPEC:                              Driver.             (line   74)
   43950 * ASM_STABD_OP:                          DBX Options.        (line   36)
   43951 * ASM_STABN_OP:                          DBX Options.        (line   43)
   43952 * ASM_STABS_OP:                          DBX Options.        (line   29)
   43953 * ASM_WEAKEN_DECL:                       Label Output.       (line  208)
   43954 * ASM_WEAKEN_LABEL:                      Label Output.       (line  195)
   43955 * assemble_name:                         Label Output.       (line    8)
   43956 * assemble_name_raw:                     Label Output.       (line   28)
   43957 * assembler format:                      File Framework.     (line    6)
   43958 * assembler instructions in RTL:         Assembler.          (line    6)
   43959 * ASSEMBLER_DIALECT:                     Instruction Output. (line  174)
   43960 * assigning attribute values to insns:   Tagging Insns.      (line    6)
   43961 * asterisk in template:                  Output Statement.   (line   29)
   43962 * atan2M3 instruction pattern:           Standard Names.     (line  549)
   43963 * attr <1>:                              Tagging Insns.      (line   54)
   43964 * attr:                                  Expressions.        (line  154)
   43965 * attr_flag:                             Expressions.        (line  119)
   43966 * attribute expressions:                 Expressions.        (line    6)
   43967 * attribute specifications:              Attr Example.       (line    6)
   43968 * attribute specifications example:      Attr Example.       (line    6)
   43969 * ATTRIBUTE_ALIGNED_VALUE:               Storage Layout.     (line  171)
   43970 * attributes:                            Attributes.         (line    6)
   43971 * attributes, defining:                  Defining Attributes.
   43972                                                              (line    6)
   43973 * attributes, target-specific:           Target Attributes.  (line    6)
   43974 * autoincrement addressing, availability: Portability.       (line   21)
   43975 * autoincrement/decrement addressing:    Simple Constraints. (line   30)
   43976 * automata_option:                       Processor pipeline description.
   43977                                                              (line  301)
   43978 * automaton based pipeline description:  Processor pipeline description.
   43979                                                              (line    6)
   43980 * automaton based scheduler:             Processor pipeline description.
   43981                                                              (line    6)
   43982 * AVOID_CCMODE_COPIES:                   Values in Registers.
   43983                                                              (line  153)
   43984 * backslash:                             Output Template.    (line   46)
   43985 * barrier:                               Insns.              (line  160)
   43986 * barrier and /f:                        Flags.              (line  125)
   43987 * barrier and /v:                        Flags.              (line   44)
   43988 * BASE_REG_CLASS:                        Register Classes.   (line  109)
   43989 * basic block:                           Basic Blocks.       (line    6)
   43990 * Basic Statements:                      Basic Statements.   (line    6)
   43991 * basic-block.h:                         Control Flow.       (line    6)
   43992 * BASIC_BLOCK:                           Basic Blocks.       (line   19)
   43993 * basic_block:                           Basic Blocks.       (line    6)
   43994 * BB_HEAD, BB_END:                       Maintaining the CFG.
   43995                                                              (line   88)
   43996 * bb_seq:                                GIMPLE sequences.   (line   73)
   43997 * BIGGEST_ALIGNMENT:                     Storage Layout.     (line  161)
   43998 * BIGGEST_FIELD_ALIGNMENT:               Storage Layout.     (line  182)
   43999 * BImode:                                Machine Modes.      (line   22)
   44000 * BIND_EXPR:                             Unary and Binary Expressions.
   44001                                                              (line    6)
   44002 * BINFO_TYPE:                            Classes.            (line    6)
   44003 * bit-fields:                            Bit-Fields.         (line    6)
   44004 * BIT_AND_EXPR:                          Unary and Binary Expressions.
   44005                                                              (line    6)
   44006 * BIT_IOR_EXPR:                          Unary and Binary Expressions.
   44007                                                              (line    6)
   44008 * BIT_NOT_EXPR:                          Unary and Binary Expressions.
   44009                                                              (line    6)
   44010 * BIT_XOR_EXPR:                          Unary and Binary Expressions.
   44011                                                              (line    6)
   44012 * BITFIELD_NBYTES_LIMITED:               Storage Layout.     (line  379)
   44013 * BITS_BIG_ENDIAN:                       Storage Layout.     (line   12)
   44014 * BITS_BIG_ENDIAN, effect on sign_extract: Bit-Fields.       (line    8)
   44015 * BITS_PER_UNIT:                         Storage Layout.     (line   45)
   44016 * BITS_PER_WORD:                         Storage Layout.     (line   50)
   44017 * bitwise complement:                    Arithmetic.         (line  154)
   44018 * bitwise exclusive-or:                  Arithmetic.         (line  168)
   44019 * bitwise inclusive-or:                  Arithmetic.         (line  163)
   44020 * bitwise logical-and:                   Arithmetic.         (line  158)
   44021 * BLKmode:                               Machine Modes.      (line  183)
   44022 * BLKmode, and function return values:   Calls.              (line   23)
   44023 * block statement iterators <1>:         Maintaining the CFG.
   44024                                                              (line   45)
   44025 * block statement iterators:             Basic Blocks.       (line   68)
   44026 * BLOCK_FOR_INSN, bb_for_stmt:           Maintaining the CFG.
   44027                                                              (line   40)
   44028 * BLOCK_REG_PADDING:                     Register Arguments. (line  228)
   44029 * blockage instruction pattern:          Standard Names.     (line 1417)
   44030 * Blocks:                                Blocks.             (line    6)
   44031 * bool:                                  Misc.               (line  854)
   44032 * BOOL_TYPE_SIZE:                        Type Layout.        (line   44)
   44033 * BOOLEAN_TYPE:                          Types.              (line    6)
   44034 * branch prediction:                     Profile information.
   44035                                                              (line   24)
   44036 * BRANCH_COST:                           Costs.              (line  105)
   44037 * break_out_memory_refs:                 Addressing Modes.   (line  135)
   44038 * BREAK_STMT:                            Statements for C++. (line    6)
   44039 * bsi_commit_edge_inserts:               Maintaining the CFG.
   44040                                                              (line  118)
   44041 * bsi_end_p:                             Maintaining the CFG.
   44042                                                              (line   60)
   44043 * bsi_insert_after:                      Maintaining the CFG.
   44044                                                              (line   72)
   44045 * bsi_insert_before:                     Maintaining the CFG.
   44046                                                              (line   78)
   44047 * bsi_insert_on_edge:                    Maintaining the CFG.
   44048                                                              (line  118)
   44049 * bsi_last:                              Maintaining the CFG.
   44050                                                              (line   56)
   44051 * bsi_next:                              Maintaining the CFG.
   44052                                                              (line   64)
   44053 * bsi_prev:                              Maintaining the CFG.
   44054                                                              (line   68)
   44055 * bsi_remove:                            Maintaining the CFG.
   44056                                                              (line   84)
   44057 * bsi_start:                             Maintaining the CFG.
   44058                                                              (line   52)
   44059 * BSS_SECTION_ASM_OP:                    Sections.           (line   68)
   44060 * bswap:                                 Arithmetic.         (line  241)
   44061 * btruncM2 instruction pattern:          Standard Names.     (line  567)
   44062 * build0:                                Macros and Functions.
   44063                                                              (line   16)
   44064 * build1:                                Macros and Functions.
   44065                                                              (line   17)
   44066 * build2:                                Macros and Functions.
   44067                                                              (line   18)
   44068 * build3:                                Macros and Functions.
   44069                                                              (line   19)
   44070 * build4:                                Macros and Functions.
   44071                                                              (line   20)
   44072 * build5:                                Macros and Functions.
   44073                                                              (line   21)
   44074 * build6:                                Macros and Functions.
   44075                                                              (line   22)
   44076 * builtin_longjmp instruction pattern:   Standard Names.     (line 1320)
   44077 * builtin_setjmp_receiver instruction pattern: Standard Names.
   44078                                                              (line 1310)
   44079 * builtin_setjmp_setup instruction pattern: Standard Names.  (line 1299)
   44080 * byte_mode:                             Machine Modes.      (line  336)
   44081 * BYTES_BIG_ENDIAN:                      Storage Layout.     (line   24)
   44082 * BYTES_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  221)
   44083 * C statements for assembler output:     Output Statement.   (line    6)
   44084 * C99 math functions, implicit usage:    Library Calls.      (line   62)
   44085 * C_COMMON_OVERRIDE_OPTIONS:             Run-time Target.    (line  142)
   44086 * c_register_pragma:                     Misc.               (line  404)
   44087 * c_register_pragma_with_expansion:      Misc.               (line  406)
   44088 * call <1>:                              Side Effects.       (line   86)
   44089 * call:                                  Flags.              (line  239)
   44090 * call instruction pattern:              Standard Names.     (line  974)
   44091 * call usage:                            Calls.              (line   10)
   44092 * call, in call_insn:                    Flags.              (line   33)
   44093 * call, in mem:                          Flags.              (line   99)
   44094 * call-clobbered register:               Register Basics.    (line   35)
   44095 * call-saved register:                   Register Basics.    (line   35)
   44096 * call-used register:                    Register Basics.    (line   35)
   44097 * CALL_EXPR:                             Unary and Binary Expressions.
   44098                                                              (line    6)
   44099 * call_insn:                             Insns.              (line   95)
   44100 * call_insn and /c:                      Flags.              (line   33)
   44101 * call_insn and /f:                      Flags.              (line  125)
   44102 * call_insn and /i:                      Flags.              (line   24)
   44103 * call_insn and /j:                      Flags.              (line  179)
   44104 * call_insn and /s:                      Flags.              (line   49)
   44105 * call_insn and /u:                      Flags.              (line   19)
   44106 * call_insn and /u or /i:                Flags.              (line   29)
   44107 * call_insn and /v:                      Flags.              (line   44)
   44108 * CALL_INSN_FUNCTION_USAGE:              Insns.              (line  101)
   44109 * call_pop instruction pattern:          Standard Names.     (line 1002)
   44110 * CALL_POPS_ARGS:                        Stack Arguments.    (line  133)
   44111 * CALL_REALLY_USED_REGISTERS:            Register Basics.    (line   46)
   44112 * CALL_USED_REGISTERS:                   Register Basics.    (line   35)
   44113 * call_used_regs:                        Register Basics.    (line   59)
   44114 * call_value instruction pattern:        Standard Names.     (line  994)
   44115 * call_value_pop instruction pattern:    Standard Names.     (line 1002)
   44116 * CALLER_SAVE_PROFITABLE:                Caller Saves.       (line   11)
   44117 * calling conventions:                   Stack and Calling.  (line    6)
   44118 * calling functions in RTL:              Calls.              (line    6)
   44119 * can_create_pseudo_p:                   Standard Names.     (line   75)
   44120 * can_fallthru:                          Basic Blocks.       (line   57)
   44121 * canadian:                              Configure Terms.    (line    6)
   44122 * CANNOT_CHANGE_MODE_CLASS:              Register Classes.   (line  522)
   44123 * CANNOT_CHANGE_MODE_CLASS and subreg semantics: Regs and Memory.
   44124                                                              (line  280)
   44125 * canonicalization of instructions:      Insn Canonicalizations.
   44126                                                              (line    6)
   44127 * CANONICALIZE_COMPARISON:               MODE_CC Condition Codes.
   44128                                                              (line   55)
   44129 * canonicalize_funcptr_for_compare instruction pattern: Standard Names.
   44130                                                              (line 1158)
   44131 * CASE_USE_BIT_TESTS:                    Misc.               (line   54)
   44132 * CASE_VECTOR_MODE:                      Misc.               (line   27)
   44133 * CASE_VECTOR_PC_RELATIVE:               Misc.               (line   40)
   44134 * CASE_VECTOR_SHORTEN_MODE:              Misc.               (line   31)
   44135 * casesi instruction pattern:            Standard Names.     (line 1082)
   44136 * cbranchMODE4 instruction pattern:      Standard Names.     (line  963)
   44137 * cc0 <1>:                               CC0 Condition Codes.
   44138                                                              (line    6)
   44139 * cc0:                                   Regs and Memory.    (line  307)
   44140 * cc0, RTL sharing:                      Sharing.            (line   27)
   44141 * cc0_rtx:                               Regs and Memory.    (line  333)
   44142 * CC1_SPEC:                              Driver.             (line   56)
   44143 * CC1PLUS_SPEC:                          Driver.             (line   64)
   44144 * cc_status:                             CC0 Condition Codes.
   44145                                                              (line    6)
   44146 * CC_STATUS_MDEP:                        CC0 Condition Codes.
   44147                                                              (line   17)
   44148 * CC_STATUS_MDEP_INIT:                   CC0 Condition Codes.
   44149                                                              (line   23)
   44150 * CCmode <1>:                            MODE_CC Condition Codes.
   44151                                                              (line    6)
   44152 * CCmode:                                Machine Modes.      (line  176)
   44153 * CDImode:                               Machine Modes.      (line  202)
   44154 * CEIL_DIV_EXPR:                         Unary and Binary Expressions.
   44155                                                              (line    6)
   44156 * CEIL_MOD_EXPR:                         Unary and Binary Expressions.
   44157                                                              (line    6)
   44158 * ceilM2 instruction pattern:            Standard Names.     (line  583)
   44159 * CFA_FRAME_BASE_OFFSET:                 Frame Layout.       (line  226)
   44160 * CFG, Control Flow Graph:               Control Flow.       (line    6)
   44161 * cfghooks.h:                            Maintaining the CFG.
   44162                                                              (line    6)
   44163 * cgraph_finalize_function:              Parsing pass.       (line   52)
   44164 * chain_circular:                        GTY Options.        (line  191)
   44165 * chain_next:                            GTY Options.        (line  191)
   44166 * chain_prev:                            GTY Options.        (line  191)
   44167 * change_address:                        Standard Names.     (line   47)
   44168 * CHAR_TYPE_SIZE:                        Type Layout.        (line   39)
   44169 * check_stack instruction pattern:       Standard Names.     (line 1245)
   44170 * CHImode:                               Machine Modes.      (line  202)
   44171 * class definitions, register:           Register Classes.   (line    6)
   44172 * class preference constraints:          Class Preferences.  (line    6)
   44173 * class, scope:                          Classes.            (line    6)
   44174 * CLASS_MAX_NREGS:                       Register Classes.   (line  510)
   44175 * CLASS_TYPE_P:                          Types for C++.      (line   65)
   44176 * classes of RTX codes:                  RTL Classes.        (line    6)
   44177 * CLASSTYPE_DECLARED_CLASS:              Classes.            (line    6)
   44178 * CLASSTYPE_HAS_MUTABLE:                 Classes.            (line   85)
   44179 * CLASSTYPE_NON_POD_P:                   Classes.            (line   90)
   44180 * CLEANUP_DECL:                          Statements for C++. (line    6)
   44181 * CLEANUP_EXPR:                          Statements for C++. (line    6)
   44182 * CLEANUP_POINT_EXPR:                    Unary and Binary Expressions.
   44183                                                              (line    6)
   44184 * CLEANUP_STMT:                          Statements for C++. (line    6)
   44185 * Cleanups:                              Cleanups.           (line    6)
   44186 * CLEAR_BY_PIECES_P:                     Costs.              (line  188)
   44187 * clear_cache instruction pattern:       Standard Names.     (line 1561)
   44188 * CLEAR_INSN_CACHE:                      Trampolines.        (line   99)
   44189 * CLEAR_RATIO:                           Costs.              (line  176)
   44190 * clobber:                               Side Effects.       (line  100)
   44191 * clz:                                   Arithmetic.         (line  217)
   44192 * CLZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  319)
   44193 * clzM2 instruction pattern:             Standard Names.     (line  648)
   44194 * cmpmemM instruction pattern:           Standard Names.     (line  781)
   44195 * cmpstrM instruction pattern:           Standard Names.     (line  760)
   44196 * cmpstrnM instruction pattern:          Standard Names.     (line  747)
   44197 * code generation RTL sequences:         Expander Definitions.
   44198                                                              (line    6)
   44199 * code iterators in .md files:           Code Iterators.     (line    6)
   44200 * code_label:                            Insns.              (line  119)
   44201 * code_label and /i:                     Flags.              (line   59)
   44202 * code_label and /v:                     Flags.              (line   44)
   44203 * CODE_LABEL_NUMBER:                     Insns.              (line  119)
   44204 * codes, RTL expression:                 RTL Objects.        (line   47)
   44205 * COImode:                               Machine Modes.      (line  202)
   44206 * COLLECT2_HOST_INITIALIZATION:          Host Misc.          (line   32)
   44207 * COLLECT_EXPORT_LIST:                   Misc.               (line  753)
   44208 * COLLECT_SHARED_FINI_FUNC:              Macros for Initialization.
   44209                                                              (line   44)
   44210 * COLLECT_SHARED_INIT_FUNC:              Macros for Initialization.
   44211                                                              (line   33)
   44212 * commit_edge_insertions:                Maintaining the CFG.
   44213                                                              (line  118)
   44214 * compare:                               Arithmetic.         (line   43)
   44215 * compare, canonicalization of:          Insn Canonicalizations.
   44216                                                              (line   37)
   44217 * comparison_operator:                   Machine-Independent Predicates.
   44218                                                              (line  111)
   44219 * compiler passes and files:             Passes.             (line    6)
   44220 * complement, bitwise:                   Arithmetic.         (line  154)
   44221 * COMPLEX_CST:                           Constant expressions.
   44222                                                              (line    6)
   44223 * COMPLEX_EXPR:                          Unary and Binary Expressions.
   44224                                                              (line    6)
   44225 * COMPLEX_TYPE:                          Types.              (line    6)
   44226 * COMPONENT_REF:                         Storage References. (line    6)
   44227 * Compound Expressions:                  Compound Expressions.
   44228                                                              (line    6)
   44229 * Compound Lvalues:                      Compound Lvalues.   (line    6)
   44230 * COMPOUND_EXPR:                         Unary and Binary Expressions.
   44231                                                              (line    6)
   44232 * COMPOUND_LITERAL_EXPR:                 Unary and Binary Expressions.
   44233                                                              (line    6)
   44234 * COMPOUND_LITERAL_EXPR_DECL:            Unary and Binary Expressions.
   44235                                                              (line  367)
   44236 * COMPOUND_LITERAL_EXPR_DECL_EXPR:       Unary and Binary Expressions.
   44237                                                              (line  367)
   44238 * computed jump:                         Edges.              (line  128)
   44239 * computing the length of an insn:       Insn Lengths.       (line    6)
   44240 * concat:                                Regs and Memory.    (line  385)
   44241 * concatn:                               Regs and Memory.    (line  391)
   44242 * cond:                                  Comparisons.        (line   90)
   44243 * cond and attributes:                   Expressions.        (line   37)
   44244 * cond_exec:                             Side Effects.       (line  248)
   44245 * COND_EXPR:                             Unary and Binary Expressions.
   44246                                                              (line    6)
   44247 * condition code register:               Regs and Memory.    (line  307)
   44248 * condition code status:                 Condition Code.     (line    6)
   44249 * condition codes:                       Comparisons.        (line   20)
   44250 * conditional execution <1>:             Cond Exec Macros.   (line    6)
   44251 * conditional execution:                 Conditional Execution.
   44252                                                              (line    6)
   44253 * Conditional Expressions:               Conditional Expressions.
   44254                                                              (line    6)
   44255 * conditions, in patterns:               Patterns.           (line   43)
   44256 * configuration file <1>:                Host Misc.          (line    6)
   44257 * configuration file:                    Filesystem.         (line    6)
   44258 * configure terms:                       Configure Terms.    (line    6)
   44259 * CONJ_EXPR:                             Unary and Binary Expressions.
   44260                                                              (line    6)
   44261 * const:                                 Constants.          (line   99)
   44262 * CONST0_RTX:                            Constants.          (line  119)
   44263 * const0_rtx:                            Constants.          (line   16)
   44264 * CONST1_RTX:                            Constants.          (line  119)
   44265 * const1_rtx:                            Constants.          (line   16)
   44266 * CONST2_RTX:                            Constants.          (line  119)
   44267 * const2_rtx:                            Constants.          (line   16)
   44268 * CONST_DECL:                            Declarations.       (line    6)
   44269 * const_double:                          Constants.          (line   32)
   44270 * const_double, RTL sharing:             Sharing.            (line   29)
   44271 * CONST_DOUBLE_LOW:                      Constants.          (line   39)
   44272 * CONST_DOUBLE_OK_FOR_CONSTRAINT_P:      Old Constraints.    (line   69)
   44273 * CONST_DOUBLE_OK_FOR_LETTER_P:          Old Constraints.    (line   54)
   44274 * const_double_operand:                  Machine-Independent Predicates.
   44275                                                              (line   21)
   44276 * const_fixed:                           Constants.          (line   52)
   44277 * const_int:                             Constants.          (line    8)
   44278 * const_int and attribute tests:         Expressions.        (line   47)
   44279 * const_int and attributes:              Expressions.        (line   10)
   44280 * const_int, RTL sharing:                Sharing.            (line   23)
   44281 * const_int_operand:                     Machine-Independent Predicates.
   44282                                                              (line   16)
   44283 * CONST_OK_FOR_CONSTRAINT_P:             Old Constraints.    (line   49)
   44284 * CONST_OK_FOR_LETTER_P:                 Old Constraints.    (line   40)
   44285 * const_string:                          Constants.          (line   71)
   44286 * const_string and attributes:           Expressions.        (line   20)
   44287 * const_true_rtx:                        Constants.          (line   26)
   44288 * const_vector:                          Constants.          (line   59)
   44289 * const_vector, RTL sharing:             Sharing.            (line   32)
   44290 * constant attributes:                   Constant Attributes.
   44291                                                              (line    6)
   44292 * constant definitions:                  Constant Definitions.
   44293                                                              (line    6)
   44294 * CONSTANT_ADDRESS_P:                    Addressing Modes.   (line   29)
   44295 * CONSTANT_ALIGNMENT:                    Storage Layout.     (line  229)
   44296 * CONSTANT_P:                            Addressing Modes.   (line   36)
   44297 * CONSTANT_POOL_ADDRESS_P:               Flags.              (line   10)
   44298 * CONSTANT_POOL_BEFORE_FUNCTION:         Data Output.        (line   76)
   44299 * constants in constraints:              Simple Constraints. (line   70)
   44300 * constm1_rtx:                           Constants.          (line   16)
   44301 * constraint modifier characters:        Modifiers.          (line    6)
   44302 * constraint, matching:                  Simple Constraints. (line  142)
   44303 * CONSTRAINT_LEN:                        Old Constraints.    (line   12)
   44304 * constraint_num:                        C Constraint Interface.
   44305                                                              (line   38)
   44306 * constraint_satisfied_p:                C Constraint Interface.
   44307                                                              (line   54)
   44308 * constraints:                           Constraints.        (line    6)
   44309 * constraints, defining:                 Define Constraints. (line    6)
   44310 * constraints, defining, obsolete method: Old Constraints.   (line    6)
   44311 * constraints, machine specific:         Machine Constraints.
   44312                                                              (line    6)
   44313 * constraints, testing:                  C Constraint Interface.
   44314                                                              (line    6)
   44315 * CONSTRUCTOR:                           Unary and Binary Expressions.
   44316                                                              (line    6)
   44317 * constructors, automatic calls:         Collect2.           (line   15)
   44318 * constructors, output of:               Initialization.     (line    6)
   44319 * container:                             Containers.         (line    6)
   44320 * CONTINUE_STMT:                         Statements for C++. (line    6)
   44321 * contributors:                          Contributors.       (line    6)
   44322 * controlling register usage:            Register Basics.    (line   73)
   44323 * controlling the compilation driver:    Driver.             (line    6)
   44324 * conventions, run-time:                 Interface.          (line    6)
   44325 * conversions:                           Conversions.        (line    6)
   44326 * CONVERT_EXPR:                          Unary and Binary Expressions.
   44327                                                              (line    6)
   44328 * copy_rtx:                              Addressing Modes.   (line  188)
   44329 * copy_rtx_if_shared:                    Sharing.            (line   64)
   44330 * copysignM3 instruction pattern:        Standard Names.     (line  629)
   44331 * cosM2 instruction pattern:             Standard Names.     (line  508)
   44332 * costs of instructions:                 Costs.              (line    6)
   44333 * CP_INTEGRAL_TYPE:                      Types for C++.      (line   57)
   44334 * cp_namespace_decls:                    Namespaces.         (line   49)
   44335 * CP_TYPE_CONST_NON_VOLATILE_P:          Types for C++.      (line   33)
   44336 * CP_TYPE_CONST_P:                       Types for C++.      (line   24)
   44337 * CP_TYPE_QUALS:                         Types for C++.      (line    6)
   44338 * CP_TYPE_RESTRICT_P:                    Types for C++.      (line   30)
   44339 * CP_TYPE_VOLATILE_P:                    Types for C++.      (line   27)
   44340 * CPLUSPLUS_CPP_SPEC:                    Driver.             (line   51)
   44341 * CPP_SPEC:                              Driver.             (line   44)
   44342 * CQImode:                               Machine Modes.      (line  202)
   44343 * cross compilation and floating point:  Floating Point.     (line    6)
   44344 * CRT_CALL_STATIC_FUNCTION:              Sections.           (line  122)
   44345 * CRTSTUFF_T_CFLAGS:                     Target Fragment.    (line   35)
   44346 * CRTSTUFF_T_CFLAGS_S:                   Target Fragment.    (line   39)
   44347 * CSImode:                               Machine Modes.      (line  202)
   44348 * cstoreMODE4 instruction pattern:       Standard Names.     (line  924)
   44349 * CTImode:                               Machine Modes.      (line  202)
   44350 * ctrapMM4 instruction pattern:          Standard Names.     (line 1386)
   44351 * ctz:                                   Arithmetic.         (line  225)
   44352 * CTZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  320)
   44353 * ctzM2 instruction pattern:             Standard Names.     (line  657)
   44354 * CUMULATIVE_ARGS:                       Register Arguments. (line  127)
   44355 * current_function_epilogue_delay_list:  Function Entry.     (line  181)
   44356 * current_function_is_leaf:              Leaf Functions.     (line   51)
   44357 * current_function_outgoing_args_size:   Stack Arguments.    (line   48)
   44358 * current_function_pops_args:            Function Entry.     (line  106)
   44359 * current_function_pretend_args_size:    Function Entry.     (line  112)
   44360 * current_function_uses_only_leaf_regs:  Leaf Functions.     (line   51)
   44361 * current_insn_predicate:                Conditional Execution.
   44362                                                              (line   26)
   44363 * DAmode:                                Machine Modes.      (line  152)
   44364 * data bypass:                           Processor pipeline description.
   44365                                                              (line  106)
   44366 * data dependence delays:                Processor pipeline description.
   44367                                                              (line    6)
   44368 * Data Dependency Analysis:              Dependency analysis.
   44369                                                              (line    6)
   44370 * data structures:                       Per-Function Data.  (line    6)
   44371 * DATA_ALIGNMENT:                        Storage Layout.     (line  216)
   44372 * DATA_SECTION_ASM_OP:                   Sections.           (line   53)
   44373 * DBR_OUTPUT_SEQEND:                     Instruction Output. (line  135)
   44374 * dbr_sequence_length:                   Instruction Output. (line  134)
   44375 * DBX_BLOCKS_FUNCTION_RELATIVE:          DBX Options.        (line  103)
   44376 * DBX_CONTIN_CHAR:                       DBX Options.        (line   66)
   44377 * DBX_CONTIN_LENGTH:                     DBX Options.        (line   56)
   44378 * DBX_DEBUGGING_INFO:                    DBX Options.        (line    9)
   44379 * DBX_FUNCTION_FIRST:                    DBX Options.        (line   97)
   44380 * DBX_LINES_FUNCTION_RELATIVE:           DBX Options.        (line  109)
   44381 * DBX_NO_XREFS:                          DBX Options.        (line   50)
   44382 * DBX_OUTPUT_LBRAC:                      DBX Hooks.          (line    9)
   44383 * DBX_OUTPUT_MAIN_SOURCE_FILE_END:       File Names and DBX. (line   34)
   44384 * DBX_OUTPUT_MAIN_SOURCE_FILENAME:       File Names and DBX. (line    9)
   44385 * DBX_OUTPUT_NFUN:                       DBX Hooks.          (line   18)
   44386 * DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END: File Names and DBX.
   44387                                                              (line   42)
   44388 * DBX_OUTPUT_RBRAC:                      DBX Hooks.          (line   15)
   44389 * DBX_OUTPUT_SOURCE_LINE:                DBX Hooks.          (line   22)
   44390 * DBX_REGISTER_NUMBER:                   All Debuggers.      (line    9)
   44391 * DBX_REGPARM_STABS_CODE:                DBX Options.        (line   87)
   44392 * DBX_REGPARM_STABS_LETTER:              DBX Options.        (line   92)
   44393 * DBX_STATIC_CONST_VAR_CODE:             DBX Options.        (line   82)
   44394 * DBX_STATIC_STAB_DATA_SECTION:          DBX Options.        (line   73)
   44395 * DBX_TYPE_DECL_STABS_CODE:              DBX Options.        (line   78)
   44396 * DBX_USE_BINCL:                         DBX Options.        (line  115)
   44397 * DCmode:                                Machine Modes.      (line  197)
   44398 * DDmode:                                Machine Modes.      (line   90)
   44399 * De Morgan's law:                       Insn Canonicalizations.
   44400                                                              (line   52)
   44401 * dead_or_set_p:                         define_peephole.    (line   65)
   44402 * debug_expr:                            Debug Information.  (line   22)
   44403 * DEBUG_EXPR_DECL:                       Declarations.       (line    6)
   44404 * debug_insn:                            Insns.              (line  239)
   44405 * DEBUG_SYMS_TEXT:                       DBX Options.        (line   25)
   44406 * DEBUGGER_ARG_OFFSET:                   All Debuggers.      (line   37)
   44407 * DEBUGGER_AUTO_OFFSET:                  All Debuggers.      (line   28)
   44408 * decimal float library:                 Decimal float library routines.
   44409                                                              (line    6)
   44410 * DECL_ALIGN:                            Declarations.       (line    6)
   44411 * DECL_ANTICIPATED:                      Functions for C++.  (line   42)
   44412 * DECL_ARGUMENTS:                        Function Basics.    (line   36)
   44413 * DECL_ARRAY_DELETE_OPERATOR_P:          Functions for C++.  (line  158)
   44414 * DECL_ARTIFICIAL <1>:                   Function Properties.
   44415                                                              (line   47)
   44416 * DECL_ARTIFICIAL <2>:                   Function Basics.    (line    6)
   44417 * DECL_ARTIFICIAL:                       Working with declarations.
   44418                                                              (line   24)
   44419 * DECL_ASSEMBLER_NAME:                   Function Basics.    (line    6)
   44420 * DECL_ATTRIBUTES:                       Attributes.         (line   22)
   44421 * DECL_BASE_CONSTRUCTOR_P:               Functions for C++.  (line   88)
   44422 * DECL_COMPLETE_CONSTRUCTOR_P:           Functions for C++.  (line   84)
   44423 * DECL_COMPLETE_DESTRUCTOR_P:            Functions for C++.  (line   98)
   44424 * DECL_CONST_MEMFUNC_P:                  Functions for C++.  (line   71)
   44425 * DECL_CONSTRUCTOR_P:                    Functions for C++.  (line   77)
   44426 * DECL_CONTEXT:                          Namespaces.         (line   31)
   44427 * DECL_CONV_FN_P:                        Functions for C++.  (line  105)
   44428 * DECL_COPY_CONSTRUCTOR_P:               Functions for C++.  (line   92)
   44429 * DECL_DESTRUCTOR_P:                     Functions for C++.  (line   95)
   44430 * DECL_EXTERN_C_FUNCTION_P:              Functions for C++.  (line   46)
   44431 * DECL_EXTERNAL <1>:                     Function Properties.
   44432                                                              (line   25)
   44433 * DECL_EXTERNAL:                         Declarations.       (line    6)
   44434 * DECL_FUNCTION_MEMBER_P:                Functions for C++.  (line   61)
   44435 * DECL_FUNCTION_SPECIFIC_OPTIMIZATION <1>: Function Properties.
   44436                                                              (line   61)
   44437 * DECL_FUNCTION_SPECIFIC_OPTIMIZATION:   Function Basics.    (line    6)
   44438 * DECL_FUNCTION_SPECIFIC_TARGET <1>:     Function Properties.
   44439                                                              (line   55)
   44440 * DECL_FUNCTION_SPECIFIC_TARGET:         Function Basics.    (line    6)
   44441 * DECL_GLOBAL_CTOR_P:                    Functions for C++.  (line  108)
   44442 * DECL_GLOBAL_DTOR_P:                    Functions for C++.  (line  112)
   44443 * DECL_INITIAL <1>:                      Function Basics.    (line   51)
   44444 * DECL_INITIAL:                          Declarations.       (line    6)
   44445 * DECL_LINKONCE_P:                       Functions for C++.  (line   50)
   44446 * DECL_LOCAL_FUNCTION_P:                 Functions for C++.  (line   38)
   44447 * DECL_MAIN_P:                           Functions for C++.  (line   34)
   44448 * DECL_NAME <1>:                         Namespaces.         (line   20)
   44449 * DECL_NAME <2>:                         Function Basics.    (line    6)
   44450 * DECL_NAME:                             Working with declarations.
   44451                                                              (line    7)
   44452 * DECL_NAMESPACE_ALIAS:                  Namespaces.         (line   35)
   44453 * DECL_NAMESPACE_STD_P:                  Namespaces.         (line   45)
   44454 * DECL_NON_THUNK_FUNCTION_P:             Functions for C++.  (line  138)
   44455 * DECL_NONCONVERTING_P:                  Functions for C++.  (line   80)
   44456 * DECL_NONSTATIC_MEMBER_FUNCTION_P:      Functions for C++.  (line   68)
   44457 * DECL_OVERLOADED_OPERATOR_P:            Functions for C++.  (line  102)
   44458 * DECL_PURE_P:                           Function Properties.
   44459                                                              (line   40)
   44460 * DECL_RESULT:                           Function Basics.    (line   41)
   44461 * DECL_SAVED_TREE:                       Function Basics.    (line   44)
   44462 * DECL_SIZE:                             Declarations.       (line    6)
   44463 * DECL_STATIC_FUNCTION_P:                Functions for C++.  (line   65)
   44464 * DECL_STMT:                             Statements for C++. (line    6)
   44465 * DECL_STMT_DECL:                        Statements for C++. (line    6)
   44466 * DECL_THUNK_P:                          Functions for C++.  (line  116)
   44467 * DECL_VIRTUAL_P:                        Function Properties.
   44468                                                              (line   44)
   44469 * DECL_VOLATILE_MEMFUNC_P:               Functions for C++.  (line   74)
   44470 * declaration:                           Declarations.       (line    6)
   44471 * declarations, RTL:                     RTL Declarations.   (line    6)
   44472 * DECLARE_LIBRARY_RENAMES:               Library Calls.      (line    9)
   44473 * decrement_and_branch_until_zero instruction pattern: Standard Names.
   44474                                                              (line 1120)
   44475 * default:                               GTY Options.        (line   77)
   44476 * default_file_start:                    File Framework.     (line    8)
   44477 * DEFAULT_GDB_EXTENSIONS:                DBX Options.        (line   18)
   44478 * DEFAULT_PCC_STRUCT_RETURN:             Aggregate Return.   (line   35)
   44479 * DEFAULT_SIGNED_CHAR:                   Type Layout.        (line  153)
   44480 * define_address_constraint:             Define Constraints. (line  107)
   44481 * define_asm_attributes:                 Tagging Insns.      (line   73)
   44482 * define_attr:                           Defining Attributes.
   44483                                                              (line    6)
   44484 * define_automaton:                      Processor pipeline description.
   44485                                                              (line   53)
   44486 * define_bypass:                         Processor pipeline description.
   44487                                                              (line  197)
   44488 * define_c_enum:                         Constant Definitions.
   44489                                                              (line   49)
   44490 * define_code_attr:                      Code Iterators.     (line    6)
   44491 * define_code_iterator:                  Code Iterators.     (line    6)
   44492 * define_cond_exec:                      Conditional Execution.
   44493                                                              (line   13)
   44494 * define_constants:                      Constant Definitions.
   44495                                                              (line    6)
   44496 * define_constraint:                     Define Constraints. (line   48)
   44497 * define_cpu_unit:                       Processor pipeline description.
   44498                                                              (line   68)
   44499 * define_delay:                          Delay Slots.        (line   25)
   44500 * define_enum:                           Constant Definitions.
   44501                                                              (line  118)
   44502 * define_enum_attr <1>:                  Constant Definitions.
   44503                                                              (line  136)
   44504 * define_enum_attr:                      Defining Attributes.
   44505                                                              (line   64)
   44506 * define_expand:                         Expander Definitions.
   44507                                                              (line   11)
   44508 * define_insn:                           Patterns.           (line    6)
   44509 * define_insn example:                   Example.            (line    6)
   44510 * define_insn_and_split:                 Insn Splitting.     (line  170)
   44511 * define_insn_reservation:               Processor pipeline description.
   44512                                                              (line  106)
   44513 * define_memory_constraint:              Define Constraints. (line   88)
   44514 * define_mode_attr:                      Substitutions.      (line    6)
   44515 * define_mode_iterator:                  Defining Mode Iterators.
   44516                                                              (line    6)
   44517 * define_peephole:                       define_peephole.    (line    6)
   44518 * define_peephole2:                      define_peephole2.   (line    6)
   44519 * define_predicate:                      Defining Predicates.
   44520                                                              (line    6)
   44521 * define_query_cpu_unit:                 Processor pipeline description.
   44522                                                              (line   90)
   44523 * define_register_constraint:            Define Constraints. (line   28)
   44524 * define_reservation:                    Processor pipeline description.
   44525                                                              (line  186)
   44526 * define_special_predicate:              Defining Predicates.
   44527                                                              (line    6)
   44528 * define_split:                          Insn Splitting.     (line   32)
   44529 * defining attributes and their values:  Defining Attributes.
   44530                                                              (line    6)
   44531 * defining constraints:                  Define Constraints. (line    6)
   44532 * defining constraints, obsolete method: Old Constraints.    (line    6)
   44533 * defining jump instruction patterns:    Jump Patterns.      (line    6)
   44534 * defining looping instruction patterns: Looping Patterns.   (line    6)
   44535 * defining peephole optimizers:          Peephole Definitions.
   44536                                                              (line    6)
   44537 * defining predicates:                   Defining Predicates.
   44538                                                              (line    6)
   44539 * defining RTL sequences for code generation: Expander Definitions.
   44540                                                              (line    6)
   44541 * delay slots, defining:                 Delay Slots.        (line    6)
   44542 * DELAY_SLOTS_FOR_EPILOGUE:              Function Entry.     (line  163)
   44543 * deletable:                             GTY Options.        (line  145)
   44544 * DELETE_IF_ORDINARY:                    Filesystem.         (line   79)
   44545 * Dependent Patterns:                    Dependent Patterns. (line    6)
   44546 * desc:                                  GTY Options.        (line   77)
   44547 * destructors, output of:                Initialization.     (line    6)
   44548 * deterministic finite state automaton:  Processor pipeline description.
   44549                                                              (line    6)
   44550 * DF_SIZE:                               Type Layout.        (line  129)
   44551 * DFmode:                                Machine Modes.      (line   73)
   44552 * digits in constraint:                  Simple Constraints. (line  130)
   44553 * DImode:                                Machine Modes.      (line   45)
   44554 * DIR_SEPARATOR:                         Filesystem.         (line   18)
   44555 * DIR_SEPARATOR_2:                       Filesystem.         (line   19)
   44556 * directory options .md:                 Including Patterns. (line   44)
   44557 * disabling certain registers:           Register Basics.    (line   73)
   44558 * dispatch table:                        Dispatch Tables.    (line    8)
   44559 * div:                                   Arithmetic.         (line  116)
   44560 * div and attributes:                    Expressions.        (line   64)
   44561 * division:                              Arithmetic.         (line  116)
   44562 * divM3 instruction pattern:             Standard Names.     (line  222)
   44563 * divmodM4 instruction pattern:          Standard Names.     (line  438)
   44564 * DO_BODY:                               Statements for C++. (line    6)
   44565 * DO_COND:                               Statements for C++. (line    6)
   44566 * DO_STMT:                               Statements for C++. (line    6)
   44567 * DOLLARS_IN_IDENTIFIERS:                Misc.               (line  451)
   44568 * doloop_begin instruction pattern:      Standard Names.     (line 1151)
   44569 * doloop_end instruction pattern:        Standard Names.     (line 1130)
   44570 * DONE:                                  Expander Definitions.
   44571                                                              (line   74)
   44572 * DONT_USE_BUILTIN_SETJMP:               Exception Region Output.
   44573                                                              (line   79)
   44574 * DOUBLE_TYPE_SIZE:                      Type Layout.        (line   53)
   44575 * DQmode:                                Machine Modes.      (line  115)
   44576 * driver:                                Driver.             (line    6)
   44577 * DRIVER_SELF_SPECS:                     Driver.             (line    9)
   44578 * DUMPFILE_FORMAT:                       Filesystem.         (line   67)
   44579 * DWARF2_ASM_LINE_DEBUG_INFO:            SDB and DWARF.      (line   50)
   44580 * DWARF2_DEBUGGING_INFO:                 SDB and DWARF.      (line   13)
   44581 * DWARF2_FRAME_INFO:                     SDB and DWARF.      (line   30)
   44582 * DWARF2_FRAME_REG_OUT:                  Frame Registers.    (line  150)
   44583 * DWARF2_UNWIND_INFO:                    Exception Region Output.
   44584                                                              (line   40)
   44585 * DWARF_ALT_FRAME_RETURN_COLUMN:         Frame Layout.       (line  152)
   44586 * DWARF_CIE_DATA_ALIGNMENT:              Exception Region Output.
   44587                                                              (line   84)
   44588 * DWARF_FRAME_REGISTERS:                 Frame Registers.    (line  110)
   44589 * DWARF_FRAME_REGNUM:                    Frame Registers.    (line  142)
   44590 * DWARF_REG_TO_UNWIND_COLUMN:            Frame Registers.    (line  134)
   44591 * DWARF_ZERO_REG:                        Frame Layout.       (line  163)
   44592 * DYNAMIC_CHAIN_ADDRESS:                 Frame Layout.       (line   92)
   44593 * E in constraint:                       Simple Constraints. (line   89)
   44594 * earlyclobber operand:                  Modifiers.          (line   25)
   44595 * edge:                                  Edges.              (line    6)
   44596 * edge in the flow graph:                Edges.              (line    6)
   44597 * edge iterators:                        Edges.              (line   15)
   44598 * edge splitting:                        Maintaining the CFG.
   44599                                                              (line  118)
   44600 * EDGE_ABNORMAL:                         Edges.              (line  128)
   44601 * EDGE_ABNORMAL, EDGE_ABNORMAL_CALL:     Edges.              (line  171)
   44602 * EDGE_ABNORMAL, EDGE_EH:                Edges.              (line   96)
   44603 * EDGE_ABNORMAL, EDGE_SIBCALL:           Edges.              (line  122)
   44604 * EDGE_FALLTHRU, force_nonfallthru:      Edges.              (line   86)
   44605 * EDOM, implicit usage:                  Library Calls.      (line   44)
   44606 * EH_FRAME_IN_DATA_SECTION:              Exception Region Output.
   44607                                                              (line   20)
   44608 * EH_FRAME_SECTION_NAME:                 Exception Region Output.
   44609                                                              (line   10)
   44610 * eh_return instruction pattern:         Standard Names.     (line 1326)
   44611 * EH_RETURN_DATA_REGNO:                  Exception Handling. (line    7)
   44612 * EH_RETURN_HANDLER_RTX:                 Exception Handling. (line   39)
   44613 * EH_RETURN_STACKADJ_RTX:                Exception Handling. (line   22)
   44614 * EH_TABLES_CAN_BE_READ_ONLY:            Exception Region Output.
   44615                                                              (line   29)
   44616 * EH_USES:                               Function Entry.     (line  158)
   44617 * ei_edge:                               Edges.              (line   43)
   44618 * ei_end_p:                              Edges.              (line   27)
   44619 * ei_last:                               Edges.              (line   23)
   44620 * ei_next:                               Edges.              (line   35)
   44621 * ei_one_before_end_p:                   Edges.              (line   31)
   44622 * ei_prev:                               Edges.              (line   39)
   44623 * ei_safe_safe:                          Edges.              (line   47)
   44624 * ei_start:                              Edges.              (line   19)
   44625 * ELIGIBLE_FOR_EPILOGUE_DELAY:           Function Entry.     (line  169)
   44626 * ELIMINABLE_REGS:                       Elimination.        (line   47)
   44627 * ELSE_CLAUSE:                           Statements for C++. (line    6)
   44628 * Embedded C:                            Fixed-point fractional library routines.
   44629                                                              (line    6)
   44630 * EMIT_MODE_SET:                         Mode Switching.     (line   74)
   44631 * Empty Statements:                      Empty Statements.   (line    6)
   44632 * EMPTY_CLASS_EXPR:                      Statements for C++. (line    6)
   44633 * EMPTY_FIELD_BOUNDARY:                  Storage Layout.     (line  292)
   44634 * Emulated TLS:                          Emulated TLS.       (line    6)
   44635 * ENABLE_EXECUTE_STACK:                  Trampolines.        (line  109)
   44636 * enabled:                               Disable Insn Alternatives.
   44637                                                              (line    6)
   44638 * ENDFILE_SPEC:                          Driver.             (line  156)
   44639 * endianness:                            Portability.        (line   21)
   44640 * ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR:       Basic Blocks.       (line   28)
   44641 * enum machine_mode:                     Machine Modes.      (line    6)
   44642 * enum reg_class:                        Register Classes.   (line   67)
   44643 * ENUMERAL_TYPE:                         Types.              (line    6)
   44644 * enumerations:                          Constant Definitions.
   44645                                                              (line   49)
   44646 * epilogue:                              Function Entry.     (line    6)
   44647 * epilogue instruction pattern:          Standard Names.     (line 1358)
   44648 * EPILOGUE_USES:                         Function Entry.     (line  152)
   44649 * eq:                                    Comparisons.        (line   52)
   44650 * eq and attributes:                     Expressions.        (line   64)
   44651 * eq_attr:                               Expressions.        (line   85)
   44652 * EQ_EXPR:                               Unary and Binary Expressions.
   44653                                                              (line    6)
   44654 * equal:                                 Comparisons.        (line   52)
   44655 * errno, implicit usage:                 Library Calls.      (line   56)
   44656 * EXACT_DIV_EXPR:                        Unary and Binary Expressions.
   44657                                                              (line    6)
   44658 * examining SSA_NAMEs:                   SSA.                (line  218)
   44659 * exception handling <1>:                Exception Handling. (line    6)
   44660 * exception handling:                    Edges.              (line   96)
   44661 * exception_receiver instruction pattern: Standard Names.    (line 1290)
   44662 * exclamation point:                     Multi-Alternative.  (line   47)
   44663 * exclusion_set:                         Processor pipeline description.
   44664                                                              (line  220)
   44665 * exclusive-or, bitwise:                 Arithmetic.         (line  168)
   44666 * EXIT_EXPR:                             Unary and Binary Expressions.
   44667                                                              (line    6)
   44668 * EXIT_IGNORE_STACK:                     Function Entry.     (line  140)
   44669 * expander definitions:                  Expander Definitions.
   44670                                                              (line    6)
   44671 * expM2 instruction pattern:             Standard Names.     (line  524)
   44672 * EXPR_FILENAME:                         Working with declarations.
   44673                                                              (line   14)
   44674 * EXPR_LINENO:                           Working with declarations.
   44675                                                              (line   20)
   44676 * expr_list:                             Insns.              (line  545)
   44677 * EXPR_STMT:                             Statements for C++. (line    6)
   44678 * EXPR_STMT_EXPR:                        Statements for C++. (line    6)
   44679 * expression:                            Expression trees.   (line    6)
   44680 * expression codes:                      RTL Objects.        (line   47)
   44681 * extendMN2 instruction pattern:         Standard Names.     (line  839)
   44682 * extensible constraints:                Simple Constraints. (line  173)
   44683 * EXTRA_ADDRESS_CONSTRAINT:              Old Constraints.    (line  123)
   44684 * EXTRA_CONSTRAINT:                      Old Constraints.    (line   74)
   44685 * EXTRA_CONSTRAINT_STR:                  Old Constraints.    (line   95)
   44686 * EXTRA_MEMORY_CONSTRAINT:               Old Constraints.    (line  100)
   44687 * EXTRA_SPECS:                           Driver.             (line  183)
   44688 * extv instruction pattern:              Standard Names.     (line  875)
   44689 * extzv instruction pattern:             Standard Names.     (line  890)
   44690 * F in constraint:                       Simple Constraints. (line   94)
   44691 * FAIL:                                  Expander Definitions.
   44692                                                              (line   80)
   44693 * fall-thru:                             Edges.              (line   69)
   44694 * FATAL_EXIT_CODE:                       Host Misc.          (line    6)
   44695 * FDL, GNU Free Documentation License:   GNU Free Documentation License.
   44696                                                              (line    6)
   44697 * features, optional, in system conventions: Run-time Target.
   44698                                                              (line   59)
   44699 * ffs:                                   Arithmetic.         (line  211)
   44700 * ffsM2 instruction pattern:             Standard Names.     (line  638)
   44701 * FIELD_DECL:                            Declarations.       (line    6)
   44702 * file_end_indicate_exec_stack:          File Framework.     (line   41)
   44703 * files and passes of the compiler:      Passes.             (line    6)
   44704 * files, generated:                      Files.              (line    6)
   44705 * final_absence_set:                     Processor pipeline description.
   44706                                                              (line  220)
   44707 * FINAL_PRESCAN_INSN:                    Instruction Output. (line   61)
   44708 * final_presence_set:                    Processor pipeline description.
   44709                                                              (line  220)
   44710 * final_scan_insn:                       Function Entry.     (line  181)
   44711 * final_sequence:                        Instruction Output. (line  145)
   44712 * FIND_BASE_TERM:                        Addressing Modes.   (line  119)
   44713 * FINI_ARRAY_SECTION_ASM_OP:             Sections.           (line  115)
   44714 * FINI_SECTION_ASM_OP:                   Sections.           (line  100)
   44715 * finite state automaton minimization:   Processor pipeline description.
   44716                                                              (line  301)
   44717 * FIRST_PARM_OFFSET:                     Frame Layout.       (line   67)
   44718 * FIRST_PARM_OFFSET and virtual registers: Regs and Memory.  (line   65)
   44719 * FIRST_PSEUDO_REGISTER:                 Register Basics.    (line    9)
   44720 * FIRST_STACK_REG:                       Stack Registers.    (line   27)
   44721 * FIRST_VIRTUAL_REGISTER:                Regs and Memory.    (line   51)
   44722 * fix:                                   Conversions.        (line   66)
   44723 * FIX_TRUNC_EXPR:                        Unary and Binary Expressions.
   44724                                                              (line    6)
   44725 * fix_truncMN2 instruction pattern:      Standard Names.     (line  826)
   44726 * fixed register:                        Register Basics.    (line   15)
   44727 * fixed-point fractional library:        Fixed-point fractional library routines.
   44728                                                              (line    6)
   44729 * FIXED_CONVERT_EXPR:                    Unary and Binary Expressions.
   44730                                                              (line    6)
   44731 * FIXED_CST:                             Constant expressions.
   44732                                                              (line    6)
   44733 * FIXED_POINT_TYPE:                      Types.              (line    6)
   44734 * FIXED_REGISTERS:                       Register Basics.    (line   15)
   44735 * fixed_regs:                            Register Basics.    (line   59)
   44736 * fixMN2 instruction pattern:            Standard Names.     (line  806)
   44737 * FIXUNS_TRUNC_LIKE_FIX_TRUNC:           Misc.               (line  100)
   44738 * fixuns_truncMN2 instruction pattern:   Standard Names.     (line  830)
   44739 * fixunsMN2 instruction pattern:         Standard Names.     (line  815)
   44740 * flags in RTL expression:               Flags.              (line    6)
   44741 * float:                                 Conversions.        (line   58)
   44742 * FLOAT_EXPR:                            Unary and Binary Expressions.
   44743                                                              (line    6)
   44744 * float_extend:                          Conversions.        (line   33)
   44745 * FLOAT_LIB_COMPARE_RETURNS_BOOL:        Library Calls.      (line   25)
   44746 * FLOAT_STORE_FLAG_VALUE:                Misc.               (line  301)
   44747 * float_truncate:                        Conversions.        (line   53)
   44748 * FLOAT_TYPE_SIZE:                       Type Layout.        (line   49)
   44749 * FLOAT_WORDS_BIG_ENDIAN:                Storage Layout.     (line   36)
   44750 * FLOAT_WORDS_BIG_ENDIAN, (lack of) effect on subreg: Regs and Memory.
   44751                                                              (line  226)
   44752 * floating point and cross compilation:  Floating Point.     (line    6)
   44753 * Floating Point Emulation:              Target Fragment.    (line   15)
   44754 * floatMN2 instruction pattern:          Standard Names.     (line  798)
   44755 * floatunsMN2 instruction pattern:       Standard Names.     (line  802)
   44756 * FLOOR_DIV_EXPR:                        Unary and Binary Expressions.
   44757                                                              (line    6)
   44758 * FLOOR_MOD_EXPR:                        Unary and Binary Expressions.
   44759                                                              (line    6)
   44760 * floorM2 instruction pattern:           Standard Names.     (line  559)
   44761 * flow-insensitive alias analysis:       Alias analysis.     (line    6)
   44762 * flow-sensitive alias analysis:         Alias analysis.     (line    6)
   44763 * fma:                                   Arithmetic.         (line  111)
   44764 * fmaM4 instruction pattern:             Standard Names.     (line  234)
   44765 * fmodM3 instruction pattern:            Standard Names.     (line  490)
   44766 * fmsM4 instruction pattern:             Standard Names.     (line  243)
   44767 * fnmaM4 instruction pattern:            Standard Names.     (line  249)
   44768 * fnmsM4 instruction pattern:            Standard Names.     (line  255)
   44769 * FOR_BODY:                              Statements for C++. (line    6)
   44770 * FOR_COND:                              Statements for C++. (line    6)
   44771 * FOR_EXPR:                              Statements for C++. (line    6)
   44772 * FOR_INIT_STMT:                         Statements for C++. (line    6)
   44773 * FOR_STMT:                              Statements for C++. (line    6)
   44774 * FORCE_CODE_SECTION_ALIGN:              Sections.           (line  146)
   44775 * force_reg:                             Standard Names.     (line   36)
   44776 * fract_convert:                         Conversions.        (line   82)
   44777 * FRACT_TYPE_SIZE:                       Type Layout.        (line   68)
   44778 * fractional types:                      Fixed-point fractional library routines.
   44779                                                              (line    6)
   44780 * fractMN2 instruction pattern:          Standard Names.     (line  848)
   44781 * fractunsMN2 instruction pattern:       Standard Names.     (line  863)
   44782 * frame layout:                          Frame Layout.       (line    6)
   44783 * FRAME_ADDR_RTX:                        Frame Layout.       (line  116)
   44784 * FRAME_GROWS_DOWNWARD:                  Frame Layout.       (line   31)
   44785 * FRAME_GROWS_DOWNWARD and virtual registers: Regs and Memory.
   44786                                                              (line   69)
   44787 * FRAME_POINTER_CFA_OFFSET:              Frame Layout.       (line  212)
   44788 * frame_pointer_needed:                  Function Entry.     (line   34)
   44789 * FRAME_POINTER_REGNUM:                  Frame Registers.    (line   14)
   44790 * FRAME_POINTER_REGNUM and virtual registers: Regs and Memory.
   44791                                                              (line   74)
   44792 * frame_pointer_rtx:                     Frame Registers.    (line  104)
   44793 * frame_related:                         Flags.              (line  247)
   44794 * frame_related, in insn, call_insn, jump_insn, barrier, and set: Flags.
   44795                                                              (line  125)
   44796 * frame_related, in mem:                 Flags.              (line  103)
   44797 * frame_related, in reg:                 Flags.              (line  112)
   44798 * frame_related, in symbol_ref:          Flags.              (line  183)
   44799 * frequency, count, BB_FREQ_BASE:        Profile information.
   44800                                                              (line   30)
   44801 * ftruncM2 instruction pattern:          Standard Names.     (line  821)
   44802 * function <1>:                          Functions for C++.  (line    6)
   44803 * function:                              Functions.          (line    6)
   44804 * function call conventions:             Interface.          (line    6)
   44805 * function entry and exit:               Function Entry.     (line    6)
   44806 * function entry point, alternate function entry point: Edges.
   44807                                                              (line  180)
   44808 * function properties:                   Function Properties.
   44809                                                              (line    6)
   44810 * function-call insns:                   Calls.              (line    6)
   44811 * FUNCTION_ARG:                          Register Arguments. (line   11)
   44812 * FUNCTION_ARG_ADVANCE:                  Register Arguments. (line  185)
   44813 * FUNCTION_ARG_OFFSET:                   Register Arguments. (line  196)
   44814 * FUNCTION_ARG_PADDING:                  Register Arguments. (line  203)
   44815 * FUNCTION_ARG_REGNO_P:                  Register Arguments. (line  244)
   44816 * FUNCTION_BOUNDARY:                     Storage Layout.     (line  158)
   44817 * FUNCTION_DECL <1>:                     Functions for C++.  (line    6)
   44818 * FUNCTION_DECL:                         Functions.          (line    6)
   44819 * FUNCTION_INCOMING_ARG:                 Register Arguments. (line   68)
   44820 * FUNCTION_MODE:                         Misc.               (line  356)
   44821 * FUNCTION_PROFILER:                     Profiling.          (line    9)
   44822 * FUNCTION_TYPE:                         Types.              (line    6)
   44823 * FUNCTION_VALUE:                        Scalar Return.      (line   52)
   44824 * FUNCTION_VALUE_REGNO_P:                Scalar Return.      (line   78)
   44825 * functions, leaf:                       Leaf Functions.     (line    6)
   44826 * fundamental type:                      Types.              (line    6)
   44827 * g in constraint:                       Simple Constraints. (line  120)
   44828 * G in constraint:                       Simple Constraints. (line   98)
   44829 * garbage collector, invocation:         Invoking the garbage collector.
   44830                                                              (line    6)
   44831 * garbage collector, troubleshooting:    Troubleshooting.    (line    6)
   44832 * GCC and portability:                   Portability.        (line    6)
   44833 * GCC_DRIVER_HOST_INITIALIZATION:        Host Misc.          (line   36)
   44834 * gcov_type:                             Profile information.
   44835                                                              (line   41)
   44836 * ge:                                    Comparisons.        (line   72)
   44837 * ge and attributes:                     Expressions.        (line   64)
   44838 * GE_EXPR:                               Unary and Binary Expressions.
   44839                                                              (line    6)
   44840 * GEN_ERRNO_RTX:                         Library Calls.      (line   57)
   44841 * gencodes:                              RTL passes.         (line   18)
   44842 * general_operand:                       Machine-Independent Predicates.
   44843                                                              (line  105)
   44844 * GENERAL_REGS:                          Register Classes.   (line   23)
   44845 * generated files:                       Files.              (line    6)
   44846 * generating assembler output:           Output Statement.   (line    6)
   44847 * generating insns:                      RTL Template.       (line    6)
   44848 * GENERIC <1>:                           GENERIC.            (line    6)
   44849 * GENERIC:                               Parsing pass.       (line    6)
   44850 * generic predicates:                    Machine-Independent Predicates.
   44851                                                              (line    6)
   44852 * genflags:                              RTL passes.         (line   18)
   44853 * get_attr:                              Expressions.        (line   80)
   44854 * get_attr_length:                       Insn Lengths.       (line   46)
   44855 * GET_CLASS_NARROWEST_MODE:              Machine Modes.      (line  333)
   44856 * GET_CODE:                              RTL Objects.        (line   47)
   44857 * get_frame_size:                        Elimination.        (line   34)
   44858 * get_insns:                             Insns.              (line   34)
   44859 * get_last_insn:                         Insns.              (line   34)
   44860 * GET_MODE:                              Machine Modes.      (line  280)
   44861 * GET_MODE_ALIGNMENT:                    Machine Modes.      (line  320)
   44862 * GET_MODE_BITSIZE:                      Machine Modes.      (line  304)
   44863 * GET_MODE_CLASS:                        Machine Modes.      (line  294)
   44864 * GET_MODE_FBIT:                         Machine Modes.      (line  311)
   44865 * GET_MODE_IBIT:                         Machine Modes.      (line  307)
   44866 * GET_MODE_MASK:                         Machine Modes.      (line  315)
   44867 * GET_MODE_NAME:                         Machine Modes.      (line  291)
   44868 * GET_MODE_NUNITS:                       Machine Modes.      (line  329)
   44869 * GET_MODE_SIZE:                         Machine Modes.      (line  301)
   44870 * GET_MODE_UNIT_SIZE:                    Machine Modes.      (line  323)
   44871 * GET_MODE_WIDER_MODE:                   Machine Modes.      (line  297)
   44872 * GET_RTX_CLASS:                         RTL Classes.        (line    6)
   44873 * GET_RTX_FORMAT:                        RTL Classes.        (line  131)
   44874 * GET_RTX_LENGTH:                        RTL Classes.        (line  128)
   44875 * geu:                                   Comparisons.        (line   72)
   44876 * geu and attributes:                    Expressions.        (line   64)
   44877 * GGC:                                   Type Information.   (line    6)
   44878 * ggc_collect:                           Invoking the garbage collector.
   44879                                                              (line    6)
   44880 * GIMPLE <1>:                            GIMPLE.             (line    6)
   44881 * GIMPLE <2>:                            Gimplification pass.
   44882                                                              (line    6)
   44883 * GIMPLE:                                Parsing pass.       (line   14)
   44884 * GIMPLE Exception Handling:             GIMPLE Exception Handling.
   44885                                                              (line    6)
   44886 * GIMPLE instruction set:                GIMPLE instruction set.
   44887                                                              (line    6)
   44888 * GIMPLE sequences:                      GIMPLE sequences.   (line    6)
   44889 * gimple_addresses_taken:                Manipulating GIMPLE statements.
   44890                                                              (line   90)
   44891 * GIMPLE_ASM:                            GIMPLE_ASM.         (line    6)
   44892 * gimple_asm_clear_volatile:             GIMPLE_ASM.         (line   63)
   44893 * gimple_asm_clobber_op:                 GIMPLE_ASM.         (line   46)
   44894 * gimple_asm_input_op:                   GIMPLE_ASM.         (line   30)
   44895 * gimple_asm_nclobbers:                  GIMPLE_ASM.         (line   27)
   44896 * gimple_asm_ninputs:                    GIMPLE_ASM.         (line   21)
   44897 * gimple_asm_noutputs:                   GIMPLE_ASM.         (line   24)
   44898 * gimple_asm_output_op:                  GIMPLE_ASM.         (line   38)
   44899 * gimple_asm_set_clobber_op:             GIMPLE_ASM.         (line   50)
   44900 * gimple_asm_set_input_op:               GIMPLE_ASM.         (line   34)
   44901 * gimple_asm_set_output_op:              GIMPLE_ASM.         (line   42)
   44902 * gimple_asm_set_volatile:               GIMPLE_ASM.         (line   60)
   44903 * gimple_asm_string:                     GIMPLE_ASM.         (line   53)
   44904 * gimple_asm_volatile_p:                 GIMPLE_ASM.         (line   57)
   44905 * GIMPLE_ASSIGN:                         GIMPLE_ASSIGN.      (line    6)
   44906 * gimple_assign_cast_p <1>:              GIMPLE_ASSIGN.      (line   93)
   44907 * gimple_assign_cast_p:                  Logical Operators.  (line  160)
   44908 * gimple_assign_lhs:                     GIMPLE_ASSIGN.      (line   51)
   44909 * gimple_assign_lhs_ptr:                 GIMPLE_ASSIGN.      (line   54)
   44910 * gimple_assign_rhs1:                    GIMPLE_ASSIGN.      (line   57)
   44911 * gimple_assign_rhs1_ptr:                GIMPLE_ASSIGN.      (line   60)
   44912 * gimple_assign_rhs2:                    GIMPLE_ASSIGN.      (line   64)
   44913 * gimple_assign_rhs2_ptr:                GIMPLE_ASSIGN.      (line   67)
   44914 * gimple_assign_rhs3:                    GIMPLE_ASSIGN.      (line   71)
   44915 * gimple_assign_rhs3_ptr:                GIMPLE_ASSIGN.      (line   74)
   44916 * gimple_assign_rhs_class:               GIMPLE_ASSIGN.      (line   46)
   44917 * gimple_assign_rhs_code:                GIMPLE_ASSIGN.      (line   41)
   44918 * gimple_assign_set_lhs:                 GIMPLE_ASSIGN.      (line   78)
   44919 * gimple_assign_set_rhs1:                GIMPLE_ASSIGN.      (line   81)
   44920 * gimple_assign_set_rhs2:                GIMPLE_ASSIGN.      (line   85)
   44921 * gimple_assign_set_rhs3:                GIMPLE_ASSIGN.      (line   89)
   44922 * gimple_bb:                             Manipulating GIMPLE statements.
   44923                                                              (line   18)
   44924 * GIMPLE_BIND:                           GIMPLE_BIND.        (line    6)
   44925 * gimple_bind_add_seq:                   GIMPLE_BIND.        (line   36)
   44926 * gimple_bind_add_stmt:                  GIMPLE_BIND.        (line   32)
   44927 * gimple_bind_append_vars:               GIMPLE_BIND.        (line   19)
   44928 * gimple_bind_block:                     GIMPLE_BIND.        (line   40)
   44929 * gimple_bind_body:                      GIMPLE_BIND.        (line   23)
   44930 * gimple_bind_set_block:                 GIMPLE_BIND.        (line   45)
   44931 * gimple_bind_set_body:                  GIMPLE_BIND.        (line   28)
   44932 * gimple_bind_set_vars:                  GIMPLE_BIND.        (line   15)
   44933 * gimple_bind_vars:                      GIMPLE_BIND.        (line   12)
   44934 * gimple_block:                          Manipulating GIMPLE statements.
   44935                                                              (line   21)
   44936 * gimple_build_asm:                      GIMPLE_ASM.         (line    8)
   44937 * gimple_build_asm_vec:                  GIMPLE_ASM.         (line   17)
   44938 * gimple_build_assign:                   GIMPLE_ASSIGN.      (line    7)
   44939 * gimple_build_assign_with_ops:          GIMPLE_ASSIGN.      (line   30)
   44940 * gimple_build_bind:                     GIMPLE_BIND.        (line    8)
   44941 * gimple_build_call:                     GIMPLE_CALL.        (line    8)
   44942 * gimple_build_call_from_tree:           GIMPLE_CALL.        (line   16)
   44943 * gimple_build_call_vec:                 GIMPLE_CALL.        (line   25)
   44944 * gimple_build_catch:                    GIMPLE_CATCH.       (line    8)
   44945 * gimple_build_cond:                     GIMPLE_COND.        (line    8)
   44946 * gimple_build_cond_from_tree:           GIMPLE_COND.        (line   16)
   44947 * gimple_build_debug_bind:               GIMPLE_DEBUG.       (line    8)
   44948 * gimple_build_eh_filter:                GIMPLE_EH_FILTER.   (line    8)
   44949 * gimple_build_goto:                     GIMPLE_LABEL.       (line   18)
   44950 * gimple_build_label:                    GIMPLE_LABEL.       (line    7)
   44951 * gimple_build_nop:                      GIMPLE_NOP.         (line    7)
   44952 * gimple_build_omp_atomic_load:          GIMPLE_OMP_ATOMIC_LOAD.
   44953                                                              (line    8)
   44954 * gimple_build_omp_atomic_store:         GIMPLE_OMP_ATOMIC_STORE.
   44955                                                              (line    7)
   44956 * gimple_build_omp_continue:             GIMPLE_OMP_CONTINUE.
   44957                                                              (line    8)
   44958 * gimple_build_omp_critical:             GIMPLE_OMP_CRITICAL.
   44959                                                              (line    8)
   44960 * gimple_build_omp_for:                  GIMPLE_OMP_FOR.     (line    9)
   44961 * gimple_build_omp_master:               GIMPLE_OMP_MASTER.  (line    7)
   44962 * gimple_build_omp_ordered:              GIMPLE_OMP_ORDERED. (line    7)
   44963 * gimple_build_omp_parallel:             GIMPLE_OMP_PARALLEL.
   44964                                                              (line    8)
   44965 * gimple_build_omp_return:               GIMPLE_OMP_RETURN.  (line    7)
   44966 * gimple_build_omp_section:              GIMPLE_OMP_SECTION. (line    7)
   44967 * gimple_build_omp_sections:             GIMPLE_OMP_SECTIONS.
   44968                                                              (line    8)
   44969 * gimple_build_omp_sections_switch:      GIMPLE_OMP_SECTIONS.
   44970                                                              (line   14)
   44971 * gimple_build_omp_single:               GIMPLE_OMP_SINGLE.  (line    8)
   44972 * gimple_build_resx:                     GIMPLE_RESX.        (line    7)
   44973 * gimple_build_return:                   GIMPLE_RETURN.      (line    7)
   44974 * gimple_build_switch:                   GIMPLE_SWITCH.      (line    8)
   44975 * gimple_build_switch_vec:               GIMPLE_SWITCH.      (line   16)
   44976 * gimple_build_try:                      GIMPLE_TRY.         (line    8)
   44977 * gimple_build_wce:                      GIMPLE_WITH_CLEANUP_EXPR.
   44978                                                              (line    7)
   44979 * GIMPLE_CALL:                           GIMPLE_CALL.        (line    6)
   44980 * gimple_call_arg:                       GIMPLE_CALL.        (line   66)
   44981 * gimple_call_arg_ptr:                   GIMPLE_CALL.        (line   71)
   44982 * gimple_call_cannot_inline_p:           GIMPLE_CALL.        (line   91)
   44983 * gimple_call_chain:                     GIMPLE_CALL.        (line   57)
   44984 * gimple_call_copy_skip_args:            GIMPLE_CALL.        (line   98)
   44985 * gimple_call_fn:                        GIMPLE_CALL.        (line   38)
   44986 * gimple_call_fndecl:                    GIMPLE_CALL.        (line   46)
   44987 * gimple_call_lhs:                       GIMPLE_CALL.        (line   29)
   44988 * gimple_call_lhs_ptr:                   GIMPLE_CALL.        (line   32)
   44989 * gimple_call_mark_uninlinable:          GIMPLE_CALL.        (line   88)
   44990 * gimple_call_noreturn_p:                GIMPLE_CALL.        (line   94)
   44991 * gimple_call_num_args:                  GIMPLE_CALL.        (line   63)
   44992 * gimple_call_return_type:               GIMPLE_CALL.        (line   54)
   44993 * gimple_call_set_arg:                   GIMPLE_CALL.        (line   76)
   44994 * gimple_call_set_chain:                 GIMPLE_CALL.        (line   60)
   44995 * gimple_call_set_fn:                    GIMPLE_CALL.        (line   42)
   44996 * gimple_call_set_fndecl:                GIMPLE_CALL.        (line   51)
   44997 * gimple_call_set_lhs:                   GIMPLE_CALL.        (line   35)
   44998 * gimple_call_set_tail:                  GIMPLE_CALL.        (line   80)
   44999 * gimple_call_tail_p:                    GIMPLE_CALL.        (line   85)
   45000 * GIMPLE_CATCH:                          GIMPLE_CATCH.       (line    6)
   45001 * gimple_catch_handler:                  GIMPLE_CATCH.       (line   20)
   45002 * gimple_catch_set_handler:              GIMPLE_CATCH.       (line   28)
   45003 * gimple_catch_set_types:                GIMPLE_CATCH.       (line   24)
   45004 * gimple_catch_types:                    GIMPLE_CATCH.       (line   13)
   45005 * gimple_catch_types_ptr:                GIMPLE_CATCH.       (line   16)
   45006 * gimple_code:                           Manipulating GIMPLE statements.
   45007                                                              (line   15)
   45008 * GIMPLE_COND:                           GIMPLE_COND.        (line    6)
   45009 * gimple_cond_code:                      GIMPLE_COND.        (line   21)
   45010 * gimple_cond_false_label:               GIMPLE_COND.        (line   60)
   45011 * gimple_cond_lhs:                       GIMPLE_COND.        (line   30)
   45012 * gimple_cond_make_false:                GIMPLE_COND.        (line   64)
   45013 * gimple_cond_make_true:                 GIMPLE_COND.        (line   67)
   45014 * gimple_cond_rhs:                       GIMPLE_COND.        (line   38)
   45015 * gimple_cond_set_code:                  GIMPLE_COND.        (line   26)
   45016 * gimple_cond_set_false_label:           GIMPLE_COND.        (line   56)
   45017 * gimple_cond_set_lhs:                   GIMPLE_COND.        (line   34)
   45018 * gimple_cond_set_rhs:                   GIMPLE_COND.        (line   42)
   45019 * gimple_cond_set_true_label:            GIMPLE_COND.        (line   51)
   45020 * gimple_cond_true_label:                GIMPLE_COND.        (line   46)
   45021 * gimple_copy:                           Manipulating GIMPLE statements.
   45022                                                              (line  147)
   45023 * GIMPLE_DEBUG:                          GIMPLE_DEBUG.       (line    6)
   45024 * GIMPLE_DEBUG_BIND:                     GIMPLE_DEBUG.       (line    6)
   45025 * gimple_debug_bind_get_value:           GIMPLE_DEBUG.       (line   48)
   45026 * gimple_debug_bind_get_value_ptr:       GIMPLE_DEBUG.       (line   53)
   45027 * gimple_debug_bind_get_var:             GIMPLE_DEBUG.       (line   45)
   45028 * gimple_debug_bind_has_value_p:         GIMPLE_DEBUG.       (line   70)
   45029 * gimple_debug_bind_p:                   Logical Operators.  (line  164)
   45030 * gimple_debug_bind_reset_value:         GIMPLE_DEBUG.       (line   66)
   45031 * gimple_debug_bind_set_value:           GIMPLE_DEBUG.       (line   62)
   45032 * gimple_debug_bind_set_var:             GIMPLE_DEBUG.       (line   58)
   45033 * gimple_def_ops:                        Manipulating GIMPLE statements.
   45034                                                              (line   94)
   45035 * GIMPLE_EH_FILTER:                      GIMPLE_EH_FILTER.   (line    6)
   45036 * gimple_eh_filter_failure:              GIMPLE_EH_FILTER.   (line   19)
   45037 * gimple_eh_filter_must_not_throw:       GIMPLE_EH_FILTER.   (line   33)
   45038 * gimple_eh_filter_set_failure:          GIMPLE_EH_FILTER.   (line   29)
   45039 * gimple_eh_filter_set_must_not_throw:   GIMPLE_EH_FILTER.   (line   37)
   45040 * gimple_eh_filter_set_types:            GIMPLE_EH_FILTER.   (line   24)
   45041 * gimple_eh_filter_types:                GIMPLE_EH_FILTER.   (line   12)
   45042 * gimple_eh_filter_types_ptr:            GIMPLE_EH_FILTER.   (line   15)
   45043 * gimple_expr_code:                      Manipulating GIMPLE statements.
   45044                                                              (line   31)
   45045 * gimple_expr_type:                      Manipulating GIMPLE statements.
   45046                                                              (line   24)
   45047 * gimple_goto_dest:                      GIMPLE_LABEL.       (line   21)
   45048 * gimple_goto_set_dest:                  GIMPLE_LABEL.       (line   24)
   45049 * gimple_has_mem_ops:                    Manipulating GIMPLE statements.
   45050                                                              (line   72)
   45051 * gimple_has_ops:                        Manipulating GIMPLE statements.
   45052                                                              (line   69)
   45053 * gimple_has_volatile_ops:               Manipulating GIMPLE statements.
   45054                                                              (line  134)
   45055 * GIMPLE_LABEL:                          GIMPLE_LABEL.       (line    6)
   45056 * gimple_label_label:                    GIMPLE_LABEL.       (line   11)
   45057 * gimple_label_set_label:                GIMPLE_LABEL.       (line   14)
   45058 * gimple_loaded_syms:                    Manipulating GIMPLE statements.
   45059                                                              (line  122)
   45060 * gimple_locus:                          Manipulating GIMPLE statements.
   45061                                                              (line   42)
   45062 * gimple_locus_empty_p:                  Manipulating GIMPLE statements.
   45063                                                              (line   48)
   45064 * gimple_modified_p:                     Manipulating GIMPLE statements.
   45065                                                              (line  130)
   45066 * gimple_no_warning_p:                   Manipulating GIMPLE statements.
   45067                                                              (line   51)
   45068 * GIMPLE_NOP:                            GIMPLE_NOP.         (line    6)
   45069 * gimple_nop_p:                          GIMPLE_NOP.         (line   10)
   45070 * gimple_num_ops <1>:                    Manipulating GIMPLE statements.
   45071                                                              (line   75)
   45072 * gimple_num_ops:                        Logical Operators.  (line   78)
   45073 * GIMPLE_OMP_ATOMIC_LOAD:                GIMPLE_OMP_ATOMIC_LOAD.
   45074                                                              (line    6)
   45075 * gimple_omp_atomic_load_lhs:            GIMPLE_OMP_ATOMIC_LOAD.
   45076                                                              (line   17)
   45077 * gimple_omp_atomic_load_rhs:            GIMPLE_OMP_ATOMIC_LOAD.
   45078                                                              (line   24)
   45079 * gimple_omp_atomic_load_set_lhs:        GIMPLE_OMP_ATOMIC_LOAD.
   45080                                                              (line   14)
   45081 * gimple_omp_atomic_load_set_rhs:        GIMPLE_OMP_ATOMIC_LOAD.
   45082                                                              (line   21)
   45083 * GIMPLE_OMP_ATOMIC_STORE:               GIMPLE_OMP_ATOMIC_STORE.
   45084                                                              (line    6)
   45085 * gimple_omp_atomic_store_set_val:       GIMPLE_OMP_ATOMIC_STORE.
   45086                                                              (line   12)
   45087 * gimple_omp_atomic_store_val:           GIMPLE_OMP_ATOMIC_STORE.
   45088                                                              (line   15)
   45089 * gimple_omp_body:                       GIMPLE_OMP_PARALLEL.
   45090                                                              (line   24)
   45091 * GIMPLE_OMP_CONTINUE:                   GIMPLE_OMP_CONTINUE.
   45092                                                              (line    6)
   45093 * gimple_omp_continue_control_def:       GIMPLE_OMP_CONTINUE.
   45094                                                              (line   13)
   45095 * gimple_omp_continue_control_def_ptr:   GIMPLE_OMP_CONTINUE.
   45096                                                              (line   17)
   45097 * gimple_omp_continue_control_use:       GIMPLE_OMP_CONTINUE.
   45098                                                              (line   24)
   45099 * gimple_omp_continue_control_use_ptr:   GIMPLE_OMP_CONTINUE.
   45100                                                              (line   28)
   45101 * gimple_omp_continue_set_control_def:   GIMPLE_OMP_CONTINUE.
   45102                                                              (line   20)
   45103 * gimple_omp_continue_set_control_use:   GIMPLE_OMP_CONTINUE.
   45104                                                              (line   31)
   45105 * GIMPLE_OMP_CRITICAL:                   GIMPLE_OMP_CRITICAL.
   45106                                                              (line    6)
   45107 * gimple_omp_critical_name:              GIMPLE_OMP_CRITICAL.
   45108                                                              (line   13)
   45109 * gimple_omp_critical_name_ptr:          GIMPLE_OMP_CRITICAL.
   45110                                                              (line   16)
   45111 * gimple_omp_critical_set_name:          GIMPLE_OMP_CRITICAL.
   45112                                                              (line   21)
   45113 * GIMPLE_OMP_FOR:                        GIMPLE_OMP_FOR.     (line    6)
   45114 * gimple_omp_for_clauses:                GIMPLE_OMP_FOR.     (line   20)
   45115 * gimple_omp_for_clauses_ptr:            GIMPLE_OMP_FOR.     (line   23)
   45116 * gimple_omp_for_cond:                   GIMPLE_OMP_FOR.     (line   83)
   45117 * gimple_omp_for_final:                  GIMPLE_OMP_FOR.     (line   51)
   45118 * gimple_omp_for_final_ptr:              GIMPLE_OMP_FOR.     (line   54)
   45119 * gimple_omp_for_incr:                   GIMPLE_OMP_FOR.     (line   61)
   45120 * gimple_omp_for_incr_ptr:               GIMPLE_OMP_FOR.     (line   64)
   45121 * gimple_omp_for_index:                  GIMPLE_OMP_FOR.     (line   31)
   45122 * gimple_omp_for_index_ptr:              GIMPLE_OMP_FOR.     (line   34)
   45123 * gimple_omp_for_initial:                GIMPLE_OMP_FOR.     (line   41)
   45124 * gimple_omp_for_initial_ptr:            GIMPLE_OMP_FOR.     (line   44)
   45125 * gimple_omp_for_pre_body:               GIMPLE_OMP_FOR.     (line   70)
   45126 * gimple_omp_for_set_clauses:            GIMPLE_OMP_FOR.     (line   27)
   45127 * gimple_omp_for_set_cond:               GIMPLE_OMP_FOR.     (line   80)
   45128 * gimple_omp_for_set_final:              GIMPLE_OMP_FOR.     (line   58)
   45129 * gimple_omp_for_set_incr:               GIMPLE_OMP_FOR.     (line   67)
   45130 * gimple_omp_for_set_index:              GIMPLE_OMP_FOR.     (line   38)
   45131 * gimple_omp_for_set_initial:            GIMPLE_OMP_FOR.     (line   48)
   45132 * gimple_omp_for_set_pre_body:           GIMPLE_OMP_FOR.     (line   75)
   45133 * GIMPLE_OMP_MASTER:                     GIMPLE_OMP_MASTER.  (line    6)
   45134 * GIMPLE_OMP_ORDERED:                    GIMPLE_OMP_ORDERED. (line    6)
   45135 * GIMPLE_OMP_PARALLEL:                   GIMPLE_OMP_PARALLEL.
   45136                                                              (line    6)
   45137 * gimple_omp_parallel_child_fn:          GIMPLE_OMP_PARALLEL.
   45138                                                              (line   42)
   45139 * gimple_omp_parallel_child_fn_ptr:      GIMPLE_OMP_PARALLEL.
   45140                                                              (line   46)
   45141 * gimple_omp_parallel_clauses:           GIMPLE_OMP_PARALLEL.
   45142                                                              (line   31)
   45143 * gimple_omp_parallel_clauses_ptr:       GIMPLE_OMP_PARALLEL.
   45144                                                              (line   34)
   45145 * gimple_omp_parallel_combined_p:        GIMPLE_OMP_PARALLEL.
   45146                                                              (line   16)
   45147 * gimple_omp_parallel_data_arg:          GIMPLE_OMP_PARALLEL.
   45148                                                              (line   54)
   45149 * gimple_omp_parallel_data_arg_ptr:      GIMPLE_OMP_PARALLEL.
   45150                                                              (line   58)
   45151 * gimple_omp_parallel_set_child_fn:      GIMPLE_OMP_PARALLEL.
   45152                                                              (line   51)
   45153 * gimple_omp_parallel_set_clauses:       GIMPLE_OMP_PARALLEL.
   45154                                                              (line   38)
   45155 * gimple_omp_parallel_set_combined_p:    GIMPLE_OMP_PARALLEL.
   45156                                                              (line   20)
   45157 * gimple_omp_parallel_set_data_arg:      GIMPLE_OMP_PARALLEL.
   45158                                                              (line   62)
   45159 * GIMPLE_OMP_RETURN:                     GIMPLE_OMP_RETURN.  (line    6)
   45160 * gimple_omp_return_nowait_p:            GIMPLE_OMP_RETURN.  (line   14)
   45161 * gimple_omp_return_set_nowait:          GIMPLE_OMP_RETURN.  (line   11)
   45162 * GIMPLE_OMP_SECTION:                    GIMPLE_OMP_SECTION. (line    6)
   45163 * gimple_omp_section_last_p:             GIMPLE_OMP_SECTION. (line   12)
   45164 * gimple_omp_section_set_last:           GIMPLE_OMP_SECTION. (line   16)
   45165 * GIMPLE_OMP_SECTIONS:                   GIMPLE_OMP_SECTIONS.
   45166                                                              (line    6)
   45167 * gimple_omp_sections_clauses:           GIMPLE_OMP_SECTIONS.
   45168                                                              (line   30)
   45169 * gimple_omp_sections_clauses_ptr:       GIMPLE_OMP_SECTIONS.
   45170                                                              (line   33)
   45171 * gimple_omp_sections_control:           GIMPLE_OMP_SECTIONS.
   45172                                                              (line   17)
   45173 * gimple_omp_sections_control_ptr:       GIMPLE_OMP_SECTIONS.
   45174                                                              (line   21)
   45175 * gimple_omp_sections_set_clauses:       GIMPLE_OMP_SECTIONS.
   45176                                                              (line   37)
   45177 * gimple_omp_sections_set_control:       GIMPLE_OMP_SECTIONS.
   45178                                                              (line   26)
   45179 * gimple_omp_set_body:                   GIMPLE_OMP_PARALLEL.
   45180                                                              (line   28)
   45181 * GIMPLE_OMP_SINGLE:                     GIMPLE_OMP_SINGLE.  (line    6)
   45182 * gimple_omp_single_clauses:             GIMPLE_OMP_SINGLE.  (line   14)
   45183 * gimple_omp_single_clauses_ptr:         GIMPLE_OMP_SINGLE.  (line   17)
   45184 * gimple_omp_single_set_clauses:         GIMPLE_OMP_SINGLE.  (line   21)
   45185 * gimple_op <1>:                         Manipulating GIMPLE statements.
   45186                                                              (line   81)
   45187 * gimple_op:                             Logical Operators.  (line   81)
   45188 * gimple_op_ptr:                         Manipulating GIMPLE statements.
   45189                                                              (line   84)
   45190 * gimple_ops <1>:                        Manipulating GIMPLE statements.
   45191                                                              (line   78)
   45192 * gimple_ops:                            Logical Operators.  (line   84)
   45193 * GIMPLE_PHI:                            GIMPLE_PHI.         (line    6)
   45194 * gimple_phi_arg:                        GIMPLE_PHI.         (line   28)
   45195 * gimple_phi_capacity:                   GIMPLE_PHI.         (line   10)
   45196 * gimple_phi_num_args:                   GIMPLE_PHI.         (line   14)
   45197 * gimple_phi_result:                     GIMPLE_PHI.         (line   19)
   45198 * gimple_phi_result_ptr:                 GIMPLE_PHI.         (line   22)
   45199 * gimple_phi_set_arg:                    GIMPLE_PHI.         (line   33)
   45200 * gimple_phi_set_result:                 GIMPLE_PHI.         (line   25)
   45201 * gimple_plf:                            Manipulating GIMPLE statements.
   45202                                                              (line   66)
   45203 * GIMPLE_RESX:                           GIMPLE_RESX.        (line    6)
   45204 * gimple_resx_region:                    GIMPLE_RESX.        (line   13)
   45205 * gimple_resx_set_region:                GIMPLE_RESX.        (line   16)
   45206 * GIMPLE_RETURN:                         GIMPLE_RETURN.      (line    6)
   45207 * gimple_return_retval:                  GIMPLE_RETURN.      (line   10)
   45208 * gimple_return_set_retval:              GIMPLE_RETURN.      (line   14)
   45209 * gimple_seq_add_seq:                    GIMPLE sequences.   (line   32)
   45210 * gimple_seq_add_stmt:                   GIMPLE sequences.   (line   26)
   45211 * gimple_seq_alloc:                      GIMPLE sequences.   (line   62)
   45212 * gimple_seq_copy:                       GIMPLE sequences.   (line   67)
   45213 * gimple_seq_deep_copy:                  GIMPLE sequences.   (line   37)
   45214 * gimple_seq_empty_p:                    GIMPLE sequences.   (line   70)
   45215 * gimple_seq_first:                      GIMPLE sequences.   (line   44)
   45216 * gimple_seq_init:                       GIMPLE sequences.   (line   59)
   45217 * gimple_seq_last:                       GIMPLE sequences.   (line   47)
   45218 * gimple_seq_reverse:                    GIMPLE sequences.   (line   40)
   45219 * gimple_seq_set_first:                  GIMPLE sequences.   (line   55)
   45220 * gimple_seq_set_last:                   GIMPLE sequences.   (line   51)
   45221 * gimple_seq_singleton_p:                GIMPLE sequences.   (line   79)
   45222 * gimple_set_block:                      Manipulating GIMPLE statements.
   45223                                                              (line   39)
   45224 * gimple_set_def_ops:                    Manipulating GIMPLE statements.
   45225                                                              (line   98)
   45226 * gimple_set_has_volatile_ops:           Manipulating GIMPLE statements.
   45227                                                              (line  138)
   45228 * gimple_set_locus:                      Manipulating GIMPLE statements.
   45229                                                              (line   45)
   45230 * gimple_set_op:                         Manipulating GIMPLE statements.
   45231                                                              (line   87)
   45232 * gimple_set_plf:                        Manipulating GIMPLE statements.
   45233                                                              (line   62)
   45234 * gimple_set_use_ops:                    Manipulating GIMPLE statements.
   45235                                                              (line  105)
   45236 * gimple_set_vdef_ops:                   Manipulating GIMPLE statements.
   45237                                                              (line  119)
   45238 * gimple_set_visited:                    Manipulating GIMPLE statements.
   45239                                                              (line   55)
   45240 * gimple_set_vuse_ops:                   Manipulating GIMPLE statements.
   45241                                                              (line  112)
   45242 * gimple_statement_base:                 Tuple representation.
   45243                                                              (line   14)
   45244 * gimple_statement_with_ops:             Tuple representation.
   45245                                                              (line   96)
   45246 * gimple_stored_syms:                    Manipulating GIMPLE statements.
   45247                                                              (line  126)
   45248 * GIMPLE_SWITCH:                         GIMPLE_SWITCH.      (line    6)
   45249 * gimple_switch_default_label:           GIMPLE_SWITCH.      (line   46)
   45250 * gimple_switch_index:                   GIMPLE_SWITCH.      (line   31)
   45251 * gimple_switch_label:                   GIMPLE_SWITCH.      (line   37)
   45252 * gimple_switch_num_labels:              GIMPLE_SWITCH.      (line   22)
   45253 * gimple_switch_set_default_label:       GIMPLE_SWITCH.      (line   50)
   45254 * gimple_switch_set_index:               GIMPLE_SWITCH.      (line   34)
   45255 * gimple_switch_set_label:               GIMPLE_SWITCH.      (line   42)
   45256 * gimple_switch_set_num_labels:          GIMPLE_SWITCH.      (line   27)
   45257 * GIMPLE_TRY:                            GIMPLE_TRY.         (line    6)
   45258 * gimple_try_catch_is_cleanup:           GIMPLE_TRY.         (line   20)
   45259 * gimple_try_cleanup:                    GIMPLE_TRY.         (line   27)
   45260 * gimple_try_eval:                       GIMPLE_TRY.         (line   23)
   45261 * gimple_try_kind:                       GIMPLE_TRY.         (line   16)
   45262 * gimple_try_set_catch_is_cleanup:       GIMPLE_TRY.         (line   32)
   45263 * gimple_try_set_cleanup:                GIMPLE_TRY.         (line   41)
   45264 * gimple_try_set_eval:                   GIMPLE_TRY.         (line   36)
   45265 * gimple_use_ops:                        Manipulating GIMPLE statements.
   45266                                                              (line  101)
   45267 * gimple_vdef_ops:                       Manipulating GIMPLE statements.
   45268                                                              (line  115)
   45269 * gimple_visited_p:                      Manipulating GIMPLE statements.
   45270                                                              (line   58)
   45271 * gimple_vuse_ops:                       Manipulating GIMPLE statements.
   45272                                                              (line  108)
   45273 * gimple_wce_cleanup:                    GIMPLE_WITH_CLEANUP_EXPR.
   45274                                                              (line   11)
   45275 * gimple_wce_cleanup_eh_only:            GIMPLE_WITH_CLEANUP_EXPR.
   45276                                                              (line   18)
   45277 * gimple_wce_set_cleanup:                GIMPLE_WITH_CLEANUP_EXPR.
   45278                                                              (line   15)
   45279 * gimple_wce_set_cleanup_eh_only:        GIMPLE_WITH_CLEANUP_EXPR.
   45280                                                              (line   22)
   45281 * GIMPLE_WITH_CLEANUP_EXPR:              GIMPLE_WITH_CLEANUP_EXPR.
   45282                                                              (line    6)
   45283 * gimplification <1>:                    Gimplification pass.
   45284                                                              (line    6)
   45285 * gimplification:                        Parsing pass.       (line   14)
   45286 * gimplifier:                            Parsing pass.       (line   14)
   45287 * gimplify_assign:                       GIMPLE_ASSIGN.      (line   19)
   45288 * gimplify_expr:                         Gimplification pass.
   45289                                                              (line   18)
   45290 * gimplify_function_tree:                Gimplification pass.
   45291                                                              (line   18)
   45292 * GLOBAL_INIT_PRIORITY:                  Functions for C++.  (line  141)
   45293 * global_regs:                           Register Basics.    (line   59)
   45294 * GO_IF_LEGITIMATE_ADDRESS:              Addressing Modes.   (line   91)
   45295 * GO_IF_MODE_DEPENDENT_ADDRESS:          Addressing Modes.   (line  212)
   45296 * greater than:                          Comparisons.        (line   60)
   45297 * gsi_after_labels:                      Sequence iterators. (line   76)
   45298 * gsi_bb:                                Sequence iterators. (line   83)
   45299 * gsi_commit_edge_inserts:               Sequence iterators. (line  194)
   45300 * gsi_commit_one_edge_insert:            Sequence iterators. (line  190)
   45301 * gsi_end_p:                             Sequence iterators. (line   60)
   45302 * gsi_for_stmt:                          Sequence iterators. (line  157)
   45303 * gsi_insert_after:                      Sequence iterators. (line  147)
   45304 * gsi_insert_before:                     Sequence iterators. (line  136)
   45305 * gsi_insert_on_edge:                    Sequence iterators. (line  174)
   45306 * gsi_insert_on_edge_immediate:          Sequence iterators. (line  185)
   45307 * gsi_insert_seq_after:                  Sequence iterators. (line  154)
   45308 * gsi_insert_seq_before:                 Sequence iterators. (line  143)
   45309 * gsi_insert_seq_on_edge:                Sequence iterators. (line  179)
   45310 * gsi_last:                              Sequence iterators. (line   50)
   45311 * gsi_last_bb:                           Sequence iterators. (line   56)
   45312 * gsi_link_after:                        Sequence iterators. (line  115)
   45313 * gsi_link_before:                       Sequence iterators. (line  105)
   45314 * gsi_link_seq_after:                    Sequence iterators. (line  110)
   45315 * gsi_link_seq_before:                   Sequence iterators. (line   99)
   45316 * gsi_move_after:                        Sequence iterators. (line  161)
   45317 * gsi_move_before:                       Sequence iterators. (line  166)
   45318 * gsi_move_to_bb_end:                    Sequence iterators. (line  171)
   45319 * gsi_next:                              Sequence iterators. (line   66)
   45320 * gsi_one_before_end_p:                  Sequence iterators. (line   63)
   45321 * gsi_prev:                              Sequence iterators. (line   69)
   45322 * gsi_remove:                            Sequence iterators. (line   90)
   45323 * gsi_replace:                           Sequence iterators. (line  130)
   45324 * gsi_seq:                               Sequence iterators. (line   86)
   45325 * gsi_split_seq_after:                   Sequence iterators. (line  120)
   45326 * gsi_split_seq_before:                  Sequence iterators. (line  125)
   45327 * gsi_start:                             Sequence iterators. (line   40)
   45328 * gsi_start_bb:                          Sequence iterators. (line   46)
   45329 * gsi_stmt:                              Sequence iterators. (line   72)
   45330 * gsi_stmt_ptr:                          Sequence iterators. (line   80)
   45331 * gt:                                    Comparisons.        (line   60)
   45332 * gt and attributes:                     Expressions.        (line   64)
   45333 * GT_EXPR:                               Unary and Binary Expressions.
   45334                                                              (line    6)
   45335 * gtu:                                   Comparisons.        (line   64)
   45336 * gtu and attributes:                    Expressions.        (line   64)
   45337 * GTY:                                   Type Information.   (line    6)
   45338 * H in constraint:                       Simple Constraints. (line   98)
   45339 * HAmode:                                Machine Modes.      (line  144)
   45340 * HANDLE_PRAGMA_PACK_WITH_EXPANSION:     Misc.               (line  438)
   45341 * HANDLER:                               Statements for C++. (line    6)
   45342 * HANDLER_BODY:                          Statements for C++. (line    6)
   45343 * HANDLER_PARMS:                         Statements for C++. (line    6)
   45344 * hard registers:                        Regs and Memory.    (line    9)
   45345 * HARD_FRAME_POINTER_IS_ARG_POINTER:     Frame Registers.    (line   58)
   45346 * HARD_FRAME_POINTER_IS_FRAME_POINTER:   Frame Registers.    (line   51)
   45347 * HARD_FRAME_POINTER_REGNUM:             Frame Registers.    (line   20)
   45348 * HARD_REGNO_CALL_PART_CLOBBERED:        Register Basics.    (line   53)
   45349 * HARD_REGNO_CALLER_SAVE_MODE:           Caller Saves.       (line   20)
   45350 * HARD_REGNO_MODE_OK:                    Values in Registers.
   45351                                                              (line   58)
   45352 * HARD_REGNO_NREGS:                      Values in Registers.
   45353                                                              (line   11)
   45354 * HARD_REGNO_NREGS_HAS_PADDING:          Values in Registers.
   45355                                                              (line   25)
   45356 * HARD_REGNO_NREGS_WITH_PADDING:         Values in Registers.
   45357                                                              (line   43)
   45358 * HARD_REGNO_RENAME_OK:                  Values in Registers.
   45359                                                              (line  119)
   45360 * HAS_INIT_SECTION:                      Macros for Initialization.
   45361                                                              (line   19)
   45362 * HAS_LONG_COND_BRANCH:                  Misc.               (line    9)
   45363 * HAS_LONG_UNCOND_BRANCH:                Misc.               (line   18)
   45364 * HAVE_DOS_BASED_FILE_SYSTEM:            Filesystem.         (line   11)
   45365 * HAVE_POST_DECREMENT:                   Addressing Modes.   (line   12)
   45366 * HAVE_POST_INCREMENT:                   Addressing Modes.   (line   11)
   45367 * HAVE_POST_MODIFY_DISP:                 Addressing Modes.   (line   18)
   45368 * HAVE_POST_MODIFY_REG:                  Addressing Modes.   (line   24)
   45369 * HAVE_PRE_DECREMENT:                    Addressing Modes.   (line   10)
   45370 * HAVE_PRE_INCREMENT:                    Addressing Modes.   (line    9)
   45371 * HAVE_PRE_MODIFY_DISP:                  Addressing Modes.   (line   17)
   45372 * HAVE_PRE_MODIFY_REG:                   Addressing Modes.   (line   23)
   45373 * HCmode:                                Machine Modes.      (line  197)
   45374 * HFmode:                                Machine Modes.      (line   58)
   45375 * high:                                  Constants.          (line  109)
   45376 * HImode:                                Machine Modes.      (line   29)
   45377 * HImode, in insn:                       Insns.              (line  272)
   45378 * HONOR_REG_ALLOC_ORDER:                 Allocation Order.   (line   37)
   45379 * host configuration:                    Host Config.        (line    6)
   45380 * host functions:                        Host Common.        (line    6)
   45381 * host hooks:                            Host Common.        (line    6)
   45382 * host makefile fragment:                Host Fragment.      (line    6)
   45383 * HOST_BIT_BUCKET:                       Filesystem.         (line   51)
   45384 * HOST_EXECUTABLE_SUFFIX:                Filesystem.         (line   45)
   45385 * HOST_HOOKS_EXTRA_SIGNALS:              Host Common.        (line   12)
   45386 * HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY:   Host Common.        (line   45)
   45387 * HOST_HOOKS_GT_PCH_GET_ADDRESS:         Host Common.        (line   17)
   45388 * HOST_HOOKS_GT_PCH_USE_ADDRESS:         Host Common.        (line   26)
   45389 * HOST_LACKS_INODE_NUMBERS:              Filesystem.         (line   89)
   45390 * HOST_LONG_FORMAT:                      Host Misc.          (line   45)
   45391 * HOST_LONG_LONG_FORMAT:                 Host Misc.          (line   41)
   45392 * HOST_OBJECT_SUFFIX:                    Filesystem.         (line   40)
   45393 * HOST_PTR_PRINTF:                       Host Misc.          (line   49)
   45394 * HOT_TEXT_SECTION_NAME:                 Sections.           (line   43)
   45395 * HQmode:                                Machine Modes.      (line  107)
   45396 * I in constraint:                       Simple Constraints. (line   81)
   45397 * i in constraint:                       Simple Constraints. (line   70)
   45398 * identifier:                            Identifiers.        (line    6)
   45399 * IDENTIFIER_LENGTH:                     Identifiers.        (line   22)
   45400 * IDENTIFIER_NODE:                       Identifiers.        (line    6)
   45401 * IDENTIFIER_OPNAME_P:                   Identifiers.        (line   27)
   45402 * IDENTIFIER_POINTER:                    Identifiers.        (line   17)
   45403 * IDENTIFIER_TYPENAME_P:                 Identifiers.        (line   33)
   45404 * IEEE 754-2008:                         Decimal float library routines.
   45405                                                              (line    6)
   45406 * IF_COND:                               Statements for C++. (line    6)
   45407 * if_marked:                             GTY Options.        (line  151)
   45408 * IF_STMT:                               Statements for C++. (line    6)
   45409 * if_then_else:                          Comparisons.        (line   80)
   45410 * if_then_else and attributes:           Expressions.        (line   32)
   45411 * if_then_else usage:                    Side Effects.       (line   56)
   45412 * IFCVT_EXTRA_FIELDS:                    Misc.               (line  582)
   45413 * IFCVT_INIT_EXTRA_FIELDS:               Misc.               (line  577)
   45414 * IFCVT_MODIFY_CANCEL:                   Misc.               (line  571)
   45415 * IFCVT_MODIFY_FINAL:                    Misc.               (line  565)
   45416 * IFCVT_MODIFY_INSN:                     Misc.               (line  559)
   45417 * IFCVT_MODIFY_MULTIPLE_TESTS:           Misc.               (line  552)
   45418 * IFCVT_MODIFY_TESTS:                    Misc.               (line  541)
   45419 * IMAGPART_EXPR:                         Unary and Binary Expressions.
   45420                                                              (line    6)
   45421 * Immediate Uses:                        SSA Operands.       (line  274)
   45422 * immediate_operand:                     Machine-Independent Predicates.
   45423                                                              (line   11)
   45424 * IMMEDIATE_PREFIX:                      Instruction Output. (line  155)
   45425 * in_struct:                             Flags.              (line  263)
   45426 * in_struct, in code_label and note:     Flags.              (line   59)
   45427 * in_struct, in insn and jump_insn and call_insn: Flags.     (line   49)
   45428 * in_struct, in insn, jump_insn and call_insn: Flags.        (line  166)
   45429 * in_struct, in mem:                     Flags.              (line   70)
   45430 * in_struct, in subreg:                  Flags.              (line  205)
   45431 * include:                               Including Patterns. (line    6)
   45432 * INCLUDE_DEFAULTS:                      Driver.             (line  344)
   45433 * inclusive-or, bitwise:                 Arithmetic.         (line  163)
   45434 * INCOMING_FRAME_SP_OFFSET:              Frame Layout.       (line  183)
   45435 * INCOMING_REGNO:                        Register Basics.    (line   88)
   45436 * INCOMING_RETURN_ADDR_RTX:              Frame Layout.       (line  139)
   45437 * INCOMING_STACK_BOUNDARY:               Storage Layout.     (line  153)
   45438 * INDEX_REG_CLASS:                       Register Classes.   (line  136)
   45439 * indirect_jump instruction pattern:     Standard Names.     (line 1078)
   45440 * indirect_operand:                      Machine-Independent Predicates.
   45441                                                              (line   71)
   45442 * INDIRECT_REF:                          Storage References. (line    6)
   45443 * INIT_ARRAY_SECTION_ASM_OP:             Sections.           (line  108)
   45444 * INIT_CUMULATIVE_ARGS:                  Register Arguments. (line  149)
   45445 * INIT_CUMULATIVE_INCOMING_ARGS:         Register Arguments. (line  176)
   45446 * INIT_CUMULATIVE_LIBCALL_ARGS:          Register Arguments. (line  170)
   45447 * INIT_ENVIRONMENT:                      Driver.             (line  306)
   45448 * INIT_EXPANDERS:                        Per-Function Data.  (line   39)
   45449 * INIT_EXPR:                             Unary and Binary Expressions.
   45450                                                              (line    6)
   45451 * init_machine_status:                   Per-Function Data.  (line   45)
   45452 * init_one_libfunc:                      Library Calls.      (line   15)
   45453 * INIT_SECTION_ASM_OP <1>:               Macros for Initialization.
   45454                                                              (line   10)
   45455 * INIT_SECTION_ASM_OP:                   Sections.           (line   92)
   45456 * INITIAL_ELIMINATION_OFFSET:            Elimination.        (line   85)
   45457 * INITIAL_FRAME_ADDRESS_RTX:             Frame Layout.       (line   83)
   45458 * INITIAL_FRAME_POINTER_OFFSET:          Elimination.        (line   35)
   45459 * initialization routines:               Initialization.     (line    6)
   45460 * inlining:                              Target Attributes.  (line   95)
   45461 * insert_insn_on_edge:                   Maintaining the CFG.
   45462                                                              (line  118)
   45463 * insn:                                  Insns.              (line   63)
   45464 * insn and /f:                           Flags.              (line  125)
   45465 * insn and /j:                           Flags.              (line  175)
   45466 * insn and /s:                           Flags.              (line   49)
   45467 * insn and /u:                           Flags.              (line   39)
   45468 * insn and /v:                           Flags.              (line   44)
   45469 * insn attributes:                       Insn Attributes.    (line    6)
   45470 * insn canonicalization:                 Insn Canonicalizations.
   45471                                                              (line    6)
   45472 * insn includes:                         Including Patterns. (line    6)
   45473 * insn lengths, computing:               Insn Lengths.       (line    6)
   45474 * insn splitting:                        Insn Splitting.     (line    6)
   45475 * insn-attr.h:                           Defining Attributes.
   45476                                                              (line   24)
   45477 * INSN_ANNULLED_BRANCH_P:                Flags.              (line   39)
   45478 * INSN_CODE:                             Insns.              (line  298)
   45479 * INSN_DELETED_P:                        Flags.              (line   44)
   45480 * INSN_FROM_TARGET_P:                    Flags.              (line   49)
   45481 * insn_list:                             Insns.              (line  545)
   45482 * INSN_REFERENCES_ARE_DELAYED:           Misc.               (line  480)
   45483 * INSN_SETS_ARE_DELAYED:                 Misc.               (line  469)
   45484 * INSN_UID:                              Insns.              (line   23)
   45485 * INSN_VAR_LOCATION:                     Insns.              (line  239)
   45486 * insns:                                 Insns.              (line    6)
   45487 * insns, generating:                     RTL Template.       (line    6)
   45488 * insns, recognizing:                    RTL Template.       (line    6)
   45489 * instruction attributes:                Insn Attributes.    (line    6)
   45490 * instruction latency time:              Processor pipeline description.
   45491                                                              (line    6)
   45492 * instruction patterns:                  Patterns.           (line    6)
   45493 * instruction splitting:                 Insn Splitting.     (line    6)
   45494 * insv instruction pattern:              Standard Names.     (line  893)
   45495 * INT16_TYPE:                            Type Layout.        (line  236)
   45496 * INT32_TYPE:                            Type Layout.        (line  237)
   45497 * INT64_TYPE:                            Type Layout.        (line  238)
   45498 * INT8_TYPE:                             Type Layout.        (line  235)
   45499 * INT_FAST16_TYPE:                       Type Layout.        (line  252)
   45500 * INT_FAST32_TYPE:                       Type Layout.        (line  253)
   45501 * INT_FAST64_TYPE:                       Type Layout.        (line  254)
   45502 * INT_FAST8_TYPE:                        Type Layout.        (line  251)
   45503 * INT_LEAST16_TYPE:                      Type Layout.        (line  244)
   45504 * INT_LEAST32_TYPE:                      Type Layout.        (line  245)
   45505 * INT_LEAST64_TYPE:                      Type Layout.        (line  246)
   45506 * INT_LEAST8_TYPE:                       Type Layout.        (line  243)
   45507 * INT_TYPE_SIZE:                         Type Layout.        (line   12)
   45508 * INTEGER_CST:                           Constant expressions.
   45509                                                              (line    6)
   45510 * INTEGER_TYPE:                          Types.              (line    6)
   45511 * Interdependence of Patterns:           Dependent Patterns. (line    6)
   45512 * interfacing to GCC output:             Interface.          (line    6)
   45513 * interlock delays:                      Processor pipeline description.
   45514                                                              (line    6)
   45515 * intermediate representation lowering:  Parsing pass.       (line   14)
   45516 * INTMAX_TYPE:                           Type Layout.        (line  212)
   45517 * INTPTR_TYPE:                           Type Layout.        (line  259)
   45518 * introduction:                          Top.                (line    6)
   45519 * INVOKE__main:                          Macros for Initialization.
   45520                                                              (line   51)
   45521 * ior:                                   Arithmetic.         (line  163)
   45522 * ior and attributes:                    Expressions.        (line   50)
   45523 * ior, canonicalization of:              Insn Canonicalizations.
   45524                                                              (line   52)
   45525 * iorM3 instruction pattern:             Standard Names.     (line  222)
   45526 * IRA_COVER_CLASSES:                     Register Classes.   (line  564)
   45527 * IRA_HARD_REGNO_ADD_COST_MULTIPLIER:    Allocation Order.   (line   45)
   45528 * IS_ASM_LOGICAL_LINE_SEPARATOR:         Data Output.        (line  132)
   45529 * is_gimple_addressable:                 Logical Operators.  (line  115)
   45530 * is_gimple_asm_val:                     Logical Operators.  (line  119)
   45531 * is_gimple_assign:                      Logical Operators.  (line  151)
   45532 * is_gimple_call:                        Logical Operators.  (line  154)
   45533 * is_gimple_call_addr:                   Logical Operators.  (line  122)
   45534 * is_gimple_constant:                    Logical Operators.  (line  130)
   45535 * is_gimple_debug:                       Logical Operators.  (line  157)
   45536 * is_gimple_ip_invariant:                Logical Operators.  (line  139)
   45537 * is_gimple_ip_invariant_address:        Logical Operators.  (line  144)
   45538 * is_gimple_mem_ref_addr:                Logical Operators.  (line  126)
   45539 * is_gimple_min_invariant:               Logical Operators.  (line  133)
   45540 * is_gimple_omp:                         GIMPLE_OMP_PARALLEL.
   45541                                                              (line   65)
   45542 * is_gimple_val:                         Logical Operators.  (line  109)
   45543 * iterators in .md files:                Iterators.          (line    6)
   45544 * IV analysis on GIMPLE:                 Scalar evolutions.  (line    6)
   45545 * IV analysis on RTL:                    loop-iv.            (line    6)
   45546 * jump:                                  Flags.              (line  314)
   45547 * jump instruction pattern:              Standard Names.     (line  969)
   45548 * jump instruction patterns:             Jump Patterns.      (line    6)
   45549 * jump instructions and set:             Side Effects.       (line   56)
   45550 * jump, in call_insn:                    Flags.              (line  179)
   45551 * jump, in insn:                         Flags.              (line  175)
   45552 * jump, in mem:                          Flags.              (line   79)
   45553 * JUMP_ALIGN:                            Alignment Output.   (line    9)
   45554 * jump_insn:                             Insns.              (line   73)
   45555 * jump_insn and /f:                      Flags.              (line  125)
   45556 * jump_insn and /s:                      Flags.              (line   49)
   45557 * jump_insn and /u:                      Flags.              (line   39)
   45558 * jump_insn and /v:                      Flags.              (line   44)
   45559 * JUMP_LABEL:                            Insns.              (line   80)
   45560 * JUMP_TABLES_IN_TEXT_SECTION:           Sections.           (line  152)
   45561 * Jumps:                                 Jumps.              (line    6)
   45562 * LABEL_ALIGN:                           Alignment Output.   (line   58)
   45563 * LABEL_ALIGN_AFTER_BARRIER:             Alignment Output.   (line   27)
   45564 * LABEL_ALT_ENTRY_P:                     Insns.              (line  140)
   45565 * LABEL_ALTERNATE_NAME:                  Edges.              (line  180)
   45566 * LABEL_DECL:                            Declarations.       (line    6)
   45567 * LABEL_KIND:                            Insns.              (line  140)
   45568 * LABEL_NUSES:                           Insns.              (line  136)
   45569 * LABEL_PRESERVE_P:                      Flags.              (line   59)
   45570 * label_ref:                             Constants.          (line   86)
   45571 * label_ref and /v:                      Flags.              (line   65)
   45572 * label_ref, RTL sharing:                Sharing.            (line   35)
   45573 * LABEL_REF_NONLOCAL_P:                  Flags.              (line   65)
   45574 * lang_hooks.gimplify_expr:              Gimplification pass.
   45575                                                              (line   18)
   45576 * lang_hooks.parse_file:                 Parsing pass.       (line    6)
   45577 * language-dependent trees:              Language-dependent trees.
   45578                                                              (line    6)
   45579 * language-independent intermediate representation: Parsing pass.
   45580                                                              (line   14)
   45581 * large return values:                   Aggregate Return.   (line    6)
   45582 * LARGEST_EXPONENT_IS_NORMAL:            Storage Layout.     (line  470)
   45583 * LAST_STACK_REG:                        Stack Registers.    (line   31)
   45584 * LAST_VIRTUAL_REGISTER:                 Regs and Memory.    (line   51)
   45585 * lceilMN2:                              Standard Names.     (line  624)
   45586 * LCSSA:                                 LCSSA.              (line    6)
   45587 * LD_FINI_SWITCH:                        Macros for Initialization.
   45588                                                              (line   29)
   45589 * LD_INIT_SWITCH:                        Macros for Initialization.
   45590                                                              (line   25)
   45591 * LDD_SUFFIX:                            Macros for Initialization.
   45592                                                              (line  122)
   45593 * le:                                    Comparisons.        (line   76)
   45594 * le and attributes:                     Expressions.        (line   64)
   45595 * LE_EXPR:                               Unary and Binary Expressions.
   45596                                                              (line    6)
   45597 * leaf functions:                        Leaf Functions.     (line    6)
   45598 * leaf_function_p:                       Standard Names.     (line 1040)
   45599 * LEAF_REG_REMAP:                        Leaf Functions.     (line   39)
   45600 * LEAF_REGISTERS:                        Leaf Functions.     (line   25)
   45601 * left rotate:                           Arithmetic.         (line  195)
   45602 * left shift:                            Arithmetic.         (line  173)
   45603 * LEGITIMATE_CONSTANT_P:                 Addressing Modes.   (line  230)
   45604 * LEGITIMATE_PIC_OPERAND_P:              PIC.                (line   32)
   45605 * LEGITIMIZE_RELOAD_ADDRESS:             Addressing Modes.   (line  151)
   45606 * length:                                GTY Options.        (line   50)
   45607 * less than:                             Comparisons.        (line   68)
   45608 * less than or equal:                    Comparisons.        (line   76)
   45609 * leu:                                   Comparisons.        (line   76)
   45610 * leu and attributes:                    Expressions.        (line   64)
   45611 * lfloorMN2:                             Standard Names.     (line  619)
   45612 * LIB2FUNCS_EXTRA:                       Target Fragment.    (line   11)
   45613 * LIB_SPEC:                              Driver.             (line  108)
   45614 * LIBCALL_VALUE:                         Scalar Return.      (line   56)
   45615 * libgcc.a:                              Library Calls.      (line    6)
   45616 * LIBGCC2_CFLAGS:                        Target Fragment.    (line    8)
   45617 * LIBGCC2_HAS_DF_MODE:                   Type Layout.        (line  109)
   45618 * LIBGCC2_HAS_TF_MODE:                   Type Layout.        (line  122)
   45619 * LIBGCC2_HAS_XF_MODE:                   Type Layout.        (line  116)
   45620 * LIBGCC2_LONG_DOUBLE_TYPE_SIZE:         Type Layout.        (line  103)
   45621 * LIBGCC2_UNWIND_ATTRIBUTE:              Misc.               (line  960)
   45622 * LIBGCC_SPEC:                           Driver.             (line  116)
   45623 * library subroutine names:              Library Calls.      (line    6)
   45624 * LIBRARY_PATH_ENV:                      Misc.               (line  520)
   45625 * LIMIT_RELOAD_CLASS:                    Register Classes.   (line  298)
   45626 * Linear loop transformations framework: Lambda.             (line    6)
   45627 * LINK_COMMAND_SPEC:                     Driver.             (line  237)
   45628 * LINK_EH_SPEC:                          Driver.             (line  143)
   45629 * LINK_ELIMINATE_DUPLICATE_LDIRECTORIES: Driver.             (line  247)
   45630 * LINK_GCC_C_SEQUENCE_SPEC:              Driver.             (line  233)
   45631 * LINK_LIBGCC_SPECIAL_1:                 Driver.             (line  228)
   45632 * LINK_SPEC:                             Driver.             (line  101)
   45633 * list:                                  Containers.         (line    6)
   45634 * Liveness representation:               Liveness information.
   45635                                                              (line    6)
   45636 * lo_sum:                                Arithmetic.         (line   24)
   45637 * load address instruction:              Simple Constraints. (line  164)
   45638 * LOAD_EXTEND_OP:                        Misc.               (line   69)
   45639 * load_multiple instruction pattern:     Standard Names.     (line  137)
   45640 * LOCAL_ALIGNMENT:                       Storage Layout.     (line  242)
   45641 * LOCAL_CLASS_P:                         Classes.            (line   73)
   45642 * LOCAL_DECL_ALIGNMENT:                  Storage Layout.     (line  272)
   45643 * LOCAL_INCLUDE_DIR:                     Driver.             (line  313)
   45644 * LOCAL_LABEL_PREFIX:                    Instruction Output. (line  153)
   45645 * LOCAL_REGNO:                           Register Basics.    (line  102)
   45646 * LOG_LINKS:                             Insns.              (line  317)
   45647 * Logical Operators:                     Logical Operators.  (line    6)
   45648 * logical-and, bitwise:                  Arithmetic.         (line  158)
   45649 * logM2 instruction pattern:             Standard Names.     (line  532)
   45650 * LONG_ACCUM_TYPE_SIZE:                  Type Layout.        (line   93)
   45651 * LONG_DOUBLE_TYPE_SIZE:                 Type Layout.        (line   58)
   45652 * LONG_FRACT_TYPE_SIZE:                  Type Layout.        (line   73)
   45653 * LONG_LONG_ACCUM_TYPE_SIZE:             Type Layout.        (line   98)
   45654 * LONG_LONG_FRACT_TYPE_SIZE:             Type Layout.        (line   78)
   45655 * LONG_LONG_TYPE_SIZE:                   Type Layout.        (line   33)
   45656 * LONG_TYPE_SIZE:                        Type Layout.        (line   22)
   45657 * longjmp and automatic variables:       Interface.          (line   52)
   45658 * Loop analysis:                         Loop representation.
   45659                                                              (line    6)
   45660 * Loop manipulation:                     Loop manipulation.  (line    6)
   45661 * Loop querying:                         Loop querying.      (line    6)
   45662 * Loop representation:                   Loop representation.
   45663                                                              (line    6)
   45664 * Loop-closed SSA form:                  LCSSA.              (line    6)
   45665 * LOOP_ALIGN:                            Alignment Output.   (line   41)
   45666 * LOOP_EXPR:                             Unary and Binary Expressions.
   45667                                                              (line    6)
   45668 * looping instruction patterns:          Looping Patterns.   (line    6)
   45669 * lowering, language-dependent intermediate representation: Parsing pass.
   45670                                                              (line   14)
   45671 * lrintMN2:                              Standard Names.     (line  609)
   45672 * lroundMN2:                             Standard Names.     (line  614)
   45673 * LSHIFT_EXPR:                           Unary and Binary Expressions.
   45674                                                              (line    6)
   45675 * lshiftrt:                              Arithmetic.         (line  190)
   45676 * lshiftrt and attributes:               Expressions.        (line   64)
   45677 * lshrM3 instruction pattern:            Standard Names.     (line  468)
   45678 * lt:                                    Comparisons.        (line   68)
   45679 * lt and attributes:                     Expressions.        (line   64)
   45680 * LT_EXPR:                               Unary and Binary Expressions.
   45681                                                              (line    6)
   45682 * LTGT_EXPR:                             Unary and Binary Expressions.
   45683                                                              (line    6)
   45684 * lto:                                   LTO.                (line    6)
   45685 * ltrans:                                LTO.                (line    6)
   45686 * ltu:                                   Comparisons.        (line   68)
   45687 * m in constraint:                       Simple Constraints. (line   17)
   45688 * machine attributes:                    Target Attributes.  (line    6)
   45689 * machine description macros:            Target Macros.      (line    6)
   45690 * machine descriptions:                  Machine Desc.       (line    6)
   45691 * machine mode conversions:              Conversions.        (line    6)
   45692 * machine modes:                         Machine Modes.      (line    6)
   45693 * machine specific constraints:          Machine Constraints.
   45694                                                              (line    6)
   45695 * machine-independent predicates:        Machine-Independent Predicates.
   45696                                                              (line    6)
   45697 * macros, target description:            Target Macros.      (line    6)
   45698 * maddMN4 instruction pattern:           Standard Names.     (line  391)
   45699 * MAKE_DECL_ONE_ONLY:                    Label Output.       (line  238)
   45700 * make_phi_node:                         GIMPLE_PHI.         (line    7)
   45701 * make_safe_from:                        Expander Definitions.
   45702                                                              (line  148)
   45703 * makefile fragment:                     Fragments.          (line    6)
   45704 * makefile targets:                      Makefile.           (line    6)
   45705 * MALLOC_ABI_ALIGNMENT:                  Storage Layout.     (line  167)
   45706 * Manipulating GIMPLE statements:        Manipulating GIMPLE statements.
   45707                                                              (line    6)
   45708 * mark_hook:                             GTY Options.        (line  166)
   45709 * marking roots:                         GGC Roots.          (line    6)
   45710 * MASK_RETURN_ADDR:                      Exception Region Output.
   45711                                                              (line   35)
   45712 * match_dup <1>:                         define_peephole2.   (line   28)
   45713 * match_dup:                             RTL Template.       (line   73)
   45714 * match_dup and attributes:              Insn Lengths.       (line   16)
   45715 * match_op_dup:                          RTL Template.       (line  163)
   45716 * match_operand:                         RTL Template.       (line   16)
   45717 * match_operand and attributes:          Expressions.        (line   55)
   45718 * match_operator:                        RTL Template.       (line   95)
   45719 * match_par_dup:                         RTL Template.       (line  219)
   45720 * match_parallel:                        RTL Template.       (line  172)
   45721 * match_scratch <1>:                     define_peephole2.   (line   28)
   45722 * match_scratch:                         RTL Template.       (line   58)
   45723 * matching constraint:                   Simple Constraints. (line  142)
   45724 * matching operands:                     Output Template.    (line   49)
   45725 * math library:                          Soft float library routines.
   45726                                                              (line    6)
   45727 * math, in RTL:                          Arithmetic.         (line    6)
   45728 * MATH_LIBRARY:                          Misc.               (line  513)
   45729 * matherr:                               Library Calls.      (line   44)
   45730 * MAX_BITS_PER_WORD:                     Storage Layout.     (line   54)
   45731 * MAX_CONDITIONAL_EXECUTE:               Misc.               (line  535)
   45732 * MAX_FIXED_MODE_SIZE:                   Storage Layout.     (line  417)
   45733 * MAX_MOVE_MAX:                          Misc.               (line  120)
   45734 * MAX_OFILE_ALIGNMENT:                   Storage Layout.     (line  204)
   45735 * MAX_REGS_PER_ADDRESS:                  Addressing Modes.   (line   43)
   45736 * MAX_STACK_ALIGNMENT:                   Storage Layout.     (line  197)
   45737 * maxM3 instruction pattern:             Standard Names.     (line  261)
   45738 * may_trap_p, tree_could_trap_p:         Edges.              (line  115)
   45739 * maybe_undef:                           GTY Options.        (line  174)
   45740 * mcount:                                Profiling.          (line   12)
   45741 * MD_CAN_REDIRECT_BRANCH:                Misc.               (line  682)
   45742 * MD_EXEC_PREFIX:                        Driver.             (line  268)
   45743 * MD_FALLBACK_FRAME_STATE_FOR:           Exception Handling. (line   98)
   45744 * MD_HANDLE_UNWABI:                      Exception Handling. (line  118)
   45745 * MD_STARTFILE_PREFIX:                   Driver.             (line  296)
   45746 * MD_STARTFILE_PREFIX_1:                 Driver.             (line  301)
   45747 * MD_UNWIND_SUPPORT:                     Exception Handling. (line   94)
   45748 * mem:                                   Regs and Memory.    (line  374)
   45749 * mem and /c:                            Flags.              (line   99)
   45750 * mem and /f:                            Flags.              (line  103)
   45751 * mem and /i:                            Flags.              (line   85)
   45752 * mem and /j:                            Flags.              (line   79)
   45753 * mem and /s:                            Flags.              (line   70)
   45754 * mem and /u:                            Flags.              (line  152)
   45755 * mem and /v:                            Flags.              (line   94)
   45756 * mem, RTL sharing:                      Sharing.            (line   40)
   45757 * MEM_ADDR_SPACE:                        Special Accessors.  (line   39)
   45758 * MEM_ALIAS_SET:                         Special Accessors.  (line    9)
   45759 * MEM_ALIGN:                             Special Accessors.  (line   36)
   45760 * MEM_EXPR:                              Special Accessors.  (line   20)
   45761 * MEM_IN_STRUCT_P:                       Flags.              (line   70)
   45762 * MEM_KEEP_ALIAS_SET_P:                  Flags.              (line   79)
   45763 * MEM_NOTRAP_P:                          Flags.              (line   99)
   45764 * MEM_OFFSET:                            Special Accessors.  (line   28)
   45765 * MEM_POINTER:                           Flags.              (line  103)
   45766 * MEM_READONLY_P:                        Flags.              (line  152)
   45767 * MEM_REF:                               Storage References. (line    6)
   45768 * MEM_SCALAR_P:                          Flags.              (line   85)
   45769 * MEM_SIZE:                              Special Accessors.  (line   31)
   45770 * MEM_VOLATILE_P:                        Flags.              (line   94)
   45771 * MEMBER_TYPE_FORCES_BLK:                Storage Layout.     (line  397)
   45772 * memory model:                          Memory model.       (line    6)
   45773 * memory reference, nonoffsettable:      Simple Constraints. (line  256)
   45774 * memory references in constraints:      Simple Constraints. (line   17)
   45775 * memory_barrier instruction pattern:    Standard Names.     (line 1422)
   45776 * MEMORY_MOVE_COST:                      Costs.              (line   54)
   45777 * memory_operand:                        Machine-Independent Predicates.
   45778                                                              (line   58)
   45779 * METHOD_TYPE:                           Types.              (line    6)
   45780 * MIN_UNITS_PER_WORD:                    Storage Layout.     (line   64)
   45781 * MINIMUM_ALIGNMENT:                     Storage Layout.     (line  285)
   45782 * MINIMUM_ATOMIC_ALIGNMENT:              Storage Layout.     (line  175)
   45783 * minM3 instruction pattern:             Standard Names.     (line  261)
   45784 * minus:                                 Arithmetic.         (line   36)
   45785 * minus and attributes:                  Expressions.        (line   64)
   45786 * minus, canonicalization of:            Insn Canonicalizations.
   45787                                                              (line   27)
   45788 * MINUS_EXPR:                            Unary and Binary Expressions.
   45789                                                              (line    6)
   45790 * MIPS coprocessor-definition macros:    MIPS Coprocessors.  (line    6)
   45791 * mod:                                   Arithmetic.         (line  136)
   45792 * mod and attributes:                    Expressions.        (line   64)
   45793 * mode classes:                          Machine Modes.      (line  219)
   45794 * mode iterators in .md files:           Mode Iterators.     (line    6)
   45795 * mode switching:                        Mode Switching.     (line    6)
   45796 * MODE_ACCUM:                            Machine Modes.      (line  249)
   45797 * MODE_AFTER:                            Mode Switching.     (line   49)
   45798 * MODE_BASE_REG_CLASS:                   Register Classes.   (line  114)
   45799 * MODE_BASE_REG_REG_CLASS:               Register Classes.   (line  120)
   45800 * MODE_CC <1>:                           MODE_CC Condition Codes.
   45801                                                              (line    6)
   45802 * MODE_CC:                               Machine Modes.      (line  268)
   45803 * MODE_CODE_BASE_REG_CLASS:              Register Classes.   (line  127)
   45804 * MODE_COMPLEX_FLOAT:                    Machine Modes.      (line  260)
   45805 * MODE_COMPLEX_INT:                      Machine Modes.      (line  257)
   45806 * MODE_DECIMAL_FLOAT:                    Machine Modes.      (line  237)
   45807 * MODE_ENTRY:                            Mode Switching.     (line   54)
   45808 * MODE_EXIT:                             Mode Switching.     (line   60)
   45809 * MODE_FLOAT:                            Machine Modes.      (line  233)
   45810 * MODE_FRACT:                            Machine Modes.      (line  241)
   45811 * MODE_FUNCTION:                         Machine Modes.      (line  264)
   45812 * MODE_INT:                              Machine Modes.      (line  225)
   45813 * MODE_NEEDED:                           Mode Switching.     (line   42)
   45814 * MODE_PARTIAL_INT:                      Machine Modes.      (line  229)
   45815 * MODE_PRIORITY_TO_MODE:                 Mode Switching.     (line   66)
   45816 * MODE_RANDOM:                           Machine Modes.      (line  273)
   45817 * MODE_UACCUM:                           Machine Modes.      (line  253)
   45818 * MODE_UFRACT:                           Machine Modes.      (line  245)
   45819 * MODES_TIEABLE_P:                       Values in Registers.
   45820                                                              (line  129)
   45821 * modifiers in constraints:              Modifiers.          (line    6)
   45822 * MODIFY_EXPR:                           Unary and Binary Expressions.
   45823                                                              (line    6)
   45824 * MODIFY_JNI_METHOD_CALL:                Misc.               (line  760)
   45825 * modM3 instruction pattern:             Standard Names.     (line  222)
   45826 * modulo scheduling:                     RTL passes.         (line  131)
   45827 * MOVE_BY_PIECES_P:                      Costs.              (line  165)
   45828 * MOVE_MAX:                              Misc.               (line  115)
   45829 * MOVE_MAX_PIECES:                       Costs.              (line  171)
   45830 * MOVE_RATIO:                            Costs.              (line  149)
   45831 * movM instruction pattern:              Standard Names.     (line   11)
   45832 * movmemM instruction pattern:           Standard Names.     (line  681)
   45833 * movmisalignM instruction pattern:      Standard Names.     (line  126)
   45834 * movMODEcc instruction pattern:         Standard Names.     (line  904)
   45835 * movstr instruction pattern:            Standard Names.     (line  716)
   45836 * movstrictM instruction pattern:        Standard Names.     (line  120)
   45837 * msubMN4 instruction pattern:           Standard Names.     (line  414)
   45838 * mulhisi3 instruction pattern:          Standard Names.     (line  367)
   45839 * mulM3 instruction pattern:             Standard Names.     (line  222)
   45840 * mulqihi3 instruction pattern:          Standard Names.     (line  371)
   45841 * mulsidi3 instruction pattern:          Standard Names.     (line  371)
   45842 * mult:                                  Arithmetic.         (line   92)
   45843 * mult and attributes:                   Expressions.        (line   64)
   45844 * mult, canonicalization of:             Insn Canonicalizations.
   45845                                                              (line   27)
   45846 * MULT_EXPR:                             Unary and Binary Expressions.
   45847                                                              (line    6)
   45848 * MULTILIB_DEFAULTS:                     Driver.             (line  253)
   45849 * MULTILIB_DIRNAMES:                     Target Fragment.    (line   64)
   45850 * MULTILIB_EXCEPTIONS:                   Target Fragment.    (line   84)
   45851 * MULTILIB_EXTRA_OPTS:                   Target Fragment.    (line   96)
   45852 * MULTILIB_MATCHES:                      Target Fragment.    (line   77)
   45853 * MULTILIB_OPTIONS:                      Target Fragment.    (line   44)
   45854 * multiple alternative constraints:      Multi-Alternative.  (line    6)
   45855 * MULTIPLE_SYMBOL_SPACES:                Misc.               (line  493)
   45856 * multiplication:                        Arithmetic.         (line   92)
   45857 * multiplication with signed saturation: Arithmetic.         (line   92)
   45858 * multiplication with unsigned saturation: Arithmetic.       (line   92)
   45859 * n in constraint:                       Simple Constraints. (line   75)
   45860 * N_REG_CLASSES:                         Register Classes.   (line   78)
   45861 * name:                                  Identifiers.        (line    6)
   45862 * named address spaces:                  Named Address Spaces.
   45863                                                              (line    6)
   45864 * named patterns and conditions:         Patterns.           (line   47)
   45865 * names, pattern:                        Standard Names.     (line    6)
   45866 * namespace, scope:                      Namespaces.         (line    6)
   45867 * NAMESPACE_DECL <1>:                    Namespaces.         (line    6)
   45868 * NAMESPACE_DECL:                        Declarations.       (line    6)
   45869 * NATIVE_SYSTEM_HEADER_DIR:              Target Fragment.    (line  103)
   45870 * ne:                                    Comparisons.        (line   56)
   45871 * ne and attributes:                     Expressions.        (line   64)
   45872 * NE_EXPR:                               Unary and Binary Expressions.
   45873                                                              (line    6)
   45874 * nearbyintM2 instruction pattern:       Standard Names.     (line  591)
   45875 * neg:                                   Arithmetic.         (line   81)
   45876 * neg and attributes:                    Expressions.        (line   64)
   45877 * neg, canonicalization of:              Insn Canonicalizations.
   45878                                                              (line   27)
   45879 * NEGATE_EXPR:                           Unary and Binary Expressions.
   45880                                                              (line    6)
   45881 * negation:                              Arithmetic.         (line   81)
   45882 * negation with signed saturation:       Arithmetic.         (line   81)
   45883 * negation with unsigned saturation:     Arithmetic.         (line   81)
   45884 * negM2 instruction pattern:             Standard Names.     (line  476)
   45885 * nested functions, trampolines for:     Trampolines.        (line    6)
   45886 * nested_ptr:                            GTY Options.        (line  181)
   45887 * next_bb, prev_bb, FOR_EACH_BB:         Basic Blocks.       (line   10)
   45888 * NEXT_INSN:                             Insns.              (line   30)
   45889 * NEXT_OBJC_RUNTIME:                     Library Calls.      (line   80)
   45890 * nil:                                   RTL Objects.        (line   73)
   45891 * NM_FLAGS:                              Macros for Initialization.
   45892                                                              (line  111)
   45893 * NO_DBX_BNSYM_ENSYM:                    DBX Hooks.          (line   39)
   45894 * NO_DBX_FUNCTION_END:                   DBX Hooks.          (line   33)
   45895 * NO_DBX_GCC_MARKER:                     File Names and DBX. (line   28)
   45896 * NO_DBX_MAIN_SOURCE_DIRECTORY:          File Names and DBX. (line   23)
   45897 * NO_DOLLAR_IN_LABEL:                    Misc.               (line  457)
   45898 * NO_DOT_IN_LABEL:                       Misc.               (line  463)
   45899 * NO_FUNCTION_CSE:                       Costs.              (line  261)
   45900 * NO_IMPLICIT_EXTERN_C:                  Misc.               (line  376)
   45901 * NO_PROFILE_COUNTERS:                   Profiling.          (line   28)
   45902 * NO_REGS:                               Register Classes.   (line   17)
   45903 * NON_LVALUE_EXPR:                       Unary and Binary Expressions.
   45904                                                              (line    6)
   45905 * nondeterministic finite state automaton: Processor pipeline description.
   45906                                                              (line  301)
   45907 * nonimmediate_operand:                  Machine-Independent Predicates.
   45908                                                              (line  101)
   45909 * nonlocal goto handler:                 Edges.              (line  171)
   45910 * nonlocal_goto instruction pattern:     Standard Names.     (line 1262)
   45911 * nonlocal_goto_receiver instruction pattern: Standard Names.
   45912                                                              (line 1279)
   45913 * nonmemory_operand:                     Machine-Independent Predicates.
   45914                                                              (line   97)
   45915 * nonoffsettable memory reference:       Simple Constraints. (line  256)
   45916 * nop instruction pattern:               Standard Names.     (line 1073)
   45917 * NOP_EXPR:                              Unary and Binary Expressions.
   45918                                                              (line    6)
   45919 * normal predicates:                     Predicates.         (line   31)
   45920 * not:                                   Arithmetic.         (line  154)
   45921 * not and attributes:                    Expressions.        (line   50)
   45922 * not equal:                             Comparisons.        (line   56)
   45923 * not, canonicalization of:              Insn Canonicalizations.
   45924                                                              (line   27)
   45925 * note:                                  Insns.              (line  168)
   45926 * note and /i:                           Flags.              (line   59)
   45927 * note and /v:                           Flags.              (line   44)
   45928 * NOTE_INSN_BASIC_BLOCK, CODE_LABEL, notes: Basic Blocks.    (line   41)
   45929 * NOTE_INSN_BLOCK_BEG:                   Insns.              (line  193)
   45930 * NOTE_INSN_BLOCK_END:                   Insns.              (line  193)
   45931 * NOTE_INSN_DELETED:                     Insns.              (line  183)
   45932 * NOTE_INSN_DELETED_LABEL:               Insns.              (line  188)
   45933 * NOTE_INSN_EH_REGION_BEG:               Insns.              (line  199)
   45934 * NOTE_INSN_EH_REGION_END:               Insns.              (line  199)
   45935 * NOTE_INSN_FUNCTION_BEG:                Insns.              (line  223)
   45936 * NOTE_INSN_LOOP_BEG:                    Insns.              (line  207)
   45937 * NOTE_INSN_LOOP_CONT:                   Insns.              (line  213)
   45938 * NOTE_INSN_LOOP_END:                    Insns.              (line  207)
   45939 * NOTE_INSN_LOOP_VTOP:                   Insns.              (line  217)
   45940 * NOTE_INSN_VAR_LOCATION:                Insns.              (line  227)
   45941 * NOTE_LINE_NUMBER:                      Insns.              (line  168)
   45942 * NOTE_SOURCE_FILE:                      Insns.              (line  168)
   45943 * NOTE_VAR_LOCATION:                     Insns.              (line  227)
   45944 * NOTICE_UPDATE_CC:                      CC0 Condition Codes.
   45945                                                              (line   31)
   45946 * NUM_MACHINE_MODES:                     Machine Modes.      (line  286)
   45947 * NUM_MODES_FOR_MODE_SWITCHING:          Mode Switching.     (line   30)
   45948 * Number of iterations analysis:         Number of iterations.
   45949                                                              (line    6)
   45950 * o in constraint:                       Simple Constraints. (line   23)
   45951 * OBJC_GEN_METHOD_LABEL:                 Label Output.       (line  440)
   45952 * OBJC_JBLEN:                            Misc.               (line  955)
   45953 * OBJECT_FORMAT_COFF:                    Macros for Initialization.
   45954                                                              (line   97)
   45955 * OFFSET_TYPE:                           Types.              (line    6)
   45956 * offsettable address:                   Simple Constraints. (line   23)
   45957 * OImode:                                Machine Modes.      (line   51)
   45958 * Omega a solver for linear programming problems: Omega.     (line    6)
   45959 * OMP_ATOMIC:                            OpenMP.             (line    6)
   45960 * OMP_CLAUSE:                            OpenMP.             (line    6)
   45961 * OMP_CONTINUE:                          OpenMP.             (line    6)
   45962 * OMP_CRITICAL:                          OpenMP.             (line    6)
   45963 * OMP_FOR:                               OpenMP.             (line    6)
   45964 * OMP_MASTER:                            OpenMP.             (line    6)
   45965 * OMP_ORDERED:                           OpenMP.             (line    6)
   45966 * OMP_PARALLEL:                          OpenMP.             (line    6)
   45967 * OMP_RETURN:                            OpenMP.             (line    6)
   45968 * OMP_SECTION:                           OpenMP.             (line    6)
   45969 * OMP_SECTIONS:                          OpenMP.             (line    6)
   45970 * OMP_SINGLE:                            OpenMP.             (line    6)
   45971 * one_cmplM2 instruction pattern:        Standard Names.     (line  678)
   45972 * operand access:                        Accessors.          (line    6)
   45973 * Operand Access Routines:               SSA Operands.       (line  119)
   45974 * operand constraints:                   Constraints.        (line    6)
   45975 * Operand Iterators:                     SSA Operands.       (line  119)
   45976 * operand predicates:                    Predicates.         (line    6)
   45977 * operand substitution:                  Output Template.    (line    6)
   45978 * operands <1>:                          Patterns.           (line   53)
   45979 * operands:                              SSA Operands.       (line    6)
   45980 * Operands:                              Operands.           (line    6)
   45981 * operator predicates:                   Predicates.         (line    6)
   45982 * optc-gen.awk:                          Options.            (line    6)
   45983 * Optimization infrastructure for GIMPLE: Tree SSA.          (line    6)
   45984 * OPTIMIZE_MODE_SWITCHING:               Mode Switching.     (line    9)
   45985 * option specification files:            Options.            (line    6)
   45986 * OPTION_DEFAULT_SPECS:                  Driver.             (line   26)
   45987 * optional hardware or system features:  Run-time Target.    (line   59)
   45988 * options, directory search:             Including Patterns. (line   44)
   45989 * order of register allocation:          Allocation Order.   (line    6)
   45990 * ordered_comparison_operator:           Machine-Independent Predicates.
   45991                                                              (line  116)
   45992 * ORDERED_EXPR:                          Unary and Binary Expressions.
   45993                                                              (line    6)
   45994 * Ordering of Patterns:                  Pattern Ordering.   (line    6)
   45995 * ORIGINAL_REGNO:                        Special Accessors.  (line   44)
   45996 * other register constraints:            Simple Constraints. (line  173)
   45997 * OUTGOING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   74)
   45998 * OUTGOING_REGNO:                        Register Basics.    (line   95)
   45999 * output of assembler code:              File Framework.     (line    6)
   46000 * output statements:                     Output Statement.   (line    6)
   46001 * output templates:                      Output Template.    (line    6)
   46002 * OUTPUT_ADDR_CONST_EXTRA:               Data Output.        (line   51)
   46003 * output_asm_insn:                       Output Statement.   (line   53)
   46004 * OUTPUT_QUOTED_STRING:                  File Framework.     (line  102)
   46005 * OVERLAPPING_REGISTER_NAMES:            Instruction Output. (line   21)
   46006 * OVERLOAD:                              Functions for C++.  (line    6)
   46007 * OVERRIDE_ABI_FORMAT:                   Register Arguments. (line  140)
   46008 * OVL_CURRENT:                           Functions for C++.  (line    6)
   46009 * OVL_NEXT:                              Functions for C++.  (line    6)
   46010 * p in constraint:                       Simple Constraints. (line  164)
   46011 * PAD_VARARGS_DOWN:                      Register Arguments. (line  220)
   46012 * parallel:                              Side Effects.       (line  204)
   46013 * param_is:                              GTY Options.        (line  109)
   46014 * parameters, c++ abi:                   C++ ABI.            (line    6)
   46015 * parameters, miscellaneous:             Misc.               (line    6)
   46016 * parameters, precompiled headers:       PCH Target.         (line    6)
   46017 * paramN_is:                             GTY Options.        (line  127)
   46018 * parity:                                Arithmetic.         (line  237)
   46019 * parityM2 instruction pattern:          Standard Names.     (line  672)
   46020 * PARM_BOUNDARY:                         Storage Layout.     (line  132)
   46021 * PARM_DECL:                             Declarations.       (line    6)
   46022 * PARSE_LDD_OUTPUT:                      Macros for Initialization.
   46023                                                              (line  127)
   46024 * passes and files of the compiler:      Passes.             (line    6)
   46025 * passing arguments:                     Interface.          (line   36)
   46026 * PATH_SEPARATOR:                        Filesystem.         (line   31)
   46027 * PATTERN:                               Insns.              (line  288)
   46028 * pattern conditions:                    Patterns.           (line   43)
   46029 * pattern names:                         Standard Names.     (line    6)
   46030 * Pattern Ordering:                      Pattern Ordering.   (line    6)
   46031 * patterns:                              Patterns.           (line    6)
   46032 * pc:                                    Regs and Memory.    (line  361)
   46033 * pc and attributes:                     Insn Lengths.       (line   20)
   46034 * pc, RTL sharing:                       Sharing.            (line   25)
   46035 * PC_REGNUM:                             Register Basics.    (line  109)
   46036 * pc_rtx:                                Regs and Memory.    (line  366)
   46037 * PCC_BITFIELD_TYPE_MATTERS:             Storage Layout.     (line  311)
   46038 * PCC_STATIC_STRUCT_RETURN:              Aggregate Return.   (line   65)
   46039 * PDImode:                               Machine Modes.      (line   40)
   46040 * peephole optimization, RTL representation: Side Effects.   (line  238)
   46041 * peephole optimizer definitions:        Peephole Definitions.
   46042                                                              (line    6)
   46043 * per-function data:                     Per-Function Data.  (line    6)
   46044 * percent sign:                          Output Template.    (line    6)
   46045 * PHI nodes:                             SSA.                (line   31)
   46046 * PHI_ARG_DEF:                           SSA.                (line   71)
   46047 * PHI_ARG_EDGE:                          SSA.                (line   68)
   46048 * PHI_ARG_ELT:                           SSA.                (line   63)
   46049 * PHI_NUM_ARGS:                          SSA.                (line   59)
   46050 * PHI_RESULT:                            SSA.                (line   56)
   46051 * PIC:                                   PIC.                (line    6)
   46052 * PIC_OFFSET_TABLE_REG_CALL_CLOBBERED:   PIC.                (line   26)
   46053 * PIC_OFFSET_TABLE_REGNUM:               PIC.                (line   16)
   46054 * pipeline hazard recognizer:            Processor pipeline description.
   46055                                                              (line    6)
   46056 * Plugins:                               Plugins.            (line    6)
   46057 * plus:                                  Arithmetic.         (line   14)
   46058 * plus and attributes:                   Expressions.        (line   64)
   46059 * plus, canonicalization of:             Insn Canonicalizations.
   46060                                                              (line   27)
   46061 * PLUS_EXPR:                             Unary and Binary Expressions.
   46062                                                              (line    6)
   46063 * Pmode:                                 Misc.               (line  344)
   46064 * pmode_register_operand:                Machine-Independent Predicates.
   46065                                                              (line   35)
   46066 * pointer:                               Types.              (line    6)
   46067 * POINTER_PLUS_EXPR:                     Unary and Binary Expressions.
   46068                                                              (line    6)
   46069 * POINTER_SIZE:                          Storage Layout.     (line   70)
   46070 * POINTER_TYPE:                          Types.              (line    6)
   46071 * POINTERS_EXTEND_UNSIGNED:              Storage Layout.     (line   76)
   46072 * pop_operand:                           Machine-Independent Predicates.
   46073                                                              (line   88)
   46074 * popcount:                              Arithmetic.         (line  233)
   46075 * popcountM2 instruction pattern:        Standard Names.     (line  666)
   46076 * portability:                           Portability.        (line    6)
   46077 * position independent code:             PIC.                (line    6)
   46078 * post_dec:                              Incdec.             (line   25)
   46079 * post_inc:                              Incdec.             (line   30)
   46080 * post_modify:                           Incdec.             (line   33)
   46081 * POSTDECREMENT_EXPR:                    Unary and Binary Expressions.
   46082                                                              (line    6)
   46083 * POSTINCREMENT_EXPR:                    Unary and Binary Expressions.
   46084                                                              (line    6)
   46085 * POWI_MAX_MULTS:                        Misc.               (line  823)
   46086 * powM3 instruction pattern:             Standard Names.     (line  540)
   46087 * pragma:                                Misc.               (line  381)
   46088 * pre_dec:                               Incdec.             (line    8)
   46089 * PRE_GCC3_DWARF_FRAME_REGISTERS:        Frame Registers.    (line  127)
   46090 * pre_inc:                               Incdec.             (line   22)
   46091 * pre_modify:                            Incdec.             (line   51)
   46092 * PREDECREMENT_EXPR:                     Unary and Binary Expressions.
   46093                                                              (line    6)
   46094 * predefined macros:                     Run-time Target.    (line    6)
   46095 * predicates:                            Predicates.         (line    6)
   46096 * predicates and machine modes:          Predicates.         (line   31)
   46097 * predication <1>:                       Cond Exec Macros.   (line    6)
   46098 * predication:                           Conditional Execution.
   46099                                                              (line    6)
   46100 * predict.def:                           Profile information.
   46101                                                              (line   24)
   46102 * PREFERRED_DEBUGGING_TYPE:              All Debuggers.      (line   42)
   46103 * PREFERRED_OUTPUT_RELOAD_CLASS:         Register Classes.   (line  278)
   46104 * PREFERRED_RELOAD_CLASS:                Register Classes.   (line  243)
   46105 * PREFERRED_STACK_BOUNDARY:              Storage Layout.     (line  146)
   46106 * prefetch:                              Side Effects.       (line  312)
   46107 * prefetch and /v:                       Flags.              (line  232)
   46108 * prefetch instruction pattern:          Standard Names.     (line 1401)
   46109 * PREFETCH_SCHEDULE_BARRIER_P:           Flags.              (line  232)
   46110 * PREINCREMENT_EXPR:                     Unary and Binary Expressions.
   46111                                                              (line    6)
   46112 * presence_set:                          Processor pipeline description.
   46113                                                              (line  220)
   46114 * preserving SSA form:                   SSA.                (line   76)
   46115 * preserving virtual SSA form:           SSA.                (line  186)
   46116 * prev_active_insn:                      define_peephole.    (line   60)
   46117 * PREV_INSN:                             Insns.              (line   26)
   46118 * PRINT_OPERAND:                         Instruction Output. (line   96)
   46119 * PRINT_OPERAND_ADDRESS:                 Instruction Output. (line  124)
   46120 * PRINT_OPERAND_PUNCT_VALID_P:           Instruction Output. (line  117)
   46121 * probe_stack instruction pattern:       Standard Names.     (line 1254)
   46122 * processor functional units:            Processor pipeline description.
   46123                                                              (line    6)
   46124 * processor pipeline description:        Processor pipeline description.
   46125                                                              (line    6)
   46126 * product:                               Arithmetic.         (line   92)
   46127 * profile feedback:                      Profile information.
   46128                                                              (line   14)
   46129 * profile representation:                Profile information.
   46130                                                              (line    6)
   46131 * PROFILE_BEFORE_PROLOGUE:               Profiling.          (line   35)
   46132 * PROFILE_HOOK:                          Profiling.          (line   23)
   46133 * profiling, code generation:            Profiling.          (line    6)
   46134 * program counter:                       Regs and Memory.    (line  362)
   46135 * prologue:                              Function Entry.     (line    6)
   46136 * prologue instruction pattern:          Standard Names.     (line 1345)
   46137 * PROMOTE_MODE:                          Storage Layout.     (line   87)
   46138 * pseudo registers:                      Regs and Memory.    (line    9)
   46139 * PSImode:                               Machine Modes.      (line   32)
   46140 * PTRDIFF_TYPE:                          Type Layout.        (line  183)
   46141 * purge_dead_edges <1>:                  Maintaining the CFG.
   46142                                                              (line   93)
   46143 * purge_dead_edges:                      Edges.              (line  104)
   46144 * push address instruction:              Simple Constraints. (line  164)
   46145 * PUSH_ARGS:                             Stack Arguments.    (line   18)
   46146 * PUSH_ARGS_REVERSED:                    Stack Arguments.    (line   26)
   46147 * push_operand:                          Machine-Independent Predicates.
   46148                                                              (line   81)
   46149 * push_reload:                           Addressing Modes.   (line  175)
   46150 * PUSH_ROUNDING:                         Stack Arguments.    (line   32)
   46151 * pushM1 instruction pattern:            Standard Names.     (line  209)
   46152 * PUT_CODE:                              RTL Objects.        (line   47)
   46153 * PUT_MODE:                              Machine Modes.      (line  283)
   46154 * PUT_REG_NOTE_KIND:                     Insns.              (line  350)
   46155 * PUT_SDB_:                              SDB and DWARF.      (line  101)
   46156 * QCmode:                                Machine Modes.      (line  197)
   46157 * QFmode:                                Machine Modes.      (line   54)
   46158 * QImode:                                Machine Modes.      (line   25)
   46159 * QImode, in insn:                       Insns.              (line  272)
   46160 * QQmode:                                Machine Modes.      (line  103)
   46161 * qualified type <1>:                    Types for C++.      (line    6)
   46162 * qualified type:                        Types.              (line    6)
   46163 * querying function unit reservations:   Processor pipeline description.
   46164                                                              (line   90)
   46165 * question mark:                         Multi-Alternative.  (line   41)
   46166 * quotient:                              Arithmetic.         (line  116)
   46167 * r in constraint:                       Simple Constraints. (line   66)
   46168 * RANGE_TEST_NON_SHORT_CIRCUIT:          Costs.              (line  265)
   46169 * RDIV_EXPR:                             Unary and Binary Expressions.
   46170                                                              (line    6)
   46171 * READONLY_DATA_SECTION_ASM_OP:          Sections.           (line   63)
   46172 * real operands:                         SSA Operands.       (line    6)
   46173 * REAL_ARITHMETIC:                       Floating Point.     (line   66)
   46174 * REAL_CST:                              Constant expressions.
   46175                                                              (line    6)
   46176 * REAL_LIBGCC_SPEC:                      Driver.             (line  125)
   46177 * REAL_NM_FILE_NAME:                     Macros for Initialization.
   46178                                                              (line  106)
   46179 * REAL_TYPE:                             Types.              (line    6)
   46180 * REAL_VALUE_ABS:                        Floating Point.     (line   82)
   46181 * REAL_VALUE_ATOF:                       Floating Point.     (line   50)
   46182 * REAL_VALUE_FIX:                        Floating Point.     (line   41)
   46183 * REAL_VALUE_FROM_INT:                   Floating Point.     (line   99)
   46184 * REAL_VALUE_ISINF:                      Floating Point.     (line   59)
   46185 * REAL_VALUE_ISNAN:                      Floating Point.     (line   62)
   46186 * REAL_VALUE_NEGATE:                     Floating Point.     (line   79)
   46187 * REAL_VALUE_NEGATIVE:                   Floating Point.     (line   56)
   46188 * REAL_VALUE_TO_INT:                     Floating Point.     (line   93)
   46189 * REAL_VALUE_TO_TARGET_DECIMAL128:       Data Output.        (line  156)
   46190 * REAL_VALUE_TO_TARGET_DECIMAL32:        Data Output.        (line  154)
   46191 * REAL_VALUE_TO_TARGET_DECIMAL64:        Data Output.        (line  155)
   46192 * REAL_VALUE_TO_TARGET_DOUBLE:           Data Output.        (line  152)
   46193 * REAL_VALUE_TO_TARGET_LONG_DOUBLE:      Data Output.        (line  153)
   46194 * REAL_VALUE_TO_TARGET_SINGLE:           Data Output.        (line  151)
   46195 * REAL_VALUE_TRUNCATE:                   Floating Point.     (line   86)
   46196 * REAL_VALUE_TYPE:                       Floating Point.     (line   26)
   46197 * REAL_VALUE_UNSIGNED_FIX:               Floating Point.     (line   45)
   46198 * REAL_VALUES_EQUAL:                     Floating Point.     (line   32)
   46199 * REAL_VALUES_LESS:                      Floating Point.     (line   38)
   46200 * REALPART_EXPR:                         Unary and Binary Expressions.
   46201                                                              (line    6)
   46202 * recog_data.operand:                    Instruction Output. (line   54)
   46203 * recognizing insns:                     RTL Template.       (line    6)
   46204 * RECORD_TYPE <1>:                       Classes.            (line    6)
   46205 * RECORD_TYPE:                           Types.              (line    6)
   46206 * redirect_edge_and_branch:              Profile information.
   46207                                                              (line   71)
   46208 * redirect_edge_and_branch, redirect_jump: Maintaining the CFG.
   46209                                                              (line  103)
   46210 * reduc_smax_M instruction pattern:      Standard Names.     (line  267)
   46211 * reduc_smin_M instruction pattern:      Standard Names.     (line  267)
   46212 * reduc_splus_M instruction pattern:     Standard Names.     (line  279)
   46213 * reduc_umax_M instruction pattern:      Standard Names.     (line  273)
   46214 * reduc_umin_M instruction pattern:      Standard Names.     (line  273)
   46215 * reduc_uplus_M instruction pattern:     Standard Names.     (line  285)
   46216 * reference:                             Types.              (line    6)
   46217 * REFERENCE_TYPE:                        Types.              (line    6)
   46218 * reg:                                   Regs and Memory.    (line    9)
   46219 * reg and /f:                            Flags.              (line  112)
   46220 * reg and /i:                            Flags.              (line  107)
   46221 * reg and /v:                            Flags.              (line  116)
   46222 * reg, RTL sharing:                      Sharing.            (line   17)
   46223 * REG_ALLOC_ORDER:                       Allocation Order.   (line    9)
   46224 * REG_BR_PRED:                           Insns.              (line  531)
   46225 * REG_BR_PROB:                           Insns.              (line  525)
   46226 * REG_BR_PROB_BASE, BB_FREQ_BASE, count: Profile information.
   46227                                                              (line   82)
   46228 * REG_BR_PROB_BASE, EDGE_FREQUENCY:      Profile information.
   46229                                                              (line   52)
   46230 * REG_CC_SETTER:                         Insns.              (line  496)
   46231 * REG_CC_USER:                           Insns.              (line  496)
   46232 * REG_CLASS_CONTENTS:                    Register Classes.   (line   88)
   46233 * reg_class_contents:                    Register Basics.    (line   59)
   46234 * REG_CLASS_FROM_CONSTRAINT:             Old Constraints.    (line   35)
   46235 * REG_CLASS_FROM_LETTER:                 Old Constraints.    (line   27)
   46236 * REG_CLASS_NAMES:                       Register Classes.   (line   83)
   46237 * REG_CROSSING_JUMP:                     Insns.              (line  409)
   46238 * REG_DEAD:                              Insns.              (line  361)
   46239 * REG_DEAD, REG_UNUSED:                  Liveness information.
   46240                                                              (line   32)
   46241 * REG_DEP_ANTI:                          Insns.              (line  518)
   46242 * REG_DEP_OUTPUT:                        Insns.              (line  514)
   46243 * REG_DEP_TRUE:                          Insns.              (line  511)
   46244 * REG_EH_REGION, EDGE_ABNORMAL_CALL:     Edges.              (line  110)
   46245 * REG_EQUAL:                             Insns.              (line  424)
   46246 * REG_EQUIV:                             Insns.              (line  424)
   46247 * REG_EXPR:                              Special Accessors.  (line   50)
   46248 * REG_FRAME_RELATED_EXPR:                Insns.              (line  537)
   46249 * REG_FUNCTION_VALUE_P:                  Flags.              (line  107)
   46250 * REG_INC:                               Insns.              (line  377)
   46251 * reg_label and /v:                      Flags.              (line   65)
   46252 * REG_LABEL_OPERAND:                     Insns.              (line  391)
   46253 * REG_LABEL_TARGET:                      Insns.              (line  400)
   46254 * reg_names <1>:                         Instruction Output. (line  108)
   46255 * reg_names:                             Register Basics.    (line   59)
   46256 * REG_NONNEG:                            Insns.              (line  383)
   46257 * REG_NOTE_KIND:                         Insns.              (line  350)
   46258 * REG_NOTES:                             Insns.              (line  324)
   46259 * REG_OFFSET:                            Special Accessors.  (line   54)
   46260 * REG_OK_STRICT:                         Addressing Modes.   (line  100)
   46261 * REG_PARM_STACK_SPACE:                  Stack Arguments.    (line   59)
   46262 * REG_PARM_STACK_SPACE, and FUNCTION_ARG: Register Arguments.
   46263                                                              (line   52)
   46264 * REG_POINTER:                           Flags.              (line  112)
   46265 * REG_SETJMP:                            Insns.              (line  418)
   46266 * REG_UNUSED:                            Insns.              (line  370)
   46267 * REG_USERVAR_P:                         Flags.              (line  116)
   46268 * regclass_for_constraint:               C Constraint Interface.
   46269                                                              (line   60)
   46270 * register allocation order:             Allocation Order.   (line    6)
   46271 * register class definitions:            Register Classes.   (line    6)
   46272 * register class preference constraints: Class Preferences.  (line    6)
   46273 * register pairs:                        Values in Registers.
   46274                                                              (line   69)
   46275 * Register Transfer Language (RTL):      RTL.                (line    6)
   46276 * register usage:                        Registers.          (line    6)
   46277 * REGISTER_MOVE_COST:                    Costs.              (line   10)
   46278 * REGISTER_NAMES:                        Instruction Output. (line    9)
   46279 * register_operand:                      Machine-Independent Predicates.
   46280                                                              (line   30)
   46281 * REGISTER_PREFIX:                       Instruction Output. (line  152)
   46282 * REGISTER_TARGET_PRAGMAS:               Misc.               (line  382)
   46283 * registers arguments:                   Register Arguments. (line    6)
   46284 * registers in constraints:              Simple Constraints. (line   66)
   46285 * REGMODE_NATURAL_SIZE:                  Values in Registers.
   46286                                                              (line   50)
   46287 * REGNO_MODE_CODE_OK_FOR_BASE_P:         Register Classes.   (line  169)
   46288 * REGNO_MODE_OK_FOR_BASE_P:              Register Classes.   (line  146)
   46289 * REGNO_MODE_OK_FOR_REG_BASE_P:          Register Classes.   (line  156)
   46290 * REGNO_OK_FOR_BASE_P:                   Register Classes.   (line  142)
   46291 * REGNO_OK_FOR_INDEX_P:                  Register Classes.   (line  180)
   46292 * REGNO_REG_CLASS:                       Register Classes.   (line  103)
   46293 * regs_ever_live:                        Function Entry.     (line   21)
   46294 * regular expressions:                   Processor pipeline description.
   46295                                                              (line    6)
   46296 * relative costs:                        Costs.              (line    6)
   46297 * RELATIVE_PREFIX_NOT_LINKDIR:           Driver.             (line  263)
   46298 * reload_completed:                      Standard Names.     (line 1040)
   46299 * reload_in instruction pattern:         Standard Names.     (line   99)
   46300 * reload_in_progress:                    Standard Names.     (line   57)
   46301 * reload_out instruction pattern:        Standard Names.     (line   99)
   46302 * reloading:                             RTL passes.         (line  182)
   46303 * remainder:                             Arithmetic.         (line  136)
   46304 * remainderM3 instruction pattern:       Standard Names.     (line  499)
   46305 * reorder:                               GTY Options.        (line  205)
   46306 * representation of RTL:                 RTL.                (line    6)
   46307 * reservation delays:                    Processor pipeline description.
   46308                                                              (line    6)
   46309 * rest_of_decl_compilation:              Parsing pass.       (line   52)
   46310 * rest_of_type_compilation:              Parsing pass.       (line   52)
   46311 * restore_stack_block instruction pattern: Standard Names.   (line 1174)
   46312 * restore_stack_function instruction pattern: Standard Names.
   46313                                                              (line 1174)
   46314 * restore_stack_nonlocal instruction pattern: Standard Names.
   46315                                                              (line 1174)
   46316 * RESULT_DECL:                           Declarations.       (line    6)
   46317 * return:                                Side Effects.       (line   72)
   46318 * return instruction pattern:            Standard Names.     (line 1027)
   46319 * return values in registers:            Scalar Return.      (line    6)
   46320 * RETURN_ADDR_IN_PREVIOUS_FRAME:         Frame Layout.       (line  135)
   46321 * RETURN_ADDR_OFFSET:                    Exception Handling. (line   60)
   46322 * RETURN_ADDR_RTX:                       Frame Layout.       (line  124)
   46323 * RETURN_ADDRESS_POINTER_REGNUM:         Frame Registers.    (line   65)
   46324 * RETURN_EXPR:                           Statements for C++. (line    6)
   46325 * RETURN_STMT:                           Statements for C++. (line    6)
   46326 * return_val:                            Flags.              (line  299)
   46327 * return_val, in call_insn:              Flags.              (line   24)
   46328 * return_val, in mem:                    Flags.              (line   85)
   46329 * return_val, in reg:                    Flags.              (line  107)
   46330 * return_val, in symbol_ref:             Flags.              (line  220)
   46331 * returning aggregate values:            Aggregate Return.   (line    6)
   46332 * returning structures and unions:       Interface.          (line   10)
   46333 * reverse probability:                   Profile information.
   46334                                                              (line   66)
   46335 * REVERSE_CONDEXEC_PREDICATES_P:         Cond Exec Macros.   (line   11)
   46336 * REVERSE_CONDITION:                     MODE_CC Condition Codes.
   46337                                                              (line   87)
   46338 * REVERSIBLE_CC_MODE:                    MODE_CC Condition Codes.
   46339                                                              (line   73)
   46340 * right rotate:                          Arithmetic.         (line  195)
   46341 * right shift:                           Arithmetic.         (line  190)
   46342 * rintM2 instruction pattern:            Standard Names.     (line  599)
   46343 * RISC:                                  Processor pipeline description.
   46344                                                              (line    6)
   46345 * roots, marking:                        GGC Roots.          (line    6)
   46346 * rotate:                                Arithmetic.         (line  195)
   46347 * rotatert:                              Arithmetic.         (line  195)
   46348 * rotlM3 instruction pattern:            Standard Names.     (line  468)
   46349 * rotrM3 instruction pattern:            Standard Names.     (line  468)
   46350 * ROUND_DIV_EXPR:                        Unary and Binary Expressions.
   46351                                                              (line    6)
   46352 * ROUND_MOD_EXPR:                        Unary and Binary Expressions.
   46353                                                              (line    6)
   46354 * ROUND_TOWARDS_ZERO:                    Storage Layout.     (line  461)
   46355 * ROUND_TYPE_ALIGN:                      Storage Layout.     (line  408)
   46356 * roundM2 instruction pattern:           Standard Names.     (line  575)
   46357 * RSHIFT_EXPR:                           Unary and Binary Expressions.
   46358                                                              (line    6)
   46359 * RTL addition:                          Arithmetic.         (line   14)
   46360 * RTL addition with signed saturation:   Arithmetic.         (line   14)
   46361 * RTL addition with unsigned saturation: Arithmetic.         (line   14)
   46362 * RTL classes:                           RTL Classes.        (line    6)
   46363 * RTL comparison:                        Arithmetic.         (line   43)
   46364 * RTL comparison operations:             Comparisons.        (line    6)
   46365 * RTL constant expression types:         Constants.          (line    6)
   46366 * RTL constants:                         Constants.          (line    6)
   46367 * RTL declarations:                      RTL Declarations.   (line    6)
   46368 * RTL difference:                        Arithmetic.         (line   36)
   46369 * RTL expression:                        RTL Objects.        (line    6)
   46370 * RTL expressions for arithmetic:        Arithmetic.         (line    6)
   46371 * RTL format:                            RTL Classes.        (line   72)
   46372 * RTL format characters:                 RTL Classes.        (line   77)
   46373 * RTL function-call insns:               Calls.              (line    6)
   46374 * RTL insn template:                     RTL Template.       (line    6)
   46375 * RTL integers:                          RTL Objects.        (line    6)
   46376 * RTL memory expressions:                Regs and Memory.    (line    6)
   46377 * RTL object types:                      RTL Objects.        (line    6)
   46378 * RTL postdecrement:                     Incdec.             (line    6)
   46379 * RTL postincrement:                     Incdec.             (line    6)
   46380 * RTL predecrement:                      Incdec.             (line    6)
   46381 * RTL preincrement:                      Incdec.             (line    6)
   46382 * RTL register expressions:              Regs and Memory.    (line    6)
   46383 * RTL representation:                    RTL.                (line    6)
   46384 * RTL side effect expressions:           Side Effects.       (line    6)
   46385 * RTL strings:                           RTL Objects.        (line    6)
   46386 * RTL structure sharing assumptions:     Sharing.            (line    6)
   46387 * RTL subtraction:                       Arithmetic.         (line   36)
   46388 * RTL subtraction with signed saturation: Arithmetic.        (line   36)
   46389 * RTL subtraction with unsigned saturation: Arithmetic.      (line   36)
   46390 * RTL sum:                               Arithmetic.         (line   14)
   46391 * RTL vectors:                           RTL Objects.        (line    6)
   46392 * RTL_CONST_CALL_P:                      Flags.              (line   19)
   46393 * RTL_CONST_OR_PURE_CALL_P:              Flags.              (line   29)
   46394 * RTL_LOOPING_CONST_OR_PURE_CALL_P:      Flags.              (line   33)
   46395 * RTL_PURE_CALL_P:                       Flags.              (line   24)
   46396 * RTX (See RTL):                         RTL Objects.        (line    6)
   46397 * RTX codes, classes of:                 RTL Classes.        (line    6)
   46398 * RTX_FRAME_RELATED_P:                   Flags.              (line  125)
   46399 * run-time conventions:                  Interface.          (line    6)
   46400 * run-time target specification:         Run-time Target.    (line    6)
   46401 * s in constraint:                       Simple Constraints. (line  102)
   46402 * same_type_p:                           Types.              (line   88)
   46403 * SAmode:                                Machine Modes.      (line  148)
   46404 * sat_fract:                             Conversions.        (line   90)
   46405 * satfractMN2 instruction pattern:       Standard Names.     (line  856)
   46406 * satfractunsMN2 instruction pattern:    Standard Names.     (line  869)
   46407 * satisfies_constraint_:                 C Constraint Interface.
   46408                                                              (line   47)
   46409 * SAVE_EXPR:                             Unary and Binary Expressions.
   46410                                                              (line    6)
   46411 * save_stack_block instruction pattern:  Standard Names.     (line 1174)
   46412 * save_stack_function instruction pattern: Standard Names.   (line 1174)
   46413 * save_stack_nonlocal instruction pattern: Standard Names.   (line 1174)
   46414 * SBSS_SECTION_ASM_OP:                   Sections.           (line   77)
   46415 * Scalar evolutions:                     Scalar evolutions.  (line    6)
   46416 * scalars, returned as values:           Scalar Return.      (line    6)
   46417 * SCHED_GROUP_P:                         Flags.              (line  166)
   46418 * SCmode:                                Machine Modes.      (line  197)
   46419 * scratch:                               Regs and Memory.    (line  298)
   46420 * scratch operands:                      Regs and Memory.    (line  298)
   46421 * scratch, RTL sharing:                  Sharing.            (line   35)
   46422 * scratch_operand:                       Machine-Independent Predicates.
   46423                                                              (line   50)
   46424 * SDATA_SECTION_ASM_OP:                  Sections.           (line   58)
   46425 * SDB_ALLOW_FORWARD_REFERENCES:          SDB and DWARF.      (line  119)
   46426 * SDB_ALLOW_UNKNOWN_REFERENCES:          SDB and DWARF.      (line  114)
   46427 * SDB_DEBUGGING_INFO:                    SDB and DWARF.      (line    9)
   46428 * SDB_DELIM:                             SDB and DWARF.      (line  107)
   46429 * SDB_OUTPUT_SOURCE_LINE:                SDB and DWARF.      (line  124)
   46430 * SDmode:                                Machine Modes.      (line   85)
   46431 * sdot_prodM instruction pattern:        Standard Names.     (line  291)
   46432 * search options:                        Including Patterns. (line   44)
   46433 * SECONDARY_INPUT_RELOAD_CLASS:          Register Classes.   (line  394)
   46434 * SECONDARY_MEMORY_NEEDED:               Register Classes.   (line  450)
   46435 * SECONDARY_MEMORY_NEEDED_MODE:          Register Classes.   (line  469)
   46436 * SECONDARY_MEMORY_NEEDED_RTX:           Register Classes.   (line  460)
   46437 * SECONDARY_OUTPUT_RELOAD_CLASS:         Register Classes.   (line  395)
   46438 * SECONDARY_RELOAD_CLASS:                Register Classes.   (line  393)
   46439 * SELECT_CC_MODE:                        MODE_CC Condition Codes.
   46440                                                              (line    7)
   46441 * sequence:                              Side Effects.       (line  254)
   46442 * Sequence iterators:                    Sequence iterators. (line    6)
   46443 * set:                                   Side Effects.       (line   15)
   46444 * set and /f:                            Flags.              (line  125)
   46445 * SET_ASM_OP:                            Label Output.       (line  407)
   46446 * set_attr:                              Tagging Insns.      (line   31)
   46447 * set_attr_alternative:                  Tagging Insns.      (line   49)
   46448 * set_bb_seq:                            GIMPLE sequences.   (line   76)
   46449 * SET_BY_PIECES_P:                       Costs.              (line  206)
   46450 * SET_DEST:                              Side Effects.       (line   69)
   46451 * SET_IS_RETURN_P:                       Flags.              (line  175)
   46452 * SET_LABEL_KIND:                        Insns.              (line  140)
   46453 * set_optab_libfunc:                     Library Calls.      (line   15)
   46454 * SET_RATIO:                             Costs.              (line  194)
   46455 * SET_SRC:                               Side Effects.       (line   69)
   46456 * SET_TYPE_STRUCTURAL_EQUALITY:          Types.              (line    6)
   46457 * setmemM instruction pattern:           Standard Names.     (line  724)
   46458 * SETUP_FRAME_ADDRESSES:                 Frame Layout.       (line  102)
   46459 * SF_SIZE:                               Type Layout.        (line  128)
   46460 * SFmode:                                Machine Modes.      (line   66)
   46461 * sharing of RTL components:             Sharing.            (line    6)
   46462 * shift:                                 Arithmetic.         (line  173)
   46463 * SHIFT_COUNT_TRUNCATED:                 Misc.               (line  127)
   46464 * SHLIB_SUFFIX:                          Macros for Initialization.
   46465                                                              (line  135)
   46466 * SHORT_ACCUM_TYPE_SIZE:                 Type Layout.        (line   83)
   46467 * SHORT_FRACT_TYPE_SIZE:                 Type Layout.        (line   63)
   46468 * SHORT_IMMEDIATES_SIGN_EXTEND:          Misc.               (line   96)
   46469 * SHORT_TYPE_SIZE:                       Type Layout.        (line   16)
   46470 * sibcall_epilogue instruction pattern:  Standard Names.     (line 1371)
   46471 * sibling call:                          Edges.              (line  122)
   46472 * SIBLING_CALL_P:                        Flags.              (line  179)
   46473 * SIG_ATOMIC_TYPE:                       Type Layout.        (line  234)
   46474 * sign_extend:                           Conversions.        (line   23)
   46475 * sign_extract:                          Bit-Fields.         (line    8)
   46476 * sign_extract, canonicalization of:     Insn Canonicalizations.
   46477                                                              (line   88)
   46478 * signed division:                       Arithmetic.         (line  116)
   46479 * signed division with signed saturation: Arithmetic.        (line  116)
   46480 * signed maximum:                        Arithmetic.         (line  141)
   46481 * signed minimum:                        Arithmetic.         (line  141)
   46482 * SImode:                                Machine Modes.      (line   37)
   46483 * simple constraints:                    Simple Constraints. (line    6)
   46484 * sincos math function, implicit usage:  Library Calls.      (line   70)
   46485 * sinM2 instruction pattern:             Standard Names.     (line  516)
   46486 * SIZE_ASM_OP:                           Label Output.       (line   35)
   46487 * SIZE_TYPE:                             Type Layout.        (line  167)
   46488 * skip:                                  GTY Options.        (line   72)
   46489 * SLOW_BYTE_ACCESS:                      Costs.              (line  118)
   46490 * SLOW_UNALIGNED_ACCESS:                 Costs.              (line  133)
   46491 * smax:                                  Arithmetic.         (line  141)
   46492 * smin:                                  Arithmetic.         (line  141)
   46493 * sms, swing, software pipelining:       RTL passes.         (line  131)
   46494 * smulM3_highpart instruction pattern:   Standard Names.     (line  383)
   46495 * soft float library:                    Soft float library routines.
   46496                                                              (line    6)
   46497 * special:                               GTY Options.        (line  249)
   46498 * special predicates:                    Predicates.         (line   31)
   46499 * SPECS:                                 Target Fragment.    (line  108)
   46500 * speed of instructions:                 Costs.              (line    6)
   46501 * split_block:                           Maintaining the CFG.
   46502                                                              (line  110)
   46503 * splitting instructions:                Insn Splitting.     (line    6)
   46504 * SQmode:                                Machine Modes.      (line  111)
   46505 * sqrt:                                  Arithmetic.         (line  207)
   46506 * sqrtM2 instruction pattern:            Standard Names.     (line  482)
   46507 * square root:                           Arithmetic.         (line  207)
   46508 * ss_abs:                                Arithmetic.         (line  200)
   46509 * ss_ashift:                             Arithmetic.         (line  173)
   46510 * ss_div:                                Arithmetic.         (line  116)
   46511 * ss_minus:                              Arithmetic.         (line   36)
   46512 * ss_mult:                               Arithmetic.         (line   92)
   46513 * ss_neg:                                Arithmetic.         (line   81)
   46514 * ss_plus:                               Arithmetic.         (line   14)
   46515 * ss_truncate:                           Conversions.        (line   43)
   46516 * SSA:                                   SSA.                (line    6)
   46517 * SSA_NAME_DEF_STMT:                     SSA.                (line  221)
   46518 * SSA_NAME_VERSION:                      SSA.                (line  226)
   46519 * ssaddM3 instruction pattern:           Standard Names.     (line  222)
   46520 * ssashlM3 instruction pattern:          Standard Names.     (line  458)
   46521 * ssdivM3 instruction pattern:           Standard Names.     (line  222)
   46522 * ssmaddMN4 instruction pattern:         Standard Names.     (line  406)
   46523 * ssmsubMN4 instruction pattern:         Standard Names.     (line  430)
   46524 * ssmulM3 instruction pattern:           Standard Names.     (line  222)
   46525 * ssnegM2 instruction pattern:           Standard Names.     (line  476)
   46526 * sssubM3 instruction pattern:           Standard Names.     (line  222)
   46527 * ssum_widenM3 instruction pattern:      Standard Names.     (line  301)
   46528 * stack arguments:                       Stack Arguments.    (line    6)
   46529 * stack frame layout:                    Frame Layout.       (line    6)
   46530 * stack smashing protection:             Stack Smashing Protection.
   46531                                                              (line    6)
   46532 * STACK_ALIGNMENT_NEEDED:                Frame Layout.       (line   48)
   46533 * STACK_BOUNDARY:                        Storage Layout.     (line  138)
   46534 * STACK_CHECK_BUILTIN:                   Stack Checking.     (line   32)
   46535 * STACK_CHECK_FIXED_FRAME_SIZE:          Stack Checking.     (line   83)
   46536 * STACK_CHECK_MAX_FRAME_SIZE:            Stack Checking.     (line   74)
   46537 * STACK_CHECK_MAX_VAR_SIZE:              Stack Checking.     (line   90)
   46538 * STACK_CHECK_MOVING_SP:                 Stack Checking.     (line   54)
   46539 * STACK_CHECK_PROBE_INTERVAL_EXP:        Stack Checking.     (line   46)
   46540 * STACK_CHECK_PROTECT:                   Stack Checking.     (line   63)
   46541 * STACK_CHECK_STATIC_BUILTIN:            Stack Checking.     (line   39)
   46542 * STACK_DYNAMIC_OFFSET:                  Frame Layout.       (line   75)
   46543 * STACK_DYNAMIC_OFFSET and virtual registers: Regs and Memory.
   46544                                                              (line   83)
   46545 * STACK_GROWS_DOWNWARD:                  Frame Layout.       (line    9)
   46546 * STACK_PARMS_IN_REG_PARM_AREA:          Stack Arguments.    (line   84)
   46547 * STACK_POINTER_OFFSET:                  Frame Layout.       (line   58)
   46548 * STACK_POINTER_OFFSET and virtual registers: Regs and Memory.
   46549                                                              (line   93)
   46550 * STACK_POINTER_REGNUM:                  Frame Registers.    (line    9)
   46551 * STACK_POINTER_REGNUM and virtual registers: Regs and Memory.
   46552                                                              (line   83)
   46553 * stack_pointer_rtx:                     Frame Registers.    (line  104)
   46554 * stack_protect_set instruction pattern: Standard Names.     (line 1542)
   46555 * stack_protect_test instruction pattern: Standard Names.    (line 1552)
   46556 * STACK_PUSH_CODE:                       Frame Layout.       (line   17)
   46557 * STACK_REG_COVER_CLASS:                 Stack Registers.    (line   23)
   46558 * STACK_REGS:                            Stack Registers.    (line   20)
   46559 * STACK_SAVEAREA_MODE:                   Storage Layout.     (line  424)
   46560 * STACK_SIZE_MODE:                       Storage Layout.     (line  436)
   46561 * STACK_SLOT_ALIGNMENT:                  Storage Layout.     (line  256)
   46562 * standard pattern names:                Standard Names.     (line    6)
   46563 * STANDARD_INCLUDE_COMPONENT:            Driver.             (line  339)
   46564 * STANDARD_INCLUDE_DIR:                  Driver.             (line  331)
   46565 * STANDARD_STARTFILE_PREFIX:             Driver.             (line  275)
   46566 * STANDARD_STARTFILE_PREFIX_1:           Driver.             (line  282)
   46567 * STANDARD_STARTFILE_PREFIX_2:           Driver.             (line  289)
   46568 * STARTFILE_SPEC:                        Driver.             (line  148)
   46569 * STARTING_FRAME_OFFSET:                 Frame Layout.       (line   39)
   46570 * STARTING_FRAME_OFFSET and virtual registers: Regs and Memory.
   46571                                                              (line   74)
   46572 * Statement and operand traversals:      Statement and operand traversals.
   46573                                                              (line    6)
   46574 * Statement Sequences:                   Statement Sequences.
   46575                                                              (line    6)
   46576 * statements <1>:                        Statements for C++. (line    6)
   46577 * statements:                            Function Properties.
   46578                                                              (line    6)
   46579 * Statements:                            Statements.         (line    6)
   46580 * Static profile estimation:             Profile information.
   46581                                                              (line   24)
   46582 * static single assignment:              SSA.                (line    6)
   46583 * STATIC_CHAIN_INCOMING_REGNUM:          Frame Registers.    (line   78)
   46584 * STATIC_CHAIN_REGNUM:                   Frame Registers.    (line   77)
   46585 * stdarg.h and register arguments:       Register Arguments. (line   47)
   46586 * STDC_0_IN_SYSTEM_HEADERS:              Misc.               (line  365)
   46587 * STMT_EXPR:                             Unary and Binary Expressions.
   46588                                                              (line    6)
   46589 * STMT_IS_FULL_EXPR_P:                   Statements for C++. (line   22)
   46590 * storage layout:                        Storage Layout.     (line    6)
   46591 * STORE_BY_PIECES_P:                     Costs.              (line  213)
   46592 * STORE_FLAG_VALUE:                      Misc.               (line  216)
   46593 * store_multiple instruction pattern:    Standard Names.     (line  160)
   46594 * strcpy:                                Storage Layout.     (line  223)
   46595 * STRICT_ALIGNMENT:                      Storage Layout.     (line  306)
   46596 * strict_low_part:                       RTL Declarations.   (line    9)
   46597 * strict_memory_address_p:               Addressing Modes.   (line  185)
   46598 * STRING_CST:                            Constant expressions.
   46599                                                              (line    6)
   46600 * STRING_POOL_ADDRESS_P:                 Flags.              (line  183)
   46601 * strlenM instruction pattern:           Standard Names.     (line  791)
   46602 * structure value address:               Aggregate Return.   (line    6)
   46603 * STRUCTURE_SIZE_BOUNDARY:               Storage Layout.     (line  298)
   46604 * structures, returning:                 Interface.          (line   10)
   46605 * subM3 instruction pattern:             Standard Names.     (line  222)
   46606 * SUBOBJECT:                             Statements for C++. (line    6)
   46607 * SUBOBJECT_CLEANUP:                     Statements for C++. (line    6)
   46608 * subreg:                                Regs and Memory.    (line   97)
   46609 * subreg and /s:                         Flags.              (line  205)
   46610 * subreg and /u:                         Flags.              (line  198)
   46611 * subreg and /u and /v:                  Flags.              (line  188)
   46612 * subreg, in strict_low_part:            RTL Declarations.   (line    9)
   46613 * SUBREG_BYTE:                           Regs and Memory.    (line  289)
   46614 * SUBREG_PROMOTED_UNSIGNED_P:            Flags.              (line  188)
   46615 * SUBREG_PROMOTED_UNSIGNED_SET:          Flags.              (line  198)
   46616 * SUBREG_PROMOTED_VAR_P:                 Flags.              (line  205)
   46617 * SUBREG_REG:                            Regs and Memory.    (line  289)
   46618 * SUCCESS_EXIT_CODE:                     Host Misc.          (line   12)
   46619 * SUPPORTS_INIT_PRIORITY:                Macros for Initialization.
   46620                                                              (line   58)
   46621 * SUPPORTS_ONE_ONLY:                     Label Output.       (line  247)
   46622 * SUPPORTS_WEAK:                         Label Output.       (line  221)
   46623 * SWITCH_BODY:                           Statements for C++. (line    6)
   46624 * SWITCH_COND:                           Statements for C++. (line    6)
   46625 * SWITCH_STMT:                           Statements for C++. (line    6)
   46626 * SWITCHABLE_TARGET:                     Run-time Target.    (line  176)
   46627 * SYMBOL_FLAG_ANCHOR:                    Special Accessors.  (line  110)
   46628 * SYMBOL_FLAG_EXTERNAL:                  Special Accessors.  (line   92)
   46629 * SYMBOL_FLAG_FUNCTION:                  Special Accessors.  (line   85)
   46630 * SYMBOL_FLAG_HAS_BLOCK_INFO:            Special Accessors.  (line  106)
   46631 * SYMBOL_FLAG_LOCAL:                     Special Accessors.  (line   88)
   46632 * SYMBOL_FLAG_SMALL:                     Special Accessors.  (line   97)
   46633 * SYMBOL_FLAG_TLS_SHIFT:                 Special Accessors.  (line  101)
   46634 * symbol_ref:                            Constants.          (line   76)
   46635 * symbol_ref and /f:                     Flags.              (line  183)
   46636 * symbol_ref and /i:                     Flags.              (line  220)
   46637 * symbol_ref and /u:                     Flags.              (line   10)
   46638 * symbol_ref and /v:                     Flags.              (line  224)
   46639 * symbol_ref, RTL sharing:               Sharing.            (line   20)
   46640 * SYMBOL_REF_ANCHOR_P:                   Special Accessors.  (line  110)
   46641 * SYMBOL_REF_BLOCK:                      Special Accessors.  (line  123)
   46642 * SYMBOL_REF_BLOCK_OFFSET:               Special Accessors.  (line  128)
   46643 * SYMBOL_REF_CONSTANT:                   Special Accessors.  (line   71)
   46644 * SYMBOL_REF_DATA:                       Special Accessors.  (line   75)
   46645 * SYMBOL_REF_DECL:                       Special Accessors.  (line   59)
   46646 * SYMBOL_REF_EXTERNAL_P:                 Special Accessors.  (line   92)
   46647 * SYMBOL_REF_FLAG:                       Flags.              (line  224)
   46648 * SYMBOL_REF_FLAG, in TARGET_ENCODE_SECTION_INFO: Sections.  (line  269)
   46649 * SYMBOL_REF_FLAGS:                      Special Accessors.  (line   79)
   46650 * SYMBOL_REF_FUNCTION_P:                 Special Accessors.  (line   85)
   46651 * SYMBOL_REF_HAS_BLOCK_INFO_P:           Special Accessors.  (line  106)
   46652 * SYMBOL_REF_LOCAL_P:                    Special Accessors.  (line   88)
   46653 * SYMBOL_REF_SMALL_P:                    Special Accessors.  (line   97)
   46654 * SYMBOL_REF_TLS_MODEL:                  Special Accessors.  (line  101)
   46655 * SYMBOL_REF_USED:                       Flags.              (line  215)
   46656 * SYMBOL_REF_WEAK:                       Flags.              (line  220)
   46657 * symbolic label:                        Sharing.            (line   20)
   46658 * sync_addMODE instruction pattern:      Standard Names.     (line 1458)
   46659 * sync_andMODE instruction pattern:      Standard Names.     (line 1458)
   46660 * sync_compare_and_swapMODE instruction pattern: Standard Names.
   46661                                                              (line 1428)
   46662 * sync_iorMODE instruction pattern:      Standard Names.     (line 1458)
   46663 * sync_lock_releaseMODE instruction pattern: Standard Names. (line 1523)
   46664 * sync_lock_test_and_setMODE instruction pattern: Standard Names.
   46665                                                              (line 1497)
   46666 * sync_nandMODE instruction pattern:     Standard Names.     (line 1458)
   46667 * sync_new_addMODE instruction pattern:  Standard Names.     (line 1490)
   46668 * sync_new_andMODE instruction pattern:  Standard Names.     (line 1490)
   46669 * sync_new_iorMODE instruction pattern:  Standard Names.     (line 1490)
   46670 * sync_new_nandMODE instruction pattern: Standard Names.     (line 1490)
   46671 * sync_new_subMODE instruction pattern:  Standard Names.     (line 1490)
   46672 * sync_new_xorMODE instruction pattern:  Standard Names.     (line 1490)
   46673 * sync_old_addMODE instruction pattern:  Standard Names.     (line 1473)
   46674 * sync_old_andMODE instruction pattern:  Standard Names.     (line 1473)
   46675 * sync_old_iorMODE instruction pattern:  Standard Names.     (line 1473)
   46676 * sync_old_nandMODE instruction pattern: Standard Names.     (line 1473)
   46677 * sync_old_subMODE instruction pattern:  Standard Names.     (line 1473)
   46678 * sync_old_xorMODE instruction pattern:  Standard Names.     (line 1473)
   46679 * sync_subMODE instruction pattern:      Standard Names.     (line 1458)
   46680 * sync_xorMODE instruction pattern:      Standard Names.     (line 1458)
   46681 * SYSROOT_HEADERS_SUFFIX_SPEC:           Driver.             (line  177)
   46682 * SYSROOT_SUFFIX_SPEC:                   Driver.             (line  172)
   46683 * SYSTEM_INCLUDE_DIR:                    Driver.             (line  322)
   46684 * t-TARGET:                              Target Fragment.    (line    6)
   46685 * table jump:                            Basic Blocks.       (line   57)
   46686 * tablejump instruction pattern:         Standard Names.     (line 1102)
   46687 * tag:                                   GTY Options.        (line   77)
   46688 * tagging insns:                         Tagging Insns.      (line    6)
   46689 * tail calls:                            Tail Calls.         (line    6)
   46690 * TAmode:                                Machine Modes.      (line  156)
   46691 * target attributes:                     Target Attributes.  (line    6)
   46692 * target description macros:             Target Macros.      (line    6)
   46693 * target functions:                      Target Structure.   (line    6)
   46694 * target hooks:                          Target Structure.   (line    6)
   46695 * target makefile fragment:              Target Fragment.    (line    6)
   46696 * target specifications:                 Run-time Target.    (line    6)
   46697 * TARGET_ADDR_SPACE_ADDRESS_MODE:        Named Address Spaces.
   46698                                                              (line   45)
   46699 * TARGET_ADDR_SPACE_CONVERT:             Named Address Spaces.
   46700                                                              (line   88)
   46701 * TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P: Named Address Spaces.
   46702                                                              (line   63)
   46703 * TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS:  Named Address Spaces.
   46704                                                              (line   72)
   46705 * TARGET_ADDR_SPACE_POINTER_MODE:        Named Address Spaces.
   46706                                                              (line   38)
   46707 * TARGET_ADDR_SPACE_SUBSET_P:            Named Address Spaces.
   46708                                                              (line   79)
   46709 * TARGET_ADDR_SPACE_VALID_POINTER_MODE:  Named Address Spaces.
   46710                                                              (line   52)
   46711 * TARGET_ADDRESS_COST:                   Costs.              (line  297)
   46712 * TARGET_ALIGN_ANON_BITFIELD:            Storage Layout.     (line  383)
   46713 * TARGET_ALLOCATE_INITIAL_VALUE:         Misc.               (line  697)
   46714 * TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS:  Misc.               (line  977)
   46715 * TARGET_ARG_PARTIAL_BYTES:              Register Arguments. (line   83)
   46716 * TARGET_ARM_EABI_UNWINDER:              Exception Region Output.
   46717                                                              (line  122)
   46718 * TARGET_ASM_ALIGNED_DI_OP:              Data Output.        (line   10)
   46719 * TARGET_ASM_ALIGNED_HI_OP:              Data Output.        (line    8)
   46720 * TARGET_ASM_ALIGNED_SI_OP:              Data Output.        (line    9)
   46721 * TARGET_ASM_ALIGNED_TI_OP:              Data Output.        (line   11)
   46722 * TARGET_ASM_ASSEMBLE_VISIBILITY:        Label Output.       (line  259)
   46723 * TARGET_ASM_BYTE_OP:                    Data Output.        (line    7)
   46724 * TARGET_ASM_CAN_OUTPUT_MI_THUNK:        Function Entry.     (line  237)
   46725 * TARGET_ASM_CLOSE_PAREN:                Data Output.        (line  142)
   46726 * TARGET_ASM_CODE_END:                   File Framework.     (line   59)
   46727 * TARGET_ASM_CONSTRUCTOR:                Macros for Initialization.
   46728                                                              (line   69)
   46729 * TARGET_ASM_DECLARE_CONSTANT_NAME:      Label Output.       (line  142)
   46730 * TARGET_ASM_DESTRUCTOR:                 Macros for Initialization.
   46731                                                              (line   83)
   46732 * TARGET_ASM_EMIT_EXCEPT_PERSONALITY:    Dispatch Tables.    (line   82)
   46733 * TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL:    Dispatch Tables.    (line   74)
   46734 * TARGET_ASM_EMIT_UNWIND_LABEL:          Dispatch Tables.    (line   63)
   46735 * TARGET_ASM_EXTERNAL_LIBCALL:           Label Output.       (line  294)
   46736 * TARGET_ASM_FILE_END:                   File Framework.     (line   37)
   46737 * TARGET_ASM_FILE_START:                 File Framework.     (line    9)
   46738 * TARGET_ASM_FILE_START_APP_OFF:         File Framework.     (line   17)
   46739 * TARGET_ASM_FILE_START_FILE_DIRECTIVE:  File Framework.     (line   31)
   46740 * TARGET_ASM_FINAL_POSTSCAN_INSN:        Instruction Output. (line   84)
   46741 * TARGET_ASM_FUNCTION_BEGIN_EPILOGUE:    Function Entry.     (line   61)
   46742 * TARGET_ASM_FUNCTION_END_PROLOGUE:      Function Entry.     (line   55)
   46743 * TARGET_ASM_FUNCTION_EPILOGUE:          Function Entry.     (line   68)
   46744 * TARGET_ASM_FUNCTION_PROLOGUE:          Function Entry.     (line   11)
   46745 * TARGET_ASM_FUNCTION_RODATA_SECTION:    Sections.           (line  216)
   46746 * TARGET_ASM_FUNCTION_SECTION:           File Framework.     (line  123)
   46747 * TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS: File Framework.
   46748                                                              (line  133)
   46749 * TARGET_ASM_GLOBALIZE_DECL_NAME:        Label Output.       (line  187)
   46750 * TARGET_ASM_GLOBALIZE_LABEL:            Label Output.       (line  178)
   46751 * TARGET_ASM_INIT_SECTIONS:              Sections.           (line  161)
   46752 * TARGET_ASM_INTEGER:                    Data Output.        (line   27)
   46753 * TARGET_ASM_INTERNAL_LABEL:             Label Output.       (line  338)
   46754 * TARGET_ASM_JUMP_ALIGN_MAX_SKIP:        Alignment Output.   (line   22)
   46755 * TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP: Alignment Output.
   46756                                                              (line   36)
   46757 * TARGET_ASM_LABEL_ALIGN_MAX_SKIP:       Alignment Output.   (line   69)
   46758 * TARGET_ASM_LOOP_ALIGN_MAX_SKIP:        Alignment Output.   (line   54)
   46759 * TARGET_ASM_LTO_END:                    File Framework.     (line   54)
   46760 * TARGET_ASM_LTO_START:                  File Framework.     (line   49)
   46761 * TARGET_ASM_MARK_DECL_PRESERVED:        Label Output.       (line  301)
   46762 * TARGET_ASM_NAMED_SECTION:              File Framework.     (line  115)
   46763 * TARGET_ASM_OPEN_PAREN:                 Data Output.        (line  141)
   46764 * TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA:    Data Output.        (line   40)
   46765 * TARGET_ASM_OUTPUT_ANCHOR:              Anchored Addresses. (line   44)
   46766 * TARGET_ASM_OUTPUT_DWARF_DTPREL:        SDB and DWARF.      (line   96)
   46767 * TARGET_ASM_OUTPUT_MI_THUNK:            Function Entry.     (line  195)
   46768 * TARGET_ASM_OUTPUT_SOURCE_FILENAME:     File Framework.     (line   94)
   46769 * TARGET_ASM_RECORD_GCC_SWITCHES:        File Framework.     (line  164)
   46770 * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION: File Framework.    (line  208)
   46771 * TARGET_ASM_RELOC_RW_MASK:              Sections.           (line  170)
   46772 * TARGET_ASM_SELECT_RTX_SECTION:         Sections.           (line  224)
   46773 * TARGET_ASM_SELECT_SECTION:             Sections.           (line  182)
   46774 * TARGET_ASM_TRAMPOLINE_TEMPLATE:        Trampolines.        (line   29)
   46775 * TARGET_ASM_TTYPE:                      Exception Region Output.
   46776                                                              (line  116)
   46777 * TARGET_ASM_UNALIGNED_DI_OP:            Data Output.        (line   14)
   46778 * TARGET_ASM_UNALIGNED_HI_OP:            Data Output.        (line   12)
   46779 * TARGET_ASM_UNALIGNED_SI_OP:            Data Output.        (line   13)
   46780 * TARGET_ASM_UNALIGNED_TI_OP:            Data Output.        (line   15)
   46781 * TARGET_ASM_UNIQUE_SECTION:             Sections.           (line  203)
   46782 * TARGET_ASM_UNWIND_EMIT:                Dispatch Tables.    (line   88)
   46783 * TARGET_ASM_UNWIND_EMIT_BEFORE_INSN:    Dispatch Tables.    (line   93)
   46784 * TARGET_ATTRIBUTE_TABLE:                Target Attributes.  (line   11)
   46785 * TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P:   Target Attributes.  (line   19)
   46786 * TARGET_BINDS_LOCAL_P:                  Sections.           (line  301)
   46787 * TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED: Misc.          (line  794)
   46788 * TARGET_BRANCH_TARGET_REGISTER_CLASS:   Misc.               (line  786)
   46789 * TARGET_BUILD_BUILTIN_VA_LIST:          Register Arguments. (line  264)
   46790 * TARGET_BUILTIN_DECL:                   Misc.               (line  620)
   46791 * TARGET_BUILTIN_RECIPROCAL:             Addressing Modes.   (line  265)
   46792 * TARGET_BUILTIN_SETJMP_FRAME_VALUE:     Frame Layout.       (line  109)
   46793 * TARGET_C99_FUNCTIONS:                  Library Calls.      (line   63)
   46794 * TARGET_CALLEE_COPIES:                  Register Arguments. (line  115)
   46795 * TARGET_CAN_ELIMINATE:                  Elimination.        (line   75)
   46796 * TARGET_CAN_INLINE_P:                   Target Attributes.  (line  150)
   46797 * TARGET_CANNOT_FORCE_CONST_MEM:         Addressing Modes.   (line  246)
   46798 * TARGET_CANNOT_MODIFY_JUMPS_P:          Misc.               (line  773)
   46799 * TARGET_CANONICAL_VA_LIST_TYPE:         Register Arguments. (line  285)
   46800 * TARGET_CASE_VALUES_THRESHOLD:          Misc.               (line   47)
   46801 * TARGET_CC_MODES_COMPATIBLE:            MODE_CC Condition Codes.
   46802                                                              (line  116)
   46803 * TARGET_CHECK_PCH_TARGET_FLAGS:         PCH Target.         (line   28)
   46804 * TARGET_CHECK_STRING_OBJECT_FORMAT_ARG: Run-time Target.    (line  113)
   46805 * TARGET_CLASS_LIKELY_SPILLED_P:         Register Classes.   (line  492)
   46806 * TARGET_COMMUTATIVE_P:                  Misc.               (line  690)
   46807 * TARGET_COMP_TYPE_ATTRIBUTES:           Target Attributes.  (line   27)
   46808 * TARGET_CONDITIONAL_REGISTER_USAGE:     Register Basics.    (line   60)
   46809 * TARGET_CONST_ANCHOR:                   Misc.               (line  988)
   46810 * TARGET_CONVERT_TO_TYPE:                Misc.               (line  941)
   46811 * TARGET_CPU_CPP_BUILTINS:               Run-time Target.    (line    9)
   46812 * TARGET_CXX_ADJUST_CLASS_AT_DEFINITION: C++ ABI.            (line   87)
   46813 * TARGET_CXX_CDTOR_RETURNS_THIS:         C++ ABI.            (line   38)
   46814 * TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT:   C++ ABI.            (line   62)
   46815 * TARGET_CXX_COOKIE_HAS_SIZE:            C++ ABI.            (line   25)
   46816 * TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY: C++ ABI.       (line   54)
   46817 * TARGET_CXX_GET_COOKIE_SIZE:            C++ ABI.            (line   18)
   46818 * TARGET_CXX_GUARD_MASK_BIT:             C++ ABI.            (line   12)
   46819 * TARGET_CXX_GUARD_TYPE:                 C++ ABI.            (line    7)
   46820 * TARGET_CXX_IMPORT_EXPORT_CLASS:        C++ ABI.            (line   30)
   46821 * TARGET_CXX_KEY_METHOD_MAY_BE_INLINE:   C++ ABI.            (line   43)
   46822 * TARGET_CXX_LIBRARY_RTTI_COMDAT:        C++ ABI.            (line   69)
   46823 * TARGET_CXX_USE_AEABI_ATEXIT:           C++ ABI.            (line   74)
   46824 * TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT:  C++ ABI.            (line   80)
   46825 * TARGET_DEBUG_UNWIND_INFO:              SDB and DWARF.      (line   37)
   46826 * TARGET_DECIMAL_FLOAT_SUPPORTED_P:      Storage Layout.     (line  508)
   46827 * TARGET_DECLSPEC:                       Target Attributes.  (line   73)
   46828 * TARGET_DEFAULT_PACK_STRUCT:            Misc.               (line  445)
   46829 * TARGET_DEFAULT_SHORT_ENUMS:            Type Layout.        (line  159)
   46830 * TARGET_DEFAULT_TARGET_FLAGS:           Run-time Target.    (line   56)
   46831 * TARGET_DEFERRED_OUTPUT_DEFS:           Label Output.       (line  422)
   46832 * TARGET_DELAY_SCHED2:                   SDB and DWARF.      (line   61)
   46833 * TARGET_DELAY_VARTRACK:                 SDB and DWARF.      (line   65)
   46834 * TARGET_DELEGITIMIZE_ADDRESS:           Addressing Modes.   (line  237)
   46835 * TARGET_DLLIMPORT_DECL_ATTRIBUTES:      Target Attributes.  (line   55)
   46836 * TARGET_DWARF_CALLING_CONVENTION:       SDB and DWARF.      (line   18)
   46837 * TARGET_DWARF_HANDLE_FRAME_UNSPEC:      Frame Layout.       (line  172)
   46838 * TARGET_DWARF_REGISTER_SPAN:            Exception Region Output.
   46839                                                              (line   99)
   46840 * TARGET_EDOM:                           Library Calls.      (line   45)
   46841 * TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS:  Emulated TLS.       (line   68)
   46842 * TARGET_EMUTLS_GET_ADDRESS:             Emulated TLS.       (line   19)
   46843 * TARGET_EMUTLS_REGISTER_COMMON:         Emulated TLS.       (line   24)
   46844 * TARGET_EMUTLS_TMPL_PREFIX:             Emulated TLS.       (line   45)
   46845 * TARGET_EMUTLS_TMPL_SECTION:            Emulated TLS.       (line   36)
   46846 * TARGET_EMUTLS_VAR_ALIGN_FIXED:         Emulated TLS.       (line   63)
   46847 * TARGET_EMUTLS_VAR_FIELDS:              Emulated TLS.       (line   49)
   46848 * TARGET_EMUTLS_VAR_INIT:                Emulated TLS.       (line   57)
   46849 * TARGET_EMUTLS_VAR_PREFIX:              Emulated TLS.       (line   41)
   46850 * TARGET_EMUTLS_VAR_SECTION:             Emulated TLS.       (line   31)
   46851 * TARGET_ENCODE_SECTION_INFO:            Sections.           (line  245)
   46852 * TARGET_ENCODE_SECTION_INFO and address validation: Addressing Modes.
   46853                                                              (line   83)
   46854 * TARGET_ENCODE_SECTION_INFO usage:      Instruction Output. (line  128)
   46855 * TARGET_ENUM_VA_LIST_P:                 Register Arguments. (line  269)
   46856 * TARGET_EXCEPT_UNWIND_INFO:             Exception Region Output.
   46857                                                              (line   48)
   46858 * TARGET_EXECUTABLE_SUFFIX:              Misc.               (line  747)
   46859 * TARGET_EXPAND_BUILTIN:                 Misc.               (line  630)
   46860 * TARGET_EXPAND_BUILTIN_SAVEREGS:        Varargs.            (line   67)
   46861 * TARGET_EXPAND_TO_RTL_HOOK:             Storage Layout.     (line  514)
   46862 * TARGET_EXPR:                           Unary and Binary Expressions.
   46863                                                              (line    6)
   46864 * TARGET_EXTRA_INCLUDES:                 Misc.               (line  834)
   46865 * TARGET_EXTRA_LIVE_ON_ENTRY:            Tail Calls.         (line   21)
   46866 * TARGET_EXTRA_PRE_INCLUDES:             Misc.               (line  841)
   46867 * TARGET_FIXED_CONDITION_CODE_REGS:      MODE_CC Condition Codes.
   46868                                                              (line  101)
   46869 * TARGET_FIXED_POINT_SUPPORTED_P:        Storage Layout.     (line  511)
   46870 * target_flags:                          Run-time Target.    (line   52)
   46871 * TARGET_FLAGS_REGNUM:                   Register Arguments. (line  361)
   46872 * TARGET_FLT_EVAL_METHOD:                Type Layout.        (line  140)
   46873 * TARGET_FN_ABI_VA_LIST:                 Register Arguments. (line  280)
   46874 * TARGET_FOLD_BUILTIN:                   Misc.               (line  651)
   46875 * TARGET_FORMAT_TYPES:                   Misc.               (line  861)
   46876 * TARGET_FRAME_POINTER_REQUIRED:         Elimination.        (line    9)
   46877 * TARGET_FUNCTION_ARG_BOUNDARY:          Register Arguments. (line  239)
   46878 * TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes.  (line   95)
   46879 * TARGET_FUNCTION_OK_FOR_SIBCALL:        Tail Calls.         (line    8)
   46880 * TARGET_FUNCTION_VALUE:                 Scalar Return.      (line   11)
   46881 * TARGET_FUNCTION_VALUE_REGNO_P:         Scalar Return.      (line   97)
   46882 * TARGET_GET_DRAP_RTX:                   Misc.               (line  971)
   46883 * TARGET_GET_PCH_VALIDITY:               PCH Target.         (line    7)
   46884 * TARGET_GET_RAW_ARG_MODE:               Aggregate Return.   (line   83)
   46885 * TARGET_GET_RAW_RESULT_MODE:            Aggregate Return.   (line   78)
   46886 * TARGET_GIMPLIFY_VA_ARG_EXPR:           Register Arguments. (line  291)
   46887 * TARGET_HANDLE_C_OPTION:                Run-time Target.    (line   78)
   46888 * TARGET_HANDLE_OPTION:                  Run-time Target.    (line   61)
   46889 * TARGET_HANDLE_PRAGMA_EXTERN_PREFIX:    Misc.               (line  442)
   46890 * TARGET_HARD_REGNO_SCRATCH_OK:          Values in Registers.
   46891                                                              (line  144)
   46892 * TARGET_HAS_SINCOS:                     Library Calls.      (line   71)
   46893 * TARGET_HAVE_CONDITIONAL_EXECUTION:     Misc.               (line  808)
   46894 * TARGET_HAVE_CTORS_DTORS:               Macros for Initialization.
   46895                                                              (line   64)
   46896 * TARGET_HAVE_NAMED_SECTIONS:            File Framework.     (line  140)
   46897 * TARGET_HAVE_SRODATA_SECTION:           Sections.           (line  290)
   46898 * TARGET_HAVE_SWITCHABLE_BSS_SECTIONS:   File Framework.     (line  145)
   46899 * TARGET_HAVE_TLS:                       Sections.           (line  310)
   46900 * TARGET_HELP:                           Run-time Target.    (line  170)
   46901 * TARGET_IN_SMALL_DATA_P:                Sections.           (line  286)
   46902 * TARGET_INIT_BUILTINS:                  Misc.               (line  602)
   46903 * TARGET_INIT_DWARF_REG_SIZES_EXTRA:     Exception Region Output.
   46904                                                              (line  108)
   46905 * TARGET_INIT_LIBFUNCS:                  Library Calls.      (line   16)
   46906 * TARGET_INSERT_ATTRIBUTES:              Target Attributes.  (line   82)
   46907 * TARGET_INSTANTIATE_DECLS:              Storage Layout.     (line  522)
   46908 * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN: Misc.              (line  895)
   46909 * TARGET_INVALID_BINARY_OP:              Misc.               (line  914)
   46910 * TARGET_INVALID_CONVERSION:             Misc.               (line  901)
   46911 * TARGET_INVALID_PARAMETER_TYPE:         Misc.               (line  920)
   46912 * TARGET_INVALID_RETURN_TYPE:            Misc.               (line  927)
   46913 * TARGET_INVALID_UNARY_OP:               Misc.               (line  907)
   46914 * TARGET_INVALID_WITHIN_DOLOOP:          Misc.               (line  670)
   46915 * TARGET_IRA_COVER_CLASSES:              Register Classes.   (line  537)
   46916 * TARGET_LEGITIMATE_ADDRESS_P:           Addressing Modes.   (line   50)
   46917 * TARGET_LEGITIMIZE_ADDRESS:             Addressing Modes.   (line  132)
   46918 * TARGET_LIB_INT_CMP_BIASED:             Library Calls.      (line   35)
   46919 * TARGET_LIBCALL_VALUE:                  Scalar Return.      (line   66)
   46920 * TARGET_LIBGCC_CMP_RETURN_MODE:         Storage Layout.     (line  445)
   46921 * TARGET_LIBGCC_SDATA_SECTION:           Sections.           (line  133)
   46922 * TARGET_LIBGCC_SHIFT_COUNT_MODE:        Storage Layout.     (line  451)
   46923 * TARGET_LOOP_UNROLL_ADJUST:             Misc.               (line  815)
   46924 * TARGET_MACHINE_DEPENDENT_REORG:        Misc.               (line  587)
   46925 * TARGET_MANGLE_ASSEMBLER_NAME:          Label Output.       (line  313)
   46926 * TARGET_MANGLE_DECL_ASSEMBLER_NAME:     Sections.           (line  235)
   46927 * TARGET_MANGLE_TYPE:                    Storage Layout.     (line  526)
   46928 * TARGET_MAX_ANCHOR_OFFSET:              Anchored Addresses. (line   39)
   46929 * TARGET_MD_ASM_CLOBBERS:                Misc.               (line  503)
   46930 * TARGET_MEM_CONSTRAINT:                 Addressing Modes.   (line  109)
   46931 * TARGET_MEM_REF:                        Storage References. (line    6)
   46932 * TARGET_MEMORY_MOVE_COST:               Costs.              (line   81)
   46933 * TARGET_MERGE_DECL_ATTRIBUTES:          Target Attributes.  (line   47)
   46934 * TARGET_MERGE_TYPE_ATTRIBUTES:          Target Attributes.  (line   39)
   46935 * TARGET_MIN_ANCHOR_OFFSET:              Anchored Addresses. (line   33)
   46936 * TARGET_MIN_DIVISIONS_FOR_RECIP_MUL:    Misc.               (line  106)
   46937 * TARGET_MODE_DEPENDENT_ADDRESS_P:       Addressing Modes.   (line  196)
   46938 * TARGET_MODE_REP_EXTENDED:              Misc.               (line  191)
   46939 * TARGET_MS_BITFIELD_LAYOUT_P:           Storage Layout.     (line  481)
   46940 * TARGET_MUST_PASS_IN_STACK:             Register Arguments. (line   62)
   46941 * TARGET_MUST_PASS_IN_STACK, and FUNCTION_ARG: Register Arguments.
   46942                                                              (line   52)
   46943 * TARGET_MVERSION_FUNCTION:              Misc.               (line  660)
   46944 * TARGET_N_FORMAT_TYPES:                 Misc.               (line  866)
   46945 * TARGET_NARROW_VOLATILE_BITFIELD:       Storage Layout.     (line  389)
   46946 * TARGET_OBJC_CONSTRUCT_STRING_OBJECT:   Run-time Target.    (line   92)
   46947 * TARGET_OBJECT_SUFFIX:                  Misc.               (line  742)
   46948 * TARGET_OBJFMT_CPP_BUILTINS:            Run-time Target.    (line   46)
   46949 * TARGET_OPTF:                           Misc.               (line  848)
   46950 * TARGET_OPTION_DEFAULT_PARAMS:          Run-time Target.    (line  166)
   46951 * TARGET_OPTION_INIT_STRUCT:             Run-time Target.    (line  163)
   46952 * TARGET_OPTION_OPTIMIZATION_TABLE:      Run-time Target.    (line  149)
   46953 * TARGET_OPTION_OVERRIDE:                Target Attributes.  (line  137)
   46954 * TARGET_OPTION_PRAGMA_PARSE:            Target Attributes.  (line  131)
   46955 * TARGET_OPTION_PRINT:                   Target Attributes.  (line  125)
   46956 * TARGET_OPTION_RESTORE:                 Target Attributes.  (line  119)
   46957 * TARGET_OPTION_SAVE:                    Target Attributes.  (line  113)
   46958 * TARGET_OPTION_VALID_ATTRIBUTE_P:       Target Attributes.  (line  102)
   46959 * TARGET_OS_CPP_BUILTINS:                Run-time Target.    (line   42)
   46960 * TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE:  Run-time Target.    (line  132)
   46961 * TARGET_OVERRIDES_FORMAT_ATTRIBUTES:    Misc.               (line  870)
   46962 * TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT: Misc.            (line  876)
   46963 * TARGET_OVERRIDES_FORMAT_INIT:          Misc.               (line  880)
   46964 * TARGET_PASS_BY_REFERENCE:              Register Arguments. (line  103)
   46965 * TARGET_PCH_VALID_P:                    PCH Target.         (line   13)
   46966 * TARGET_POSIX_IO:                       Misc.               (line  527)
   46967 * TARGET_PREFERRED_OUTPUT_RELOAD_CLASS:  Register Classes.   (line  287)
   46968 * TARGET_PREFERRED_RELOAD_CLASS:         Register Classes.   (line  208)
   46969 * TARGET_PREFERRED_RENAME_CLASS:         Register Classes.   (line  196)
   46970 * TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs.            (line  128)
   46971 * TARGET_PROFILE_BEFORE_PROLOGUE:        Sections.           (line  294)
   46972 * TARGET_PROMOTE_FUNCTION_MODE:          Storage Layout.     (line  112)
   46973 * TARGET_PROMOTE_PROTOTYPES:             Stack Arguments.    (line   11)
   46974 * TARGET_PROMOTED_TYPE:                  Misc.               (line  933)
   46975 * TARGET_PTRMEMFUNC_VBIT_LOCATION:       Type Layout.        (line  277)
   46976 * TARGET_REF_MAY_ALIAS_ERRNO:            Register Arguments. (line  302)
   46977 * TARGET_REGISTER_MOVE_COST:             Costs.              (line   33)
   46978 * TARGET_RELAXED_ORDERING:               Misc.               (line  885)
   46979 * TARGET_RESOLVE_OVERLOADED_BUILTIN:     Misc.               (line  640)
   46980 * TARGET_RETURN_IN_MEMORY:               Aggregate Return.   (line   17)
   46981 * TARGET_RETURN_IN_MSB:                  Scalar Return.      (line  117)
   46982 * TARGET_RETURN_POPS_ARGS:               Stack Arguments.    (line   94)
   46983 * TARGET_RTX_COSTS:                      Costs.              (line  271)
   46984 * TARGET_SCALAR_MODE_SUPPORTED_P:        Register Arguments. (line  310)
   46985 * TARGET_SCHED_ADJUST_COST:              Scheduling.         (line   37)
   46986 * TARGET_SCHED_ADJUST_PRIORITY:          Scheduling.         (line   52)
   46987 * TARGET_SCHED_ALLOC_SCHED_CONTEXT:      Scheduling.         (line  274)
   46988 * TARGET_SCHED_CLEAR_SCHED_CONTEXT:      Scheduling.         (line  289)
   46989 * TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling.     (line   89)
   46990 * TARGET_SCHED_DFA_NEW_CYCLE:            Scheduling.         (line  235)
   46991 * TARGET_SCHED_DFA_POST_ADVANCE_CYCLE:   Scheduling.         (line  160)
   46992 * TARGET_SCHED_DFA_POST_CYCLE_INSN:      Scheduling.         (line  144)
   46993 * TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE:    Scheduling.         (line  153)
   46994 * TARGET_SCHED_DFA_PRE_CYCLE_INSN:       Scheduling.         (line  132)
   46995 * TARGET_SCHED_DISPATCH:                 Scheduling.         (line  355)
   46996 * TARGET_SCHED_DISPATCH_DO:              Scheduling.         (line  360)
   46997 * TARGET_SCHED_FINISH:                   Scheduling.         (line  109)
   46998 * TARGET_SCHED_FINISH_GLOBAL:            Scheduling.         (line  126)
   46999 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK: Scheduling.  (line  215)
   47000 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN: Scheduling.      (line  204)
   47001 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling.
   47002                                                              (line  168)
   47003 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling.
   47004                                                              (line  196)
   47005 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC: Scheduling.
   47006                                                              (line  328)
   47007 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END: Scheduling.        (line  220)
   47008 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI: Scheduling.       (line  230)
   47009 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT: Scheduling.       (line  225)
   47010 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE: Scheduling.      (line  210)
   47011 * TARGET_SCHED_FREE_SCHED_CONTEXT:       Scheduling.         (line  293)
   47012 * TARGET_SCHED_GEN_SPEC_CHECK:           Scheduling.         (line  315)
   47013 * TARGET_SCHED_H_I_D_EXTENDED:           Scheduling.         (line  269)
   47014 * TARGET_SCHED_INIT:                     Scheduling.         (line   99)
   47015 * TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling.         (line  149)
   47016 * TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN:  Scheduling.         (line  141)
   47017 * TARGET_SCHED_INIT_GLOBAL:              Scheduling.         (line  118)
   47018 * TARGET_SCHED_INIT_SCHED_CONTEXT:       Scheduling.         (line  279)
   47019 * TARGET_SCHED_IS_COSTLY_DEPENDENCE:     Scheduling.         (line  246)
   47020 * TARGET_SCHED_ISSUE_RATE:               Scheduling.         (line   12)
   47021 * TARGET_SCHED_NEEDS_BLOCK_P:            Scheduling.         (line  308)
   47022 * TARGET_SCHED_REORDER:                  Scheduling.         (line   60)
   47023 * TARGET_SCHED_REORDER2:                 Scheduling.         (line   77)
   47024 * TARGET_SCHED_SET_SCHED_CONTEXT:        Scheduling.         (line  285)
   47025 * TARGET_SCHED_SET_SCHED_FLAGS:          Scheduling.         (line  340)
   47026 * TARGET_SCHED_SMS_RES_MII:              Scheduling.         (line  346)
   47027 * TARGET_SCHED_SPECULATE_INSN:           Scheduling.         (line  297)
   47028 * TARGET_SCHED_VARIABLE_ISSUE:           Scheduling.         (line   24)
   47029 * TARGET_SECONDARY_RELOAD:               Register Classes.   (line  316)
   47030 * TARGET_SECTION_TYPE_FLAGS:             File Framework.     (line  151)
   47031 * TARGET_SET_CURRENT_FUNCTION:           Misc.               (line  724)
   47032 * TARGET_SET_DEFAULT_TYPE_ATTRIBUTES:    Target Attributes.  (line   34)
   47033 * TARGET_SETUP_INCOMING_VARARGS:         Varargs.            (line   76)
   47034 * TARGET_SHIFT_TRUNCATION_MASK:          Misc.               (line  154)
   47035 * TARGET_SLOW_UNALIGNED_VECTOR_MEMOP:    Misc.               (line  665)
   47036 * TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P: Register Arguments.
   47037                                                              (line  328)
   47038 * TARGET_SPLIT_COMPLEX_ARG:              Register Arguments. (line  252)
   47039 * TARGET_STACK_PROTECT_FAIL:             Stack Smashing Protection.
   47040                                                              (line   17)
   47041 * TARGET_STACK_PROTECT_GUARD:            Stack Smashing Protection.
   47042                                                              (line    7)
   47043 * TARGET_STATIC_CHAIN:                   Frame Registers.    (line   92)
   47044 * TARGET_STRICT_ARGUMENT_NAMING:         Varargs.            (line  112)
   47045 * TARGET_STRING_OBJECT_REF_TYPE_P:       Run-time Target.    (line  108)
   47046 * TARGET_STRIP_NAME_ENCODING:            Sections.           (line  282)
   47047 * TARGET_STRUCT_VALUE_RTX:               Aggregate Return.   (line   45)
   47048 * TARGET_SUPPORTS_SPLIT_STACK:           Stack Smashing Protection.
   47049                                                              (line   27)
   47050 * TARGET_SUPPORTS_WEAK:                  Label Output.       (line  229)
   47051 * TARGET_TERMINATE_DW2_EH_FRAME_INFO:    Exception Region Output.
   47052                                                              (line   93)
   47053 * TARGET_TRAMPOLINE_ADJUST_ADDRESS:      Trampolines.        (line   75)
   47054 * TARGET_TRAMPOLINE_INIT:                Trampolines.        (line   56)
   47055 * TARGET_UNSPEC_MAY_TRAP_P:              Misc.               (line  716)
   47056 * TARGET_UNWIND_TABLES_DEFAULT:          Exception Region Output.
   47057                                                              (line   74)
   47058 * TARGET_UNWIND_WORD_MODE:               Storage Layout.     (line  457)
   47059 * TARGET_UPDATE_STACK_BOUNDARY:          Misc.               (line  967)
   47060 * TARGET_USE_ANCHORS_FOR_SYMBOL_P:       Anchored Addresses. (line   55)
   47061 * TARGET_USE_BLOCKS_FOR_CONSTANT_P:      Addressing Modes.   (line  258)
   47062 * TARGET_USE_JCR_SECTION:                Misc.               (line  949)
   47063 * TARGET_USES_WEAK_UNWIND_INFO:          Exception Handling. (line  129)
   47064 * TARGET_VALID_DLLIMPORT_ATTRIBUTE_P:    Target Attributes.  (line   68)
   47065 * TARGET_VALID_POINTER_MODE:             Register Arguments. (line  297)
   47066 * TARGET_VECTOR_MODE_SUPPORTED_P:        Register Arguments. (line  322)
   47067 * TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES: Addressing Modes.
   47068                                                              (line  382)
   47069 * TARGET_VECTORIZE_BUILTIN_CONVERSION:   Addressing Modes.   (line  344)
   47070 * TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes.  (line  274)
   47071 * TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN: Addressing Modes. (line  300)
   47072 * TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD: Addressing Modes.  (line  312)
   47073 * TARGET_VECTORIZE_BUILTIN_VEC_PERM:     Addressing Modes.   (line  336)
   47074 * TARGET_VECTORIZE_BUILTIN_VEC_PERM_OK:  Addressing Modes.   (line  340)
   47075 * TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST: Addressing Modes.
   47076                                                              (line  325)
   47077 * TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION: Addressing Modes.
   47078                                                              (line  356)
   47079 * TARGET_VECTORIZE_PREFERRED_SIMD_MODE:  Addressing Modes.   (line  375)
   47080 * TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT: Addressing Modes.
   47081                                                              (line  366)
   47082 * TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE: Addressing Modes.
   47083                                                              (line  331)
   47084 * TARGET_VERSION:                        Run-time Target.    (line  119)
   47085 * TARGET_VTABLE_DATA_ENTRY_DISTANCE:     Type Layout.        (line  330)
   47086 * TARGET_VTABLE_ENTRY_ALIGN:             Type Layout.        (line  324)
   47087 * TARGET_VTABLE_USES_DESCRIPTORS:        Type Layout.        (line  313)
   47088 * TARGET_WANT_DEBUG_PUB_SECTIONS:        SDB and DWARF.      (line   56)
   47089 * TARGET_WEAK_NOT_IN_ARCHIVE_TOC:        Label Output.       (line  265)
   47090 * targetm:                               Target Structure.   (line    7)
   47091 * targets, makefile:                     Makefile.           (line    6)
   47092 * TCmode:                                Machine Modes.      (line  197)
   47093 * TDmode:                                Machine Modes.      (line   94)
   47094 * TEMPLATE_DECL:                         Declarations.       (line    6)
   47095 * Temporaries:                           Temporaries.        (line    6)
   47096 * termination routines:                  Initialization.     (line    6)
   47097 * testing constraints:                   C Constraint Interface.
   47098                                                              (line    6)
   47099 * TEXT_SECTION_ASM_OP:                   Sections.           (line   38)
   47100 * TF_SIZE:                               Type Layout.        (line  131)
   47101 * TFmode:                                Machine Modes.      (line   98)
   47102 * THEN_CLAUSE:                           Statements for C++. (line    6)
   47103 * THREAD_MODEL_SPEC:                     Driver.             (line  163)
   47104 * THROW_EXPR:                            Unary and Binary Expressions.
   47105                                                              (line    6)
   47106 * THUNK_DECL:                            Declarations.       (line    6)
   47107 * THUNK_DELTA:                           Declarations.       (line    6)
   47108 * TImode:                                Machine Modes.      (line   48)
   47109 * TImode, in insn:                       Insns.              (line  272)
   47110 * TLS_COMMON_ASM_OP:                     Sections.           (line   82)
   47111 * TLS_SECTION_ASM_FLAG:                  Sections.           (line   87)
   47112 * tm.h macros:                           Target Macros.      (line    6)
   47113 * TQFmode:                               Machine Modes.      (line   62)
   47114 * TQmode:                                Machine Modes.      (line  119)
   47115 * TRAMPOLINE_ALIGNMENT:                  Trampolines.        (line   49)
   47116 * TRAMPOLINE_SECTION:                    Trampolines.        (line   40)
   47117 * TRAMPOLINE_SIZE:                       Trampolines.        (line   45)
   47118 * trampolines for nested functions:      Trampolines.        (line    6)
   47119 * TRANSFER_FROM_TRAMPOLINE:              Trampolines.        (line  123)
   47120 * trap instruction pattern:              Standard Names.     (line 1381)
   47121 * tree <1>:                              Macros and Functions.
   47122                                                              (line    6)
   47123 * tree:                                  Tree overview.      (line    6)
   47124 * Tree SSA:                              Tree SSA.           (line    6)
   47125 * TREE_CHAIN:                            Macros and Functions.
   47126                                                              (line    6)
   47127 * TREE_CODE:                             Tree overview.      (line    6)
   47128 * tree_int_cst_equal:                    Constant expressions.
   47129                                                              (line    6)
   47130 * TREE_INT_CST_HIGH:                     Constant expressions.
   47131                                                              (line    6)
   47132 * TREE_INT_CST_LOW:                      Constant expressions.
   47133                                                              (line    6)
   47134 * tree_int_cst_lt:                       Constant expressions.
   47135                                                              (line    6)
   47136 * TREE_LIST:                             Containers.         (line    6)
   47137 * TREE_OPERAND:                          Expression trees.   (line    6)
   47138 * TREE_PUBLIC <1>:                       Function Properties.
   47139                                                              (line   28)
   47140 * TREE_PUBLIC:                           Function Basics.    (line    6)
   47141 * TREE_PURPOSE:                          Containers.         (line    6)
   47142 * TREE_READONLY:                         Function Properties.
   47143                                                              (line   37)
   47144 * tree_size:                             Macros and Functions.
   47145                                                              (line   13)
   47146 * TREE_STATIC:                           Function Properties.
   47147                                                              (line   31)
   47148 * TREE_STRING_LENGTH:                    Constant expressions.
   47149                                                              (line    6)
   47150 * TREE_STRING_POINTER:                   Constant expressions.
   47151                                                              (line    6)
   47152 * TREE_THIS_VOLATILE:                    Function Properties.
   47153                                                              (line   34)
   47154 * TREE_TYPE <1>:                         Types for C++.      (line    6)
   47155 * TREE_TYPE <2>:                         Function Basics.    (line   47)
   47156 * TREE_TYPE <3>:                         Expression trees.   (line    6)
   47157 * TREE_TYPE <4>:                         Working with declarations.
   47158                                                              (line   11)
   47159 * TREE_TYPE <5>:                         Types.              (line    6)
   47160 * TREE_TYPE:                             Macros and Functions.
   47161                                                              (line    6)
   47162 * TREE_VALUE:                            Containers.         (line    6)
   47163 * TREE_VEC:                              Containers.         (line    6)
   47164 * TREE_VEC_ELT:                          Containers.         (line    6)
   47165 * TREE_VEC_LENGTH:                       Containers.         (line    6)
   47166 * TRULY_NOOP_TRUNCATION:                 Misc.               (line  177)
   47167 * TRUNC_DIV_EXPR:                        Unary and Binary Expressions.
   47168                                                              (line    6)
   47169 * TRUNC_MOD_EXPR:                        Unary and Binary Expressions.
   47170                                                              (line    6)
   47171 * truncate:                              Conversions.        (line   38)
   47172 * truncMN2 instruction pattern:          Standard Names.     (line  834)
   47173 * TRUTH_AND_EXPR:                        Unary and Binary Expressions.
   47174                                                              (line    6)
   47175 * TRUTH_ANDIF_EXPR:                      Unary and Binary Expressions.
   47176                                                              (line    6)
   47177 * TRUTH_NOT_EXPR:                        Unary and Binary Expressions.
   47178                                                              (line    6)
   47179 * TRUTH_OR_EXPR:                         Unary and Binary Expressions.
   47180                                                              (line    6)
   47181 * TRUTH_ORIF_EXPR:                       Unary and Binary Expressions.
   47182                                                              (line    6)
   47183 * TRUTH_XOR_EXPR:                        Unary and Binary Expressions.
   47184                                                              (line    6)
   47185 * TRY_BLOCK:                             Statements for C++. (line    6)
   47186 * TRY_HANDLERS:                          Statements for C++. (line    6)
   47187 * TRY_STMTS:                             Statements for C++. (line    6)
   47188 * Tuple specific accessors:              Tuple specific accessors.
   47189                                                              (line    6)
   47190 * tuples:                                Tuple representation.
   47191                                                              (line    6)
   47192 * type:                                  Types.              (line    6)
   47193 * type declaration:                      Declarations.       (line    6)
   47194 * TYPE_ALIGN <1>:                        Types for C++.      (line    6)
   47195 * TYPE_ALIGN:                            Types.              (line    6)
   47196 * TYPE_ARG_TYPES <1>:                    Types for C++.      (line    6)
   47197 * TYPE_ARG_TYPES:                        Types.              (line    6)
   47198 * TYPE_ASM_OP:                           Label Output.       (line   67)
   47199 * TYPE_ATTRIBUTES:                       Attributes.         (line   25)
   47200 * TYPE_BINFO:                            Classes.            (line    6)
   47201 * TYPE_BUILT_IN:                         Types for C++.      (line   68)
   47202 * TYPE_CANONICAL:                        Types.              (line    6)
   47203 * TYPE_CONTEXT <1>:                      Types for C++.      (line    6)
   47204 * TYPE_CONTEXT:                          Types.              (line    6)
   47205 * TYPE_DECL:                             Declarations.       (line    6)
   47206 * TYPE_FIELDS <1>:                       Classes.            (line    6)
   47207 * TYPE_FIELDS <2>:                       Types for C++.      (line    6)
   47208 * TYPE_FIELDS:                           Types.              (line    6)
   47209 * TYPE_HAS_ARRAY_NEW_OPERATOR:           Classes.            (line   96)
   47210 * TYPE_HAS_DEFAULT_CONSTRUCTOR:          Classes.            (line   81)
   47211 * TYPE_HAS_MUTABLE_P:                    Classes.            (line   86)
   47212 * TYPE_HAS_NEW_OPERATOR:                 Classes.            (line   93)
   47213 * TYPE_MAIN_VARIANT <1>:                 Types for C++.      (line    6)
   47214 * TYPE_MAIN_VARIANT:                     Types.              (line    6)
   47215 * TYPE_MAX_VALUE:                        Types.              (line    6)
   47216 * TYPE_METHOD_BASETYPE <1>:              Types for C++.      (line    6)
   47217 * TYPE_METHOD_BASETYPE:                  Types.              (line    6)
   47218 * TYPE_METHODS:                          Classes.            (line    6)
   47219 * TYPE_MIN_VALUE:                        Types.              (line    6)
   47220 * TYPE_NAME <1>:                         Types for C++.      (line    6)
   47221 * TYPE_NAME:                             Types.              (line    6)
   47222 * TYPE_NOTHROW_P:                        Functions for C++.  (line  154)
   47223 * TYPE_OFFSET_BASETYPE <1>:              Types for C++.      (line    6)
   47224 * TYPE_OFFSET_BASETYPE:                  Types.              (line    6)
   47225 * TYPE_OPERAND_FMT:                      Label Output.       (line   78)
   47226 * TYPE_OVERLOADS_ARRAY_REF:              Classes.            (line  104)
   47227 * TYPE_OVERLOADS_ARROW:                  Classes.            (line  107)
   47228 * TYPE_OVERLOADS_CALL_EXPR:              Classes.            (line  100)
   47229 * TYPE_POLYMORPHIC_P:                    Classes.            (line   77)
   47230 * TYPE_PRECISION <1>:                    Types for C++.      (line    6)
   47231 * TYPE_PRECISION:                        Types.              (line    6)
   47232 * TYPE_PTR_P:                            Types for C++.      (line   74)
   47233 * TYPE_PTRFN_P:                          Types for C++.      (line   78)
   47234 * TYPE_PTRMEM_P:                         Types for C++.      (line    6)
   47235 * TYPE_PTROB_P:                          Types for C++.      (line   81)
   47236 * TYPE_PTROBV_P:                         Types for C++.      (line    6)
   47237 * TYPE_QUAL_CONST <1>:                   Types for C++.      (line    6)
   47238 * TYPE_QUAL_CONST:                       Types.              (line    6)
   47239 * TYPE_QUAL_RESTRICT <1>:                Types for C++.      (line    6)
   47240 * TYPE_QUAL_RESTRICT:                    Types.              (line    6)
   47241 * TYPE_QUAL_VOLATILE <1>:                Types for C++.      (line    6)
   47242 * TYPE_QUAL_VOLATILE:                    Types.              (line    6)
   47243 * TYPE_RAISES_EXCEPTIONS:                Functions for C++.  (line  149)
   47244 * TYPE_SIZE <1>:                         Types for C++.      (line    6)
   47245 * TYPE_SIZE:                             Types.              (line    6)
   47246 * TYPE_STRUCTURAL_EQUALITY_P:            Types.              (line    6)
   47247 * TYPE_UNQUALIFIED <1>:                  Types for C++.      (line    6)
   47248 * TYPE_UNQUALIFIED:                      Types.              (line    6)
   47249 * TYPE_VFIELD:                           Classes.            (line    6)
   47250 * TYPENAME_TYPE:                         Types for C++.      (line    6)
   47251 * TYPENAME_TYPE_FULLNAME <1>:            Types for C++.      (line    6)
   47252 * TYPENAME_TYPE_FULLNAME:                Types.              (line    6)
   47253 * TYPEOF_TYPE:                           Types for C++.      (line    6)
   47254 * UDAmode:                               Machine Modes.      (line  168)
   47255 * udiv:                                  Arithmetic.         (line  130)
   47256 * udivM3 instruction pattern:            Standard Names.     (line  222)
   47257 * udivmodM4 instruction pattern:         Standard Names.     (line  455)
   47258 * udot_prodM instruction pattern:        Standard Names.     (line  292)
   47259 * UDQmode:                               Machine Modes.      (line  136)
   47260 * UHAmode:                               Machine Modes.      (line  160)
   47261 * UHQmode:                               Machine Modes.      (line  128)
   47262 * UINT16_TYPE:                           Type Layout.        (line  240)
   47263 * UINT32_TYPE:                           Type Layout.        (line  241)
   47264 * UINT64_TYPE:                           Type Layout.        (line  242)
   47265 * UINT8_TYPE:                            Type Layout.        (line  239)
   47266 * UINT_FAST16_TYPE:                      Type Layout.        (line  256)
   47267 * UINT_FAST32_TYPE:                      Type Layout.        (line  257)
   47268 * UINT_FAST64_TYPE:                      Type Layout.        (line  258)
   47269 * UINT_FAST8_TYPE:                       Type Layout.        (line  255)
   47270 * UINT_LEAST16_TYPE:                     Type Layout.        (line  248)
   47271 * UINT_LEAST32_TYPE:                     Type Layout.        (line  249)
   47272 * UINT_LEAST64_TYPE:                     Type Layout.        (line  250)
   47273 * UINT_LEAST8_TYPE:                      Type Layout.        (line  247)
   47274 * UINTMAX_TYPE:                          Type Layout.        (line  223)
   47275 * UINTPTR_TYPE:                          Type Layout.        (line  260)
   47276 * umaddMN4 instruction pattern:          Standard Names.     (line  402)
   47277 * umax:                                  Arithmetic.         (line  149)
   47278 * umaxM3 instruction pattern:            Standard Names.     (line  222)
   47279 * umin:                                  Arithmetic.         (line  149)
   47280 * uminM3 instruction pattern:            Standard Names.     (line  222)
   47281 * umod:                                  Arithmetic.         (line  136)
   47282 * umodM3 instruction pattern:            Standard Names.     (line  222)
   47283 * umsubMN4 instruction pattern:          Standard Names.     (line  426)
   47284 * umulhisi3 instruction pattern:         Standard Names.     (line  374)
   47285 * umulM3_highpart instruction pattern:   Standard Names.     (line  388)
   47286 * umulqihi3 instruction pattern:         Standard Names.     (line  374)
   47287 * umulsidi3 instruction pattern:         Standard Names.     (line  374)
   47288 * unchanging:                            Flags.              (line  324)
   47289 * unchanging, in call_insn:              Flags.              (line   19)
   47290 * unchanging, in jump_insn, call_insn and insn: Flags.       (line   39)
   47291 * unchanging, in mem:                    Flags.              (line  152)
   47292 * unchanging, in subreg:                 Flags.              (line  188)
   47293 * unchanging, in symbol_ref:             Flags.              (line   10)
   47294 * UNEQ_EXPR:                             Unary and Binary Expressions.
   47295                                                              (line    6)
   47296 * UNGE_EXPR:                             Unary and Binary Expressions.
   47297                                                              (line    6)
   47298 * UNGT_EXPR:                             Unary and Binary Expressions.
   47299                                                              (line    6)
   47300 * UNION_TYPE <1>:                        Classes.            (line    6)
   47301 * UNION_TYPE:                            Types.              (line    6)
   47302 * unions, returning:                     Interface.          (line   10)
   47303 * UNITS_PER_WORD:                        Storage Layout.     (line   60)
   47304 * UNKNOWN_TYPE <1>:                      Types for C++.      (line    6)
   47305 * UNKNOWN_TYPE:                          Types.              (line    6)
   47306 * UNLE_EXPR:                             Unary and Binary Expressions.
   47307                                                              (line    6)
   47308 * UNLIKELY_EXECUTED_TEXT_SECTION_NAME:   Sections.           (line   49)
   47309 * UNLT_EXPR:                             Unary and Binary Expressions.
   47310                                                              (line    6)
   47311 * UNORDERED_EXPR:                        Unary and Binary Expressions.
   47312                                                              (line    6)
   47313 * unshare_all_rtl:                       Sharing.            (line   58)
   47314 * unsigned division:                     Arithmetic.         (line  130)
   47315 * unsigned division with unsigned saturation: Arithmetic.    (line  130)
   47316 * unsigned greater than:                 Comparisons.        (line   64)
   47317 * unsigned less than:                    Comparisons.        (line   68)
   47318 * unsigned minimum and maximum:          Arithmetic.         (line  149)
   47319 * unsigned_fix:                          Conversions.        (line   77)
   47320 * unsigned_float:                        Conversions.        (line   62)
   47321 * unsigned_fract_convert:                Conversions.        (line   97)
   47322 * unsigned_sat_fract:                    Conversions.        (line  103)
   47323 * unspec <1>:                            Constant Definitions.
   47324                                                              (line  111)
   47325 * unspec:                                Side Effects.       (line  287)
   47326 * unspec_volatile <1>:                   Constant Definitions.
   47327                                                              (line   99)
   47328 * unspec_volatile:                       Side Effects.       (line  287)
   47329 * untyped_call instruction pattern:      Standard Names.     (line 1012)
   47330 * untyped_return instruction pattern:    Standard Names.     (line 1062)
   47331 * UPDATE_PATH_HOST_CANONICALIZE (PATH):  Filesystem.         (line   59)
   47332 * update_ssa:                            SSA.                (line   76)
   47333 * update_stmt <1>:                       SSA Operands.       (line    6)
   47334 * update_stmt:                           Manipulating GIMPLE statements.
   47335                                                              (line  141)
   47336 * update_stmt_if_modified:               Manipulating GIMPLE statements.
   47337                                                              (line  144)
   47338 * UQQmode:                               Machine Modes.      (line  123)
   47339 * us_ashift:                             Arithmetic.         (line  173)
   47340 * us_minus:                              Arithmetic.         (line   36)
   47341 * us_mult:                               Arithmetic.         (line   92)
   47342 * us_neg:                                Arithmetic.         (line   81)
   47343 * us_plus:                               Arithmetic.         (line   14)
   47344 * us_truncate:                           Conversions.        (line   48)
   47345 * usaddM3 instruction pattern:           Standard Names.     (line  222)
   47346 * USAmode:                               Machine Modes.      (line  164)
   47347 * usashlM3 instruction pattern:          Standard Names.     (line  458)
   47348 * usdivM3 instruction pattern:           Standard Names.     (line  222)
   47349 * use:                                   Side Effects.       (line  162)
   47350 * USE_C_ALLOCA:                          Host Misc.          (line   19)
   47351 * USE_LD_AS_NEEDED:                      Driver.             (line  136)
   47352 * USE_LOAD_POST_DECREMENT:               Costs.              (line  226)
   47353 * USE_LOAD_POST_INCREMENT:               Costs.              (line  221)
   47354 * USE_LOAD_PRE_DECREMENT:                Costs.              (line  236)
   47355 * USE_LOAD_PRE_INCREMENT:                Costs.              (line  231)
   47356 * use_param:                             GTY Options.        (line  109)
   47357 * use_paramN:                            GTY Options.        (line  127)
   47358 * use_params:                            GTY Options.        (line  135)
   47359 * USE_SELECT_SECTION_FOR_FUNCTIONS:      Sections.           (line  195)
   47360 * USE_STORE_POST_DECREMENT:              Costs.              (line  246)
   47361 * USE_STORE_POST_INCREMENT:              Costs.              (line  241)
   47362 * USE_STORE_PRE_DECREMENT:               Costs.              (line  256)
   47363 * USE_STORE_PRE_INCREMENT:               Costs.              (line  251)
   47364 * used:                                  Flags.              (line  342)
   47365 * used, in symbol_ref:                   Flags.              (line  215)
   47366 * USER_LABEL_PREFIX:                     Instruction Output. (line  154)
   47367 * USING_STMT:                            Statements for C++. (line    6)
   47368 * usmaddMN4 instruction pattern:         Standard Names.     (line  410)
   47369 * usmsubMN4 instruction pattern:         Standard Names.     (line  434)
   47370 * usmulhisi3 instruction pattern:        Standard Names.     (line  378)
   47371 * usmulM3 instruction pattern:           Standard Names.     (line  222)
   47372 * usmulqihi3 instruction pattern:        Standard Names.     (line  378)
   47373 * usmulsidi3 instruction pattern:        Standard Names.     (line  378)
   47374 * usnegM2 instruction pattern:           Standard Names.     (line  476)
   47375 * USQmode:                               Machine Modes.      (line  132)
   47376 * ussubM3 instruction pattern:           Standard Names.     (line  222)
   47377 * usum_widenM3 instruction pattern:      Standard Names.     (line  302)
   47378 * UTAmode:                               Machine Modes.      (line  172)
   47379 * UTQmode:                               Machine Modes.      (line  140)
   47380 * V in constraint:                       Simple Constraints. (line   43)
   47381 * VA_ARG_EXPR:                           Unary and Binary Expressions.
   47382                                                              (line    6)
   47383 * values, returned by functions:         Scalar Return.      (line    6)
   47384 * VAR_DECL:                              Declarations.       (line    6)
   47385 * var_location:                          Debug Information.  (line   14)
   47386 * varargs implementation:                Varargs.            (line    6)
   47387 * variable:                              Declarations.       (line    6)
   47388 * Variable Location Debug Information in RTL: Debug Information.
   47389                                                              (line    6)
   47390 * variable_size:                         GTY Options.        (line  225)
   47391 * vashlM3 instruction pattern:           Standard Names.     (line  472)
   47392 * vashrM3 instruction pattern:           Standard Names.     (line  472)
   47393 * vec_concat:                            Vector Operations.  (line   28)
   47394 * vec_duplicate:                         Vector Operations.  (line   33)
   47395 * VEC_EXTRACT_EVEN_EXPR:                 Vectors.            (line    6)
   47396 * vec_extract_evenM instruction pattern: Standard Names.     (line  176)
   47397 * VEC_EXTRACT_ODD_EXPR:                  Vectors.            (line    6)
   47398 * vec_extract_oddM instruction pattern:  Standard Names.     (line  183)
   47399 * vec_extractM instruction pattern:      Standard Names.     (line  171)
   47400 * vec_initM instruction pattern:         Standard Names.     (line  204)
   47401 * VEC_INTERLEAVE_HIGH_EXPR:              Vectors.            (line    6)
   47402 * vec_interleave_highM instruction pattern: Standard Names.  (line  190)
   47403 * VEC_INTERLEAVE_LOW_EXPR:               Vectors.            (line    6)
   47404 * vec_interleave_lowM instruction pattern: Standard Names.   (line  197)
   47405 * VEC_LSHIFT_EXPR:                       Vectors.            (line    6)
   47406 * vec_merge:                             Vector Operations.  (line   11)
   47407 * VEC_PACK_FIX_TRUNC_EXPR:               Vectors.            (line    6)
   47408 * VEC_PACK_SAT_EXPR:                     Vectors.            (line    6)
   47409 * vec_pack_sfix_trunc_M instruction pattern: Standard Names. (line  329)
   47410 * vec_pack_ssat_M instruction pattern:   Standard Names.     (line  322)
   47411 * VEC_PACK_TRUNC_EXPR:                   Vectors.            (line    6)
   47412 * vec_pack_trunc_M instruction pattern:  Standard Names.     (line  315)
   47413 * vec_pack_ufix_trunc_M instruction pattern: Standard Names. (line  329)
   47414 * vec_pack_usat_M instruction pattern:   Standard Names.     (line  322)
   47415 * VEC_RSHIFT_EXPR:                       Vectors.            (line    6)
   47416 * vec_select:                            Vector Operations.  (line   19)
   47417 * vec_setM instruction pattern:          Standard Names.     (line  166)
   47418 * vec_shl_M instruction pattern:         Standard Names.     (line  309)
   47419 * vec_shr_M instruction pattern:         Standard Names.     (line  309)
   47420 * VEC_UNPACK_FLOAT_HI_EXPR:              Vectors.            (line    6)
   47421 * VEC_UNPACK_FLOAT_LO_EXPR:              Vectors.            (line    6)
   47422 * VEC_UNPACK_HI_EXPR:                    Vectors.            (line    6)
   47423 * VEC_UNPACK_LO_EXPR:                    Vectors.            (line    6)
   47424 * vec_unpacks_float_hi_M instruction pattern: Standard Names.
   47425                                                              (line  351)
   47426 * vec_unpacks_float_lo_M instruction pattern: Standard Names.
   47427                                                              (line  351)
   47428 * vec_unpacks_hi_M instruction pattern:  Standard Names.     (line  336)
   47429 * vec_unpacks_lo_M instruction pattern:  Standard Names.     (line  336)
   47430 * vec_unpacku_float_hi_M instruction pattern: Standard Names.
   47431                                                              (line  351)
   47432 * vec_unpacku_float_lo_M instruction pattern: Standard Names.
   47433                                                              (line  351)
   47434 * vec_unpacku_hi_M instruction pattern:  Standard Names.     (line  344)
   47435 * vec_unpacku_lo_M instruction pattern:  Standard Names.     (line  344)
   47436 * VEC_WIDEN_MULT_HI_EXPR:                Vectors.            (line    6)
   47437 * VEC_WIDEN_MULT_LO_EXPR:                Vectors.            (line    6)
   47438 * vec_widen_smult_hi_M instruction pattern: Standard Names.  (line  360)
   47439 * vec_widen_smult_lo_M instruction pattern: Standard Names.  (line  360)
   47440 * vec_widen_umult_hi_M instruction pattern: Standard Names.  (line  360)
   47441 * vec_widen_umult_lo__M instruction pattern: Standard Names. (line  360)
   47442 * vector:                                Containers.         (line    6)
   47443 * vector operations:                     Vector Operations.  (line    6)
   47444 * VECTOR_CST:                            Constant expressions.
   47445                                                              (line    6)
   47446 * VECTOR_STORE_FLAG_VALUE:               Misc.               (line  308)
   47447 * virtual operands:                      SSA Operands.       (line    6)
   47448 * VIRTUAL_INCOMING_ARGS_REGNUM:          Regs and Memory.    (line   59)
   47449 * VIRTUAL_OUTGOING_ARGS_REGNUM:          Regs and Memory.    (line   87)
   47450 * VIRTUAL_STACK_DYNAMIC_REGNUM:          Regs and Memory.    (line   78)
   47451 * VIRTUAL_STACK_VARS_REGNUM:             Regs and Memory.    (line   69)
   47452 * VLIW:                                  Processor pipeline description.
   47453                                                              (line    6)
   47454 * vlshrM3 instruction pattern:           Standard Names.     (line  472)
   47455 * VMS:                                   Filesystem.         (line   37)
   47456 * VMS_DEBUGGING_INFO:                    VMS Debug.          (line    9)
   47457 * VOID_TYPE:                             Types.              (line    6)
   47458 * VOIDmode:                              Machine Modes.      (line  190)
   47459 * volatil:                               Flags.              (line  356)
   47460 * volatil, in insn, call_insn, jump_insn, code_label, barrier, and note: Flags.
   47461                                                              (line   44)
   47462 * volatil, in label_ref and reg_label:   Flags.              (line   65)
   47463 * volatil, in mem, asm_operands, and asm_input: Flags.       (line   94)
   47464 * volatil, in reg:                       Flags.              (line  116)
   47465 * volatil, in subreg:                    Flags.              (line  188)
   47466 * volatil, in symbol_ref:                Flags.              (line  224)
   47467 * volatile memory references:            Flags.              (line  357)
   47468 * volatile, in prefetch:                 Flags.              (line  232)
   47469 * voting between constraint alternatives: Class Preferences. (line    6)
   47470 * vrotlM3 instruction pattern:           Standard Names.     (line  472)
   47471 * vrotrM3 instruction pattern:           Standard Names.     (line  472)
   47472 * walk_dominator_tree:                   SSA.                (line  256)
   47473 * walk_gimple_op:                        Statement and operand traversals.
   47474                                                              (line   32)
   47475 * walk_gimple_seq:                       Statement and operand traversals.
   47476                                                              (line   50)
   47477 * walk_gimple_stmt:                      Statement and operand traversals.
   47478                                                              (line   13)
   47479 * walk_use_def_chains:                   SSA.                (line  232)
   47480 * WCHAR_TYPE:                            Type Layout.        (line  191)
   47481 * WCHAR_TYPE_SIZE:                       Type Layout.        (line  199)
   47482 * which_alternative:                     Output Statement.   (line   59)
   47483 * WHILE_BODY:                            Statements for C++. (line    6)
   47484 * WHILE_COND:                            Statements for C++. (line    6)
   47485 * WHILE_STMT:                            Statements for C++. (line    6)
   47486 * whopr:                                 LTO.                (line    6)
   47487 * WIDEST_HARDWARE_FP_SIZE:               Type Layout.        (line  146)
   47488 * WINT_TYPE:                             Type Layout.        (line  204)
   47489 * word_mode:                             Machine Modes.      (line  336)
   47490 * WORD_REGISTER_OPERATIONS:              Misc.               (line   63)
   47491 * WORDS_BIG_ENDIAN:                      Storage Layout.     (line   29)
   47492 * WORDS_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  217)
   47493 * wpa:                                   LTO.                (line    6)
   47494 * X in constraint:                       Simple Constraints. (line  124)
   47495 * x-HOST:                                Host Fragment.      (line    6)
   47496 * XCmode:                                Machine Modes.      (line  197)
   47497 * XCOFF_DEBUGGING_INFO:                  DBX Options.        (line   13)
   47498 * XEXP:                                  Accessors.          (line    6)
   47499 * XF_SIZE:                               Type Layout.        (line  130)
   47500 * XFmode:                                Machine Modes.      (line   79)
   47501 * XINT:                                  Accessors.          (line    6)
   47502 * xm-MACHINE.h <1>:                      Host Misc.          (line    6)
   47503 * xm-MACHINE.h:                          Filesystem.         (line    6)
   47504 * xor:                                   Arithmetic.         (line  168)
   47505 * xor, canonicalization of:              Insn Canonicalizations.
   47506                                                              (line   79)
   47507 * xorM3 instruction pattern:             Standard Names.     (line  222)
   47508 * XSTR:                                  Accessors.          (line    6)
   47509 * XVEC:                                  Accessors.          (line   41)
   47510 * XVECEXP:                               Accessors.          (line   48)
   47511 * XVECLEN:                               Accessors.          (line   44)
   47512 * XWINT:                                 Accessors.          (line    6)
   47513 * zero_extend:                           Conversions.        (line   28)
   47514 * zero_extendMN2 instruction pattern:    Standard Names.     (line  844)
   47515 * zero_extract:                          Bit-Fields.         (line   30)
   47516 * zero_extract, canonicalization of:     Insn Canonicalizations.
   47517                                                              (line   88)
   47518 
   47519 
   47520 
   47521 Tag Table:
   47522 Node: Top2066
   47523 Node: Contributing5161
   47524 Node: Portability5902
   47525 Node: Interface7690
   47526 Node: Libgcc10730
   47527 Node: Integer library routines12571
   47528 Node: Soft float library routines19410
   47529 Node: Decimal float library routines31347
   47530 Node: Fixed-point fractional library routines47104
   47531 Node: Exception handling routines147502
   47532 Node: Miscellaneous routines148609
   47533 Node: Languages150729
   47534 Node: Source Tree152278
   47535 Node: Configure Terms152860
   47536 Node: Top Level155818
   47537 Node: gcc Directory159130
   47538 Node: Subdirectories160080
   47539 Node: Configuration161952
   47540 Node: Config Fragments162672
   47541 Node: System Config163901
   47542 Node: Configuration Files164837
   47543 Node: Build167194
   47544 Node: Makefile167606
   47545 Ref: Makefile-Footnote-1174409
   47546 Ref: Makefile-Footnote-2174554
   47547 Node: Library Files174626
   47548 Node: Headers175188
   47549 Node: Documentation177271
   47550 Node: Texinfo Manuals178130
   47551 Node: Man Page Generation180474
   47552 Node: Miscellaneous Docs182389
   47553 Node: Front End183778
   47554 Node: Front End Directory187471
   47555 Node: Front End Config188791
   47556 Node: Front End Makefile191733
   47557 Node: Back End195515
   47558 Node: Testsuites199194
   47559 Node: Test Idioms200125
   47560 Node: Test Directives203522
   47561 Node: Directives204049
   47562 Node: Selectors214117
   47563 Node: Effective-Target Keywords215259
   47564 Ref: arm_neon_ok222492
   47565 Ref: arm_neon_fp16_ok222653
   47566 Node: Add Options231849
   47567 Node: Require Support233046
   47568 Node: Final Actions235553
   47569 Node: Ada Tests239616
   47570 Node: C Tests240958
   47571 Node: libgcj Tests245381
   47572 Node: LTO Testing246508
   47573 Node: gcov Testing248155
   47574 Node: profopt Testing251142
   47575 Node: compat Testing252857
   47576 Node: Torture Tests257097
   47577 Node: Options258714
   47578 Node: Option file format259154
   47579 Node: Option properties266125
   47580 Node: Passes277679
   47581 Node: Parsing pass278423
   47582 Node: Gimplification pass281953
   47583 Node: Pass manager283786
   47584 Node: Tree SSA passes285580
   47585 Node: RTL passes308052
   47586 Node: RTL320395
   47587 Node: RTL Objects322583
   47588 Node: RTL Classes326457
   47589 Node: Accessors331455
   47590 Node: Special Accessors333849
   47591 Node: Flags339215
   47592 Node: Machine Modes355390
   47593 Node: Constants367702
   47594 Node: Regs and Memory373731
   47595 Node: Arithmetic391632
   47596 Node: Comparisons401459
   47597 Node: Bit-Fields405751
   47598 Node: Vector Operations407303
   47599 Node: Conversions409138
   47600 Node: RTL Declarations413636
   47601 Node: Side Effects414457
   47602 Node: Incdec430779
   47603 Node: Assembler434114
   47604 Node: Debug Information435659
   47605 Node: Insns436857
   47606 Node: Calls463057
   47607 Node: Sharing465650
   47608 Node: Reading RTL468760
   47609 Node: GENERIC469752
   47610 Node: Deficiencies471625
   47611 Node: Tree overview471866
   47612 Node: Macros and Functions475993
   47613 Node: Identifiers476818
   47614 Node: Containers478429
   47615 Node: Types479586
   47616 Node: Declarations491682
   47617 Node: Working with declarations492177
   47618 Node: Internal structure497783
   47619 Node: Current structure hierarchy498167
   47620 Node: Adding new DECL node types500261
   47621 Node: Attributes504334
   47622 Node: Expression trees505579
   47623 Node: Constant expressions507332
   47624 Node: Storage References511551
   47625 Node: Unary and Binary Expressions515070
   47626 Node: Vectors534488
   47627 Node: Statements539417
   47628 Node: Basic Statements539937
   47629 Node: Blocks544444
   47630 Node: Statement Sequences545848
   47631 Node: Empty Statements546181
   47632 Node: Jumps546755
   47633 Node: Cleanups547408
   47634 Node: OpenMP549176
   47635 Node: Functions554923
   47636 Node: Function Basics555394
   47637 Node: Function Properties559079
   47638 Node: Language-dependent trees561861
   47639 Node: C and C++ Trees562747
   47640 Node: Types for C++565651
   47641 Node: Namespaces570617
   47642 Node: Classes573724
   47643 Node: Functions for C++578802
   47644 Node: Statements for C++585055
   47645 Node: C++ Expressions593103
   47646 Node: Java Trees594604
   47647 Node: GIMPLE594717
   47648 Node: Tuple representation598338
   47649 Node: GIMPLE instruction set606614
   47650 Node: GIMPLE Exception Handling608282
   47651 Node: Temporaries610196
   47652 Ref: Temporaries-Footnote-1611511
   47653 Node: Operands611574
   47654 Node: Compound Expressions612336
   47655 Node: Compound Lvalues612570
   47656 Node: Conditional Expressions613332
   47657 Node: Logical Operators613990
   47658 Node: Manipulating GIMPLE statements620747
   47659 Node: Tuple specific accessors626681
   47660 Node: `GIMPLE_ASM'627500
   47661 Node: `GIMPLE_ASSIGN'630133
   47662 Node: `GIMPLE_BIND'634239
   47663 Node: `GIMPLE_CALL'636046
   47664 Node: `GIMPLE_CATCH'640316
   47665 Node: `GIMPLE_COND'641460
   47666 Node: `GIMPLE_DEBUG'644248
   47667 Node: `GIMPLE_EH_FILTER'647631
   47668 Node: `GIMPLE_LABEL'649119
   47669 Node: `GIMPLE_NOP'650094
   47670 Node: `GIMPLE_OMP_ATOMIC_LOAD'650463
   47671 Node: `GIMPLE_OMP_ATOMIC_STORE'651373
   47672 Node: `GIMPLE_OMP_CONTINUE'652012
   47673 Node: `GIMPLE_OMP_CRITICAL'653362
   47674 Node: `GIMPLE_OMP_FOR'654299
   47675 Node: `GIMPLE_OMP_MASTER'657814
   47676 Node: `GIMPLE_OMP_ORDERED'658197
   47677 Node: `GIMPLE_OMP_PARALLEL'658597
   47678 Node: `GIMPLE_OMP_RETURN'661369
   47679 Node: `GIMPLE_OMP_SECTION'662019
   47680 Node: `GIMPLE_OMP_SECTIONS'662685
   47681 Node: `GIMPLE_OMP_SINGLE'664291
   47682 Node: `GIMPLE_PHI'665228
   47683 Node: `GIMPLE_RESX'666643
   47684 Node: `GIMPLE_RETURN'667362
   47685 Node: `GIMPLE_SWITCH'667930
   47686 Node: `GIMPLE_TRY'670068
   47687 Node: `GIMPLE_WITH_CLEANUP_EXPR'671858
   47688 Node: GIMPLE sequences672741
   47689 Node: Sequence iterators675947
   47690 Node: Adding a new GIMPLE statement code684403
   47691 Node: Statement and operand traversals685679
   47692 Node: Tree SSA688279
   47693 Node: Annotations690065
   47694 Node: SSA Operands690591
   47695 Node: SSA705122
   47696 Node: Alias analysis717413
   47697 Node: Memory model721193
   47698 Node: Loop Analysis and Representation722556
   47699 Node: Loop representation723737
   47700 Node: Loop querying730657
   47701 Node: Loop manipulation733490
   47702 Node: LCSSA735858
   47703 Node: Scalar evolutions737930
   47704 Node: loop-iv741174
   47705 Node: Number of iterations743100
   47706 Node: Dependency analysis745909
   47707 Node: Lambda752277
   47708 Node: Omega753948
   47709 Node: Control Flow755513
   47710 Node: Basic Blocks756508
   47711 Node: Edges761076
   47712 Node: Profile information769638
   47713 Node: Maintaining the CFG774324
   47714 Node: Liveness information781201
   47715 Node: Machine Desc783327
   47716 Node: Overview785795
   47717 Node: Patterns787836
   47718 Node: Example791274
   47719 Node: RTL Template792709
   47720 Node: Output Template803364
   47721 Node: Output Statement807329
   47722 Node: Predicates811291
   47723 Node: Machine-Independent Predicates814209
   47724 Node: Defining Predicates819154
   47725 Node: Constraints825119
   47726 Node: Simple Constraints826601
   47727 Node: Multi-Alternative839457
   47728 Node: Class Preferences842298
   47729 Node: Modifiers843190
   47730 Node: Machine Constraints847322
   47731 Node: Disable Insn Alternatives886476
   47732 Node: Define Constraints889369
   47733 Node: C Constraint Interface896150
   47734 Node: Standard Names899791
   47735 Ref: shift patterns919732
   47736 Ref: prologue instruction pattern960366
   47737 Ref: epilogue instruction pattern960859
   47738 Node: Pattern Ordering970581
   47739 Node: Dependent Patterns971817
   47740 Node: Jump Patterns973437
   47741 Ref: Jump Patterns-Footnote-1975581
   47742 Node: Looping Patterns975627
   47743 Node: Insn Canonicalizations980355
   47744 Node: Expander Definitions984306
   47745 Node: Insn Splitting992424
   47746 Node: Including Patterns1002026
   47747 Node: Peephole Definitions1003806
   47748 Node: define_peephole1005059
   47749 Node: define_peephole21011390
   47750 Node: Insn Attributes1014457
   47751 Node: Defining Attributes1015563
   47752 Ref: define_enum_attr1018082
   47753 Node: Expressions1019117
   47754 Node: Tagging Insns1025719
   47755 Node: Attr Example1030072
   47756 Node: Insn Lengths1032446
   47757 Node: Constant Attributes1035505
   47758 Node: Delay Slots1036674
   47759 Node: Processor pipeline description1039898
   47760 Ref: Processor pipeline description-Footnote-11057516
   47761 Node: Conditional Execution1057838
   47762 Node: Constant Definitions1060691
   47763 Ref: define_enum1064482
   47764 Node: Iterators1064970
   47765 Node: Mode Iterators1065417
   47766 Node: Defining Mode Iterators1066395
   47767 Node: Substitutions1067889
   47768 Node: Examples1070130
   47769 Node: Code Iterators1071578
   47770 Node: Target Macros1073835
   47771 Node: Target Structure1076923
   47772 Node: Driver1078192
   47773 Node: Run-time Target1097578
   47774 Node: Per-Function Data1107215
   47775 Node: Storage Layout1109980
   47776 Node: Type Layout1135214
   47777 Node: Registers1149685
   47778 Node: Register Basics1150659
   47779 Node: Allocation Order1156164
   47780 Node: Values in Registers1158610
   47781 Node: Leaf Functions1166099
   47782 Node: Stack Registers1168957
   47783 Node: Register Classes1170229
   47784 Node: Old Constraints1199376
   47785 Node: Stack and Calling1206528
   47786 Node: Frame Layout1207062
   47787 Node: Exception Handling1217942
   47788 Node: Stack Checking1224320
   47789 Node: Frame Registers1229133
   47790 Node: Elimination1236799
   47791 Node: Stack Arguments1241028
   47792 Node: Register Arguments1247925
   47793 Node: Scalar Return1266705
   47794 Node: Aggregate Return1272784
   47795 Node: Caller Saves1276994
   47796 Node: Function Entry1278172
   47797 Node: Profiling1290800
   47798 Node: Tail Calls1292499
   47799 Node: Stack Smashing Protection1293865
   47800 Node: Varargs1295490
   47801 Node: Trampolines1302176
   47802 Node: Library Calls1308823
   47803 Node: Addressing Modes1313024
   47804 Node: Anchored Addresses1332040
   47805 Node: Condition Code1334689
   47806 Node: CC0 Condition Codes1336818
   47807 Node: MODE_CC Condition Codes1340064
   47808 Node: Cond Exec Macros1346291
   47809 Node: Costs1347268
   47810 Node: Scheduling1363479
   47811 Node: Sections1382400
   47812 Node: PIC1397701
   47813 Node: Assembler Format1399761
   47814 Node: File Framework1400899
   47815 Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1407788
   47816 Node: Data Output1411053
   47817 Node: Uninitialized Data1419402
   47818 Node: Label Output1424966
   47819 Node: Initialization1448038
   47820 Node: Macros for Initialization1454000
   47821 Node: Instruction Output1460723
   47822 Node: Dispatch Tables1471225
   47823 Node: Exception Region Output1475603
   47824 Node: Alignment Output1481947
   47825 Node: Debugging Info1486492
   47826 Node: All Debuggers1487162
   47827 Node: DBX Options1490017
   47828 Node: DBX Hooks1495466
   47829 Node: File Names and DBX1497392
   47830 Node: SDB and DWARF1499504
   47831 Node: VMS Debug1505351
   47832 Node: Floating Point1505938
   47833 Node: Mode Switching1510761
   47834 Node: Target Attributes1514687
   47835 Node: Emulated TLS1522599
   47836 Node: MIPS Coprocessors1525989
   47837 Node: PCH Target1527558
   47838 Node: C++ ABI1529100
   47839 Node: Named Address Spaces1533749
   47840 Node: Misc1538688
   47841 Ref: TARGET_SHIFT_TRUNCATION_MASK1546116
   47842 Node: Host Config1589518
   47843 Node: Host Common1590586
   47844 Node: Filesystem1592965
   47845 Node: Host Misc1597080
   47846 Node: Fragments1599529
   47847 Node: Target Fragment1600724
   47848 Node: Host Fragment1606614
   47849 Node: Collect21606854
   47850 Node: Header Dirs1609490
   47851 Node: Type Information1610913
   47852 Node: GTY Options1613270
   47853 Node: GGC Roots1624960
   47854 Node: Files1625680
   47855 Node: Invoking the garbage collector1628426
   47856 Node: Troubleshooting1629929
   47857 Node: Plugins1631005
   47858 Node: LTO1647376
   47859 Node: Funding1672422
   47860 Node: GNU Project1674905
   47861 Node: Copying1675554
   47862 Node: GNU Free Documentation License1713085
   47863 Node: Contributors1738225
   47864 Node: Option Index1775097
   47865 Node: Concept Index1775901
   47866 
   47867 End Tag Table
   47868